Configuración del acceso entre cuentas en Athena a los buckets de Amazon S3 - Amazon Athena

Configuración del acceso entre cuentas en Athena a los buckets de Amazon S3

Es habitual en Amazon Athena que se conceda acceso a usuarios de una cuenta que no sea la cuenta del propietario del bucket, a fin de que dichos usuarios puedan realizar consultas. En este caso utilice una política de bucket para conceder acceso.

nota

Para obtener información sobre el acceso entre cuentas a catálogos de datos de AWS Glue desde Athena, consulte Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue.

La siguiente política de bucket de ejemplo, creada y aplicada al bucket s3://amzn-s3-demo-bucket por el propietario del bucket, concede acceso a todos los usuarios de la cuenta 123456789123, que es una cuenta diferente.

{ "Version": "2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789123:root" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

Para conceder acceso a un usuario determinado de una cuenta, reemplace la clave Principal por una clave que especifique al usuario en lugar de root. Por ejemplo, para el perfil de usuario Dave utilice arn:aws:iam::123456789123:user/Dave.

Configuración del acceso entre cuentas a un bucket cifrado con una clave AWS KMS personalizada

Si tiene un bucket de Amazon S3 cifrado con una clave AWS Key Management Service (AWS KMS) personalizada, es posible que deba conceder acceso a él a los usuarios desde otra cuenta de Amazon Web Services.

La concesión de acceso a un bucket AWS KMS cifrado en la cuenta A a un usuario de la cuenta B requiere los siguientes permisos:

  • La política de bucket de la cuenta A debe conceder acceso al rol asumido por la cuenta B.

  • La política de claves de AWS KMS de la cuenta A debe conceder acceso al rol asumido por el usuario de la cuenta B.

  • El rol de AWS Identity and Access Management (IAM) asumido por la cuenta B debe conceder acceso tanto al bucket como a la clave de la cuenta A.

En los siguientes procedimientos se describe cómo conceder cada uno de estos permisos.

Para conceder acceso al bucket de la cuenta A al usuario de la cuenta B
  • En la cuenta A, revise la política de bucket de S3 y confirme que existe una declaración que permite el acceso desde el ID de cuenta de la cuenta B.

    Por ejemplo, la siguiente política de bucket permite el acceso s3:GetObject al ID de cuenta 111122223333:

    { "Id": "ExamplePolicy1", "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Principal": { "AWS": [ "111122223333" ] } } ] }
Para conceder acceso al usuario de la cuenta B desde la política clave AWS KMS de la cuenta A
  1. En la política de claves de AWS KMS de la cuenta A, conceda al rol asumido por la cuenta B permisos para las siguientes acciones:

    • kms:Encrypt

    • kms:Decrypt

    • kms:ReEncrypt*

    • kms:GenerateDataKey*

    • kms:DescribeKey

    En el siguiente ejemplo se concede acceso de clave a un solo rol de IAM.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role_name" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }
  2. En la cuenta A, revise la política de claves mediante la vista de políticas de la AWS Management Console.

  3. En la política clave, compruebe que la siguiente instrucción muestra la cuenta B como entidad principal.

    "Sid": "Allow use of the key"
  4. Si la instrucción "Sid": "Allow use of the key" no está presente, lleve a cabo los siguientes pasos:

    1. Cambie para ver la política clave mediante la vista predeterminada de la consola.

    2. Añada el ID de cuenta de la cuenta B como una cuenta externa con acceso a la clave.

Para conceder acceso al bucket y a la clave de la cuenta A desde el rol de IAM asumido por la cuenta B
  1. Desde la cuenta B, abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. Abra el rol de IAM asociado al usuario en la cuenta B.

  3. Revise la lista de políticas de permisos aplicadas al rol de IAM.

  4. Asegúrese de que se aplica una política que conceda acceso al bucket.

    La siguiente instrucción de ejemplo concede al rol de IAM acceso a las operaciones s3:GetObject y s3:PutObject en el bucket amzn-s3-demo-bucket:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
  5. Asegúrese de que se aplica una política que conceda acceso a la clave.

    nota

    Si el rol de IAM de la cuenta B ya tiene acceso de administrador, no es necesario conceder acceso a la clave desde las políticas de IAM del usuario.

    La siguiente instrucción de ejemplo concede al rol de IAM acceso para utilizar la clave arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt3", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey", "kms:ReEncrypt*" ], "Effect": "Allow", "Resource": "arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" } ] }

Configuración del acceso entre cuentas a los objetos del bucket

Los objetos cargados por una cuenta (cuenta C) distinta de la cuenta propietaria del bucket (cuenta A) pueden requerir ACL explícitas de nivel de objeto que concedan acceso de lectura a la cuenta que realiza la consulta (cuenta B). Para evitar este requisito, la cuenta C debe asumir un rol en la cuenta A antes de colocar objetos en el bucket de la cuenta A. Para obtener más información, consulte ¿Cómo puedo proporcionar acceso entre cuentas a objetos que se encuentran en buckets de Amazon S3?.