Mi bucket de Amazon S3 tiene archivos de datos creados mediante el comando UNLOAD desde un clúster de Amazon Redshift en otra cuenta. ¿Por qué no puedo acceder a esos archivos?

5 minutos de lectura
0

Mi bucket de Amazon Simple Storage Service (Amazon S3) contiene archivos de datos creados mediante el comando UNLOAD desde un clúster de Amazon Redshift en otra cuenta de AWS. Sin embargo, recibo los errores 403 de acceso denegado cuando intento acceder a esos archivos desde mi propia cuenta. ¿Cómo puedo solucionar este problema?

Breve descripción

De forma predeterminada, un objeto de S3 pertenece a la cuenta de AWS que lo cargó. Esto es así incluso cuando el bucket es propiedad de otra cuenta. Por lo tanto, cuando otra cuenta coloca archivos de datos de Amazon Redshift en su bucket, no tiene el permiso predeterminado para esos archivos.

Para acceder a los archivos de datos, un rol de AWS Identity and Access Management (IAM) con permisos para varias cuentas debe ejecutar el comando UNLOAD otra vez. Siga estos pasos para configurar el clúster de Amazon Redshift con permisos para varias cuentas en el bucket:

1.    Desde la cuenta del bucket de S3, cree un rol de IAM con permisos para el bucket. Este es el rol de bucket.

2.    Desde la cuenta del clúster de Amazon Redshift, cree otro rol de IAM con permisos para asumir el rol de bucket. Este es el rol de clúster.

3.    Actualice el rol de bucket para conceder el acceso al bucket y, a continuación, cree una relación de confianza con el rol de clúster.

4.    Desde el clúster de Amazon Redshift, ejecute el comando UNLOAD con el rol de clúster y el rol de bucket.

Importante: Esta resolución no se aplica a los clústeres de Amazon Redshift ni a los buckets de S3 que utilizan el cifrado del lado del servidor con AWS Key Management Service (AWS KMS).

Resolución

Crear un rol de bucket

Desde la cuenta del bucket de S3, cree un rol de IAM con permisos para el bucket:

1.    Desde la cuenta del bucket de S3, abra la consola de IAM.

2.    Cree un rol de IAM. Al crear el rol, seleccione lo siguiente:

En Seleccionar el tipo de entidad de confianza, elija el servicio de AWS.

En Elija el servicio que utilizará este rol, elija Redshift.

En Seleccionar su caso de uso, elija Redshift - Personalizable.

3.    Tras crear el rol de IAM, adjunte una política que otorgue permisos al bucket. Puede utilizar una política similar a la siguiente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537676482",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/*",
        "arn:aws:s3:::awsexamplebucket"
      ]
    }
  ]
}

4.Obtenga el nombre de recurso de Amazon (ARN) del rol de bucket. Necesitará el ARN del rol para un paso posterior.

Crear un rol de clúster

Desde la cuenta del clúster de Amazon Redshift, cree otro rol de IAM con permisos para asumir el rol de bucket:

1.    Desde la cuenta del clúster de Amazon Redshift, abra la consola de IAM.

2.    Cree un rol de IAM. Al crear el rol, seleccione lo siguiente:

En Seleccionar el tipo de entidad de confianza, elija el servicio de AWS.

En Elija el servicio que utilizará este rol, elija Redshift.

En Seleccionar su caso de uso, elija Redshift - Personalizable.

3.    Tras crear el rol de IAM, adjunte la siguiente política al rol:

Importante: Sustituya arn:aws:iam::123456789012:role/Bucket_Role por el ARN del rol de bucket que creó.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537501110",
      "Action": [
        "sts:AssumeRole"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:iam::123456789012:role/Bucket_Role"
    }
  ]
}

4.     Obtenga el ARN del rol de clúster. Necesitará el ARN del rol para un paso posterior.

Actualizar el rol de bucket para crear una relación de confianza con el rol de clúster

1.    Desde la cuenta del bucket de S3, abra la consola de IAM.

2.    En el panel de navegación, seleccione Roles.

3.    En la lista de roles, abra el rol de bucket que creó..

4.    Seleccione la pestaña deRelaciones de confianza.

5.    Seleccione Editar la relación de confianza.

6.    En Documento de política, sustituya la política existente por la siguiente:

Importante: Sustituya arn:aws:iam::012345678901:role/Cluster_Role por el ARN del rol de clúster que creó.

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

7.    Seleccione Actualizar la política de confianza.

Desde el clúster de Amazon Redshift, ejecutar la operación de descarga mediante el rol de clúster y el rol de bucket

1.    Conéctese al clúster de Amazon Redshift.

2.    Ejecute el comando UNLOAD con los dos roles de IAM que creó, de forma similar a la siguiente:

Importante: Sustituya arn:aws:iam::012345678901:role/Cluster_Role por el ARN de su rol de clúster. A continuación, sustituya arn:aws:iam::123456789012:role/Bucket_Role por el ARN de su rol de bucket.

unload ('select * from TABLE_NAME')
to 's3://awsexamplebucket'
iam_role 'arn:aws:iam::012345678901:role/Cluster_Role,arn:aws:iam::123456789012:role/Bucket_Role';

Tras ejecutar el comando UNLOAD, los archivos de datos pertenecen a la misma cuenta que el bucket en el que están almacenados.


Información relacionada

Ejemplos de UNLOAD

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año