¿Cómo puedo crear un acceso entre cuentas de Amazon Redshift Spectrum para AWS Glue y Amazon S3?

6 minutos de lectura
0

Quiero usar Amazon Redshift Spectrum para acceder a AWS Glue y Amazon Simple Storage Service (Amazon S3) en otra cuenta de AWS diferente que se encuentre en la misma región de AWS. ¿Cómo puedo hacerlo?

Breve descripción

Para acceder a recursos de AWS que se encuentran en otra cuenta diferente a la de Amazon Redshift Spectrum, siga estos pasos:

1.    En la cuenta 1, cree un rol de AWS Identity and Access Management (IAM) con una relación de confianza respecto a Amazon Redshift. Este rol debe estar asociado al clúster de Amazon Redshift.

2.    En la cuenta 2, cree otro rol con acceso tanto a AWS Glue como a Amazon S3. Este rol modifica la relación de confianza y permite que la cuenta de Amazon Redshift asuma este rol.

3.    En la cuenta 1, edite los permisos del rol existente para que asuma el rol creado en la cuenta de AWS Glue y Amazon S3.

Solución

Cuenta 1: Creación de un rol de AWS Identity and Access Management (IAM) con una relación de confianza respecto a Amazon Redshift

1.    Abra la consola de IAM.

2.    En el panel de navegación, elija Roles y, a continuación, Crear rol.

3.    En Select type of trusted entity, seleccione Servicio de AWS.

4.    Seleccione Redshift.

5.    En Seleccione su caso de uso, elija Redshift - Personalizable.

6.    Seleccione Siguiente: Permisos, Siguiente: Etiquetas y, a continuación, Siguiente: Revisar. No es necesario añadir políticas ni etiquetas.

7.    Introduzca un Nombre de rol y, a continuación, seleccione Crear rol. En los siguientes ejemplos, nos referiremos a este rol como redshift_role1.

8.    Asocie redshift_role1 con el clúster de Amazon Redshift. Esta asociación permite que el clúster asuma el rol recién creado para acceder a Amazon S3, Amazon Athena y AWS Glue.

Cuenta 2: Creación de otro rol con acceso a AWS Glue y Amazon S3

1.    Abra la consola de IAM.

2.    Elija Políticas y, a continuación, seleccione Crear política.

3.    Seleccione la pestaña JSON y, a continuación, introduzca una política de IAM similar a la siguiente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "glue:BatchCreatePartition",
        "glue:UpdateDatabase",
        "glue:CreateTable",
        "glue:DeleteDatabase",
        "glue:GetTables",
        "glue:GetPartitions",
        "glue:BatchDeletePartition",
        "glue:UpdateTable",
        "glue:BatchGetPartition",
        "glue:DeleteTable",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetDatabase",
        "glue:GetPartition",
        "glue:CreateDatabase",
        "glue:BatchDeleteTable",
        "glue:CreatePartition",
        "glue:DeletePartition",
        "glue:UpdatePartition"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": [
        "arn:aws:s3:::your_bucket",
        "arn:aws:s3:::your_bucket/*"
      ]
    },
    {
      "Sid": "VisualEditor2",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "<KMS_KEY_ARN>"
      ]
    }
  ]
}

Sustituya your_bucket por el nombre del bucket de S3 al que desea acceder con Amazon Redshift Spectrum. Sustituya KMS_KEY_ARN por el ARN de la clave de KMS que cifra su bucket de S3.

Nota: Si los archivos de su bucket de S3 están cifrados, asegúrese de conceder los permisos adecuados a Amazon Redshift.

4.    Elija Revisar la política.

5.    Introduzca un Nombre para la política y, a continuación, elija Crear política.

6.    En el panel de navegación, elija Roles y, a continuación, Crear rol.

7.    En Select type of trusted entity, elija Otra cuenta de AWS.

8.    En ID de cuenta, indique el ID de la cuenta que utiliza Amazon Redshift. Para obtener más información, consulte Vea su ID de Cuenta de AWS.

9.    Seleccione Siguiente: Permisos.

10.    En la lista de políticas, seleccione la casilla junto al nombre de la política que creó.

11.    Seleccione Siguiente: Etiquetas y, a continuación, Siguiente: Revisar. No es necesario añadir etiquetas.

12.    Introduzca un Nombre de rol y, a continuación, seleccione Crear rol. En los siguientes ejemplos, nos referiremos a él como glue_s3_role2.

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

14.    Seleccione el nombre del rol que creó y, a continuación, elija la pestaña Relaciones de confianza.

15.    Seleccione Editar la relación de confianza.

16.    Elimine la política existente y, a continuación, sustitúyala por una política similar a la siguiente. Sustituya redshift_account1 por el ID de la cuenta que utiliza Amazon Redshift. Sustituya redshift_role1 por el nombre del primer rol que creó.

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

17.    Seleccione Actualizar la política de confianza.

Cuenta 1: Edición de los permisos para el rol creado en Amazon Redshift

1.    Abra la consola de IAM.

2.    Elija Roles en el panel de navegación y, a continuación, el nombre del primer rol (redshift_role1), que creó anteriormente.

3.    En la sección Permisos, seleccione Añadir política insertada.

4.    Elija la pestaña JSON. Elimine la política existente y, a continuación, introduzca una política de IAM similar a la siguiente. Sustituya glue_s3_account2 por el ID de la cuenta que utiliza AWS Glue y Amazon S3. Sustituya glue_s3_role2 por el nombre del segundo rol que creó:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1487639602000",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::glue_s3_account2:role/glue_s3_role2"
    }
  ]
}<br>

5.    Elija Revisar la política.

6.    Introduzca un nombre para la política y, a continuación, seleccione Crear política.

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

8.    Cree un esquema externo con los roles que creó en ambas cuentas, como se muestra en el siguiente ejemplo:

create external schema spectrum_schema
from data catalog
database 'your_db'
iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

Sustituya estos valores:
your_db: el nombre de su base de datos en AWS Glue.
redshift_account1: el ID de la cuenta de Amazon Redshift.
redshift_role1: el nombre del rol que creó en la cuenta de Amazon Redshift.
glue_s3_account2: el ID de la cuenta de AWS Glue y Amazon S3.
glue_s3_role2: el nombre del rol que creó en la cuenta de AWS Glue y Amazon S3.

Ahora puede consultar las tablas de AWS Glue en glue_s3_account2 con Amazon Redshift Spectrum desde su clúster de Amazon Redshift en redshift_account1, siempre que todos los recursos se encuentren en la misma región. No necesita volver a crear sus tablas externas porque Redshift Spectrum podrá acceder a sus tablas de AWS Glue.

En el siguiente ejemplo, la consulta devuelve el número de filas de una tabla de AWS Glue creada en el esquema externo:

select count(*) from spectrum_schema.glue_table;

Nota: Sustituya spectrum_schema y glue_table por el nombre de su esquema y de la tabla de AWS Glue.

Información relacionada

Encadenamiento de roles de IAM en Amazon Redshift

Políticas de IAM para Amazon Redshift Spectrum

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años