¿Por qué los usuarios multicuenta reciben errores de «Acceso denegado» cuando intentan acceder a los objetos de S3 que he cifrado con una clave de AWS KMS administrada por el cliente?
Mi bucket de Amazon Simple Storage Service (Amazon S3) está cifrado con una clave de AWS Key Management Service (AWS KMS) administrada por el cliente. Cuando los usuarios de otra cuenta de AWS intentan acceder a los objetos de mi bucket, reciben un error de «Acceso denegado».
Descripción breve
Para conceder acceso a un bucket cifrado con AWS KMS en la cuenta A a un usuario de la cuenta B, aplique los siguientes permisos:
- La política de bucket de Amazon S3 de la cuenta A debe permitir el acceso a la cuenta B.
- La clave administrada de AWS en la cuenta A debe estar ubicada en la misma región de AWS que el bucket de S3 de la cuenta A.
- La política de claves de AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B.
- La política de AWS Identity and Access Management (IAM) de la cuenta B debe conceder a los usuarios el acceso al bucket y a la clave de la cuenta A.
Para solucionar el error de Acceso denegado, compruebe que estos permisos estén configurados correctamente.
Importante: En el caso de las políticas de claves de administradas por el cliente, solo puede cambiar la política de claves desde la cuenta de que creó la política.
Debe usar un ARN de clave KMS completo para la configuración de cifrado del bucket. Si utiliza un alias de clave de KMS, AWS KMS resuelve la clave solo en la cuenta propietaria del bucket (cuenta A).
A continuación, se muestra un ejemplo de un ARN de clave de AWS KMS completo que se utiliza para el cifrado de buckets:
"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
En el siguiente ejemplo se muestra un alias de clave de AWS KMS que no se utiliza para el cifrado de buckets:
arn:aws:kms:us-west-2:111122223333:alias/alias-name
Resolución
La política de bucket de la cuenta A debe conceder acceso al usuario de la cuenta B
Desde la cuenta A, revise la política de bucket para confirmar que haya una sentencia que permita el acceso desde el ID de cuenta de la cuenta B.
Por ejemplo, la siguiente política de bucket permite a s3:GetObject acceder al ID de cuenta 111122223333:
{ "Id": "ExamplePolicy1", "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Principal": { "AWS": [ "111122223333" ] } } ] }
La política de claves de AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B
La política de claves de AWS KMS debe conceder al usuario de la cuenta B permisos para la acción kms:Decrypt. Por ejemplo, para conceder acceso clave a un solo usuario o rol de IAM, utilice una política de claves similar a la siguiente:
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/role_name" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
Desde la cuenta A, utilice la vista de políticas de la Consola de administración de AWS para revisar la política de claves. En la política de claves, busque "Sid": "Allow use of the key". A continuación, confirme que el usuario de la cuenta B figura como entidad principal en esa sentencia.
Si no ve la instrucción "Sid": "Allow use of the key", utilice la vista predeterminada de la Consola de administración de AWS para revisar la política de claves. A continuación, añada el ID de la cuenta B como cuenta externa que tiene acceso a la clave.
La política de usuario de IAM de la cuenta B debe conceder acceso al bucket y a la clave de la cuenta A
Desde la cuenta B, lleve a cabo los siguientes pasos:
- Abra la consola de IAM.
- Abra el usuario o rol de IAM que está asociado al usuario en la cuenta B.
- Revise la lista de políticas de permisos que se aplican al usuario o rol de IAM.
- Compruebe que se hayan aplicado políticas que permitan el acceso tanto al bucket como a la clave.
Nota: Si el usuario o rol de IAM de la cuenta B ya tienen acceso de administrador, no es necesario que conceda el acceso a la clave. La siguiente política de ejemplo permite el acceso al usuario de IAM de la cuenta B a los objetos y a la clave de KMS para descifrar los objetos de un bucket:{ "Version": "2012-10-17", "Statement": [{ "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }, { "Sid": "ExampleStmt2", "Action": [ "kms:Decrypt" ], "Effect": "Allow", "Resource": "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }
Para obtener más información sobre cómo añadir o corregir los permisos de un usuario de IAM, consulte Cambio de los permisos de un usuario de IAM.
Información relacionada
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses