¿Cómo puedo proporcionar acceso entre cuentas a los objetos que se encuentran en los buckets de Amazon S3?

11 minutos de lectura
0

Quiero conceder a otra cuenta de AWS acceso a un objeto que se encuentra en un bucket de Amazon Simple Storage Service (Amazon S3).

Descripción corta

En Amazon S3, puede conceder a los usuarios de otra cuenta de AWS acceso entre cuentas granular a los objetos que posea en su cuenta.

Según el tipo de acceso que desee proporcionar, utilice una de las siguientes soluciones para conceder acceso entre cuentas a los objetos:

  • Políticas de AWS Identity and Access Management (IAM) y políticas de bucket basadas en recursos para el acceso únicamente programático a los objetos de bucket de S3
  • Políticas de IAM y listas de control de acceso (ACL) basadas en recursos para el acceso únicamente mediante programación a los objetos del bucket de S3
    **Nota:**Cuando se activa la configuración impuesta por el propietario del bucket, se desactivan todas las ACL de bucket y objeto. Por lo tanto, no puede usar las ACL para conceder acceso entre cuentas. De forma predeterminada, todos los buckets recién creados tienen habilitada la configuración impuesta por el propietario del bucket. Para gestionar el acceso entre cuentas, también se recomienda utilizar políticas de IAM y políticas de bucket en lugar de las ACL. Para obtener más información, consulte Controlar la propiedad de los objetos y deshabilitar las ACL de su bucket.
  • Roles de IAM entre cuentas para el acceso programático y de consola a los objetos del bucket de S3

Si el solicitante es una entidad principal de IAM, la cuenta propietaria de la entidad principal debe conceder los permisos de S3 mediante una política de IAM. Según su caso de uso, el propietario del bucket también debe conceder permisos mediante una política de bucket o una ACL. Una vez otorgado el acceso, el acceso programático a los buckets entre cuentas es el mismo que el acceso a los buckets de cuentas.

Para obtener información sobre el acceso entre cuentas con los puntos de acceso de Amazon S3 o AWS Key Management Service (AWS KMS), consulte ¿Por qué los usuarios de varias cuentas reciben errores de acceso denegado cuando intentan acceder a objetos de S3 cifrados con una clave de AWS KMS personalizada?

En el caso de conjuntos de datos de gran tamaño a los que debe acceder como objetos entre cuentas, se recomienda utilizar los puntos de acceso de S3. Para obtener más información, consulte Simplifique y escale la administración del acceso a conjuntos de datos compartidos con puntos de acceso de Amazon S3 entre cuentas.

Solución

Políticas de IAM y políticas de bucket basadas en recursos

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de AWS CLI.

Para administrar el control de acceso entre cuentas y auditar los permisos del objeto S3, utilice políticas de bucket basadas en los recursos. Aplique una política de bucket a nivel de bucket para definir los siguientes valores:

  • Elemento principal: Quién puede acceder a los objetos del interior del bucket
  • Elemento de recurso: Los objetos a los que pueden acceder
  • Elemento de acción: Cómo se puede acceder a los objetos del interior del bucket

Cuando aplica una política de bucket a nivel de bucket, puede definir el acceso granular a diferentes objetos dentro del bucket. También puede revisar la política de bucket para ver quién puede acceder a los objetos de un bucket de S3.

Para usar las políticas de bucket para administrar el acceso a los bucket de S3, siga estos pasos:
Nota: En los pasos siguientes, la cuenta A es su cuenta y la cuenta B es la cuenta a la que desea conceder acceso al objeto. 

  1. Cree un bucket de S3 en la cuenta A.

  2. Cree un rol o usuario de IAM en la cuenta B.

  3. Conceda permiso al rol de IAM en la cuenta B para descargar (GetObject) y cargar objetos (PutObject) a y desde un bucket específico. Use la política de IAM para conceder también al rol de IAM en la cuenta B permisos para llamar a PutObjectAcl, que otorga permisos de objeto al propietario del bucket:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
    
            }
        ]
    }

    **Nota:**Actualice la política para incluir las variables de usuario. También puede limitar el acceso a una carpeta de bucket específica que esté en la cuenta A. Para limitar el acceso a una carpeta de bucket específica, defina el nombre del mismo en el elemento Recurso, como "arn:aws:s3:::AccountABucketName/FolderName/*". Para obtener más información, consulte ¿Cómo puedo conceder a un usuario acceso a una carpeta específica de mi bucket de Amazon S3?También puede crear una política basada en la identidad de IAM con el comando create-policy de AWS CLI.

  4. Configure la política de bucket de la cuenta A para conceder permisos al rol o usuario de IAM que creó en la cuenta B. Use esta política de bucket para conceder a un usuario los permisos de GetObject y PutObject para los objetos de un bucket que sea propiedad de la cuenta A:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountABucketName/*"
                ]
            }
        ]
    }

    También puede crear una política de bucket de Amazon S3 con el comando put-bucket-policy de AWS CLI.

Nota: Para limitar el acceso a un archivo de bucket específico, defina el nombre del mismo en el elemento Recurso, como "arn:aws:s3:::AccountABucketName/FolderName/*". Cuando usa el permiso s3:PutObject con una condición, el propietario del bucket tiene el control total sobre los objetos que suben otras cuentas. La llamada a la API PutObject aplica la ACL con encabezados específicos. 

Políticas de IAM y ACL basadas en recursos

También puede usar las ACL de objetos para administrar los permisos en escenarios específicos. Para obtener más información, consulte Cuándo usar una política de acceso basada en ACL (ACL de bucket y objeto).

Las ACL de Amazon S3 permiten a los usuarios definir únicamente los conjuntos de permisos READ, WRITE, READ_ACP, WRITE_ACP y FULL_CONTROL. Solo puede usar una cuenta o uno de los grupos predefinidos de Amazon S3 como un concesionario de la ACL de Amazon S3. Cuando especifica una dirección de correo electrónico o un identificador de usuario canónico para una cuenta, la ACL se aplica a todas las identidades de la cuenta del concesionario. Por ejemplo, no puede usar una ACL para restringir el acceso a usuarios o roles de IAM individuales. Tampoco puede aplicar ACL a diferentes objetos que compartan los mismos prefijos.

**Nota:**Es posible que el propietario del bucket no tenga el control total sobre los objetos que cargó el concesionario de la ACL. Esto se debe a que la ACL no admite la condición para la operación S3 que la ACL autoriza.

Para usar las ACL de bucket y objeto para administrar el acceso a los bucket de S3, siga estos pasos:

  1. Cree un rol o usuario de IAM en la cuenta B.
  2. Otorgue al rol o al usuario permisos para realizar las operaciones de Amazon S3 necesarias. Los usuarios que llamen a PutObject y GetObject deben tener los permisos que se enumeran en la sección Políticas basadas en recursos y políticas de IAM.
  3. Configure la ACL del bucket para incluir al menos el permiso WRITE para la cuenta B. De este modo, se asegura de que los roles o usuarios de IAM de la cuenta B puedan cargar objetos a un bucket que pertenezca a la cuenta A:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> WRITE </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    **Nota:**Para encontrar su CanonicalUserID, consulte Cómo encontrar un ID de usuario canónico de una cuenta de AWS.
  4. Configure las ACL de objetos para que incluyan al menos el permiso de LECTURA para la cuenta B. Esto permite a los roles o usuarios de IAM de la cuenta B descargar objetos de un depósito propiedad de la cuenta A:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> READ </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Los permisos de ACL varían según el recurso, bucket u objeto de S3 al que se aplica una ACL. Para obtener más información, consulte Descripción general de la lista de control de acceso (ACL). Cuando cree su bucket o suba un objeto a un bucket existente, configure las ACL de bucket y objeto. Para obtener más información, consulte Configuración de ACL.

Roles de IAM entre cuentas

No todos los servicios de AWS admiten políticas basadas en recursos. Use roles de IAM multicuenta para centralizar la administración de permisos al proporcionar acceso entre cuentas a varios servicios. Este método permite el acceso entre cuentas a los objetos que posee o ha cargado otra cuenta o servicio de AWS. Si no usa roles de IAM entre cuentas, debe modificar la ACL del objeto. Para obtener más información, consulte Cómo autoriza Amazon S3 una solicitud de operación de objeto.

Para usar los roles de IAM entre cuentas para administrar el acceso a los buckets de S3, siga estos pasos:

  1. Cree un rol de IAM en la cuenta A.
  2. Otorgue permisos al rol para realizar las operaciones de S3 necesarias. En la política de confianza del rol, conceda permisos a un rol o usuario de la cuenta B para que asuma el rol en la cuenta A:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    **Nota:**Los roles de IAM deben tener una política de confianza que defina las entidades principales que pueden asumir el rol y cuándo los roles pueden asumirlo. Los roles de IAM pueden tener varias políticas de permisos que definen los permisos que puede desempeñar una entidad principal que asuma el rol y los recursos que utiliza. 
    También puede ejecutar el comando de AWS CLI create-role para crear un rol con la política de confianza.
    La siguiente política de acceso permite a un usuario que ha asumido este rol descargar y cargar objetos mediante programación a través de la consola de Amazon S3. Para obtener más información, consulte ¿Cómo puedo conceder a un usuario acceso a una carpeta específica de mi bucket de Amazon S3?
    **Nota:**Si solo se requiere acceso programático, puede eliminar las dos primeras instrucciones de la política:
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::*"
                ]
            },
            {
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::AccountABucketName"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
            }
        ]
    }
    O bien ejecute el comando de AWS CLI create-policy para crear una política basada en la identidad de IAM.
  3. Otorgue permisos a un rol o usuario de IAM de la cuenta B para que asuma el rol de IAM que creó en la cuenta A. Debe agregar el siguiente ejemplo de política como política de permisos del usuario o rol de IAM:
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    O bien ejecute el comando de AWS CLI create-policy para crear una política basada en la identidad de IAM.
  4. Desde un rol de la cuenta B, asuma el rol de la cuenta A para que las identidades de IAM de la cuenta B puedan realizar las operaciones de S3 necesarias. Para obtener más información, consulte Cambiar a un rol (consola).
    **Nota:**Cuando asume un rol de IAM en la cuenta A, Amazon S3 determina la operación en función de la política de acceso. La función de IAM funciona como una llamada a la API que invoca una identidad de IAM local en la cuenta A. No se requiere una política de bucket ni una ACL para el acceso entre cuentas. Para obtener más información, consulte Precios de Amazon S3.

Información relacionada

Acciones, recursos y claves de condición para Amazon S3

Ejemplos de políticas de bucket

Directrices de la política de acceso

Configuración de copias de seguridad y restauración nativas entre cuentas en Amazon RDS para Microsoft SQL Server

Ejemplos de políticas de usuario y rol

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses