Estoy tratando de colocar un archivo de texto de Lambda que está en la cuenta B en el depósito S3 en la cuenta A. El depósito S3 (depósito de prueba) tiene el cifrado AWS-KMS con la clave administrada aws/s3 habilitada. 1. Agregué los siguientes permisos en el depósito Cuenta A- S3 (depósito de prueba):
``` {"Version": "2012-10-17", "Id": "ExamplePolicy", "Statement": [ { "Sid": "ExampleStmt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB:role/Lambda-Role" }, "Action": "s3:*", "Resource": "arn:aws:s3:::test-bucket/*" } ] } {"Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:ReEncrypt*" ], "Resource": [ "arn:aws:kms:us-west-2:AccountA:key/AWS-KMS-ID" ] } ] }Este es mi Código Lambda:
res = s3.put_object( Body=message, Key=file_name, Bucket='test-bucket', ACL='bucket-owner-full-control' )Obteniendo el siguiente error al ejecutar este código desde la cuenta B Lambda:
An error occurred (AccessDenied) when calling the PutObject operation: Access DeniedDado que el depósito S3 está cifrado por AWS Managed Key, no puedo editar la política de KMS, lo que hacemos en el caso de la clave administrada por el cliente.
Alguien, por favor, guíeme, ¿qué me estoy perdiendo?
Intente otorgar a su función lambda s3:PutObject . Entonces, la política en línea de su rol lambda debería ser algo así como
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:ReEncrypt*" ], "Resource": [ "arn:aws:kms:us-west-2:AccountA:key/AWS-KMS-ID" ] }, { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::test-bucket/*" } ] }Yo mismo he estado resolviendo este problema durante un par de horas.
No creo que esto sea posible con la "clave administrada de AWS" predeterminada cuando se usa SSE-KMS. En su lugar, debe crear una CMK y otorgar acceso de usuario de cuenta cruzada a esta clave.
HTH
No se puede otorgar acceso entre cuentas para AWS Managed Key. Necesidad de utilizar la clave administrada por el cliente o el cifrado predeterminado.
Esto puede ser útil: https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/