¿Cómo puedo proporcionar acceso entre cuentas a objetos que están en buckets de Amazon S3?

11 minutos de lectura
0

Quiero conceder a otra cuenta de AWS acceso a un objeto que está almacenado en un bucket de Amazon Simple Storage Service (Amazon S3). ¿Cómo puedo proporcionar acceso entre cuentas a los buckets de Amazon S3?

Descripción breve

En Amazon S3, puede conceder a los usuarios de otra cuenta de AWS (cuenta B) acceso granular entre cuentas a los objetos de su cuenta (cuenta A).

En función del 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 acceder a objetos de buckets de S3 solo mediante programación
  • Políticas de IAM y listas de control de acceso (ACL) basadas en recursos para acceder a objetos de buckets de S3 solo mediante programación
    Nota: Cuando está habilitada la opción Bucket owner enforced (Propietario del bucket aplicado), se desactivan todas las ACL de bucket y objeto. Por lo tanto, no se pueden utilizar ACL para conceder acceso entre cuentas. De forma predeterminada, todos los buckets recién creados tienen habilitada la configuración Bucket owner enforced (Propietario del bucket aplicado). También es una práctica recomendada utilizar políticas de IAM y políticas de bucket (en lugar de ACL) para administrar el acceso entre cuentas a buckets y objetos. Para obtener más información, consulte Controlar la propiedad de los objetos y desactivar las ACL para un bucket.
  • Roles de IAM entre cuentas para acceder mediante programación y mediante la consola a objetos de buckets de S3

Si el solicitante es una entidad principal de IAM, la cuenta de AWS que es propietaria de la entidad principal debe conceder los permisos de S3 a través de una política de IAM. En función del caso de uso específico, el propietario del bucket también debe conceder permisos a través de una política de bucket o una ACL. Una vez concedido el acceso, el acceso programático de los depósitos entre cuentas es igual que el acceso a los mismos depósitos de cuentas.

Resolución

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

Nota: Si se producen errores al ejecutar comandos de la AWS Command Line Interface (AWS CLI), asegúrese de que está utilizando la versión más reciente de la AWS CLI.

Utilice políticas de bucket basadas en recursos para administrar el control de acceso entre cuentas y auditar los permisos de los objetos de S3. Si aplica una política de bucket en el nivel del bucket, puede definir lo siguiente:

  • Quién puede acceder a los objetos del bucket (mediante el elemento Principal [Entidad principal])
  • A qué objetos se puede acceder (mediante el elemento Resource [Recurso])
  • Cómo se puede acceder a los objetos del bucket (mediante el elemento Action [Acción])

Aplicar una política de bucket en el nivel del bucket permite definir un acceso granular a los diferentes objetos 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 utilizar políticas de bucket con el fin de administrar el acceso a buckets de S3, siga estos pasos:

Nota: Sustituya las variables Account con su cuenta.

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

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

3.    Otorgue al rol de IAM de la cuenta B permiso para descargar (GET Object) y cargar (PUT Object) objetos en/de un bucket específico. Utilice la siguiente política de IAM para conceder también al rol de IAM de la cuenta B permisos para llamar a PutObjectAcl y conceder permisos de objetos al propietario del bucket:

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

        }
    ]
}

Nota: Asegúrese de actualizar la política para incluir sus variables de usuario (tales como el ID de cuenta, el nombre del bucket y el ARN). Además, puede limitar el acceso a una carpeta de bucket específica de la cuenta A. Para limitar el acceso a una carpeta de bucket específica, defina el nombre de la carpeta en el elemento de recurso; por ejemplo, “arn:aws:s3:::AccountABucketName/FolderName/*”. Para obtener más información, consulte ¿Cómo puedo utilizar políticas de IAM para conceder acceso específico de usuario a determinadas carpetas?

También puede crear una política basada en identidad de IAM mediante el ejemplo de comando de la AWS CLI create-policy.

4.    Configure la política de bucket de la cuenta A para conceder permisos al rol o usuario de IAM que haya creado en la cuenta B. Utilice esta política de bucket para conceder a un usuario permisos GetObject y PutObject para los objetos de un bucket 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 mediante el ejemplo de comando de la AWS CLI put-bucket-policy.

Nota: Puede definir una carpeta de bucket de S3 en concreto en el elemento de recurso para proporcionar un acceso más limitado; por ejemplo, “Resource”: “arn:aws:s3:::AccountABucketName/FolderName/*”. Utilizando el permiso s3:PutObject con una condición, el propietario del bucket consigue un control total sobre los objetos que cargan otras cuentas. Se aplica la ACL con encabezados específicos que se pasan en la llamada a la API de PutObject. Para obtener más información, consulte Conceder el permiso s3:PutObject con una condición que requiere que el propietario del bucket consiga control total.

Políticas de IAM y ACL basadas en recursos

Si las ACL satisfacen sus necesidades mejor que las políticas de IAM y de bucket de S3, utilice ACL de objetos para administrar los permisos de determinados escenarios. Para obtener más información, consulte Cuándo utilizar una política de acceso basada en ACL (ACL de bucket y objeto). Las ACL de Amazon S3 permiten a los usuarios definir solo los siguientes conjuntos de permisos: READ, WRITE, READ_ACP, WRITE_ACP y FULL_CONTROL. Solo se puede utilizar una cuenta de AWS o uno de los grupos predefinidos de Amazon S3 como beneficiario de la ACL de Amazon S3. Cuando se especifica la dirección de correo electrónico o el ID de usuario canónico de una cuenta de AWS, la ACL se aplica a todas las entidades de la cuenta de AWS beneficiaria. Por ejemplo, no se puede utilizar una ACL para restringir el acceso a usuarios o roles de IAM individuales. Tampoco se pueden aplicar ACL a objetos diferentes que compartan los mismos prefijos.

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

Para usar ACL de bucket y objeto con el fin de administrar el acceso a buckets de S3, siga estos pasos:

1.    Cree un rol o usuario de IAM en la cuenta B. A continuación, conceda a ese rol o usuario permisos para realizar las operaciones de Amazon S3 requeridas. Los usuarios que llaman a PutObject y GetObject necesitan los permisos indicados en la sección Políticas basadas en recursos y políticas de IAM.

2.    Configure la ACL de bucket para que incluya al menos el permiso WRITE para la cuenta B. Eso garantiza que los roles o usuarios de IAM de la cuenta B puedan cargar objetos (llamar a la API PutObject) en un bucket 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> WRITE </Permission>
    </Grant>
    ...
  </AccessControlList>
</AccessControlPolicy>

Nota: Para buscar su CanonicalUserID, consulte Buscar el ID de usuario canónico de una cuenta de AWS.

3.    Configure las ACL de objeto para que incluyan al menos el permiso READ para la cuenta B. Eso garantiza que los roles o usuarios de IAM de la cuenta B puedan descargar un objeto (llamar a la API GetObject) de un bucket 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 en función del recurso, bucket u objeto de S3 al que se aplica una ACL. Para obtener más información, consulte Información general sobre las listas de control de acceso (ACL). Puede configurar ACL de bucket y objeto cuando cree un bucket o cuando cargue un objeto en un bucket existente. Para obtener más información, consulte Administrar ACL.

Roles de IAM entre cuentas

No todos los servicios de AWS admiten políticas basadas en recursos. Por lo tanto, se pueden utilizar roles de IAM entre cuentas para centralizar la administración de permisos cuando se proporcione acceso entre cuentas a varios servicios. Utilizar roles de IAM entre cuentas simplifica el aprovisionamiento de acceso entre cuentas a objetos de S3 que estén almacenados en varios buckets de S3. Como resultado, no es necesario administrar varias políticas para buckets de S3. Este método permite el acceso entre cuentas a objetos pertenecientes o cargados por otra cuenta de AWS o servicios de AWS. Si no se utilizan roles de IAM entre cuentas, se debe modificar la ACL de objeto. Para obtener más información, consulte Cómo Amazon S3 autoriza una solicitud para una operación de objeto.

Para utilizar roles de IAM entre cuentas con el fin de administrar el acceso a buckets de S3, siga estos pasos:

1.    Cree un rol de IAM en la cuenta A. A continuación, conceda a ese rol permisos para realizar las operaciones de S3 requeridas. En la política de confianza del rol, conceda a un rol o usuario de la cuenta B permisos para asumir el rol en la cuenta A:

Nota: Los roles de IAM necesitan una política de confianza que defina qué entidades principales pueden asumir la función y en qué condiciones. Los roles de IAM pueden tener varias políticas de permisos (en línea y adjuntas) que definen los permisos que una entidad principal que asume el rol puede realizar y con qué recursos.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

También puede crear un rol con la política de confianza mediante el ejemplo de comando de la AWS CLI create-role.

La siguiente política de acceso permite a un usuario que ha asumido este rol descargar y cargar objetos mediante programación y mediante la consola de Amazon S3. Para obtener más información, consulte ¿Cómo puedo utilizar políticas de IAM para conceder acceso específico de usuario a determinadas carpetas?

Nota: Si solo se requiere acceso mediante programación, se pueden eliminar las dos primeras instrucciones de la siguiente 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/*"
        }
    ]
}

También puede crear una política basada en identidad de IAM mediante el ejemplo de comando de la AWS CLI create-policy.

2.    Conceda a un rol o usuario de IAM de la cuenta B permisos para asumir el rol de IAM que haya creado en la cuenta A.

Nota: La siguiente política de ejemplo debe agregarse 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"
  }
}

También puede crear una política basada en identidad de IAM mediante el ejemplo de comando de la AWS CLI create-policy.

3.    Desde un rol de la cuenta B, asuma el rol de la cuenta A, de modo que las entidades de IAM de la cuenta B puedan realizar las operaciones de S3 requeridas. Para obtener más información, consulte Cambiar a un rol (consola).

Nota: Al asumir un rol de IAM en la cuenta A, la operación de Amazon S3 viene determinada por la política de acceso. El rol de IAM se considera como una llamada a la API realizada por una entidad de IAM local de 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 Acciones de Amazon S3.


Información relacionada

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

Ejemplos de políticas de bucket

Directrices de políticas de acceso

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

Ejemplos de políticas de usuario

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año