Saltar al contenido

¿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.

Resolución

Creación de un rol de IAM que confíe en Amazon Redshift

Para acceder a los recursos entre cuentas de AWS con Amazon Redshift Spectrum, debes crear un rol de AWS Identity and Access Management (IAM) que confíe en Amazon Redshift. A continuación, asocia el rol al clúster de Amazon Redshift.

Sigue estos pasos:

  1. Abre la consola de IAM.
  2. En el panel de navegación, selecciona Roles.
  3. Selecciona Crear rol.
  4. En Seleccionar el tipo de entidad de confianza, elige Servicio de AWS.
  5. Selecciona Redshift.
  6. En Seleccionar el caso de uso, elige Redshift - Personalizable.
  7. Elige Siguiente: Permisos, Siguiente: Etiquetas y, a continuación, Siguiente: Revisar.
    Nota: No es necesario agregar políticas ni etiquetas.
  8. Introduce un Nombre de rol y, a continuación, selecciona Crear rol. En los siguientes ejemplos, el rol es redshift_role1.
  9. Asocia 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.

Creación de un nuevo rol de IAM con acceso a AWS Glue y Amazon S3

En otra cuenta, crea un nuevo rol de IAM con acceso tanto a AWS Glue como a Amazon S3. Amazon Redshift asume el rol de acceder a los recursos de AWS Glue y S3 a través de la relación de confianza.

Sigue estos pasos:

  1. Abre la consola de IAM.

  2. Elige Políticas y, a continuación, selecciona Crear política.

  3. Selecciona la pestaña JSON y, a continuación, introduce 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>"
          ]
        }
      ]
    }

    Nota: Sustituye your_bucket por el nombre del bucket de S3 al que deseas acceder con Amazon Redshift Spectrum. Sustituye KMS_KEY_ARN por el ARN de la clave de KMS que cifra tu bucket de S3. Si los archivos de tu bucket de S3 están cifrados, concede los permisos adecuados a Amazon Redshift.

  4. Elige Revisar la política.

  5. Introduce un nombre para la política y, a continuación, selecciona Crear política.

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

  7. En Seleccionar el tipo de entidad de confianza, elige Otra cuenta de AWS.

  8. En ID de cuenta, indica el ID de la cuenta que utiliza Amazon Redshift. Para obtener más información, consulta Uso de un alias para tu ID de cuenta de AWS.

  9. Elige Siguiente: Permisos.

  10. En la lista de políticas, selecciona la casilla junto al nombre de la política que has creado.

  11. Elige Siguiente: Etiquetas y, a continuación, Siguiente: Revisar.
    Nota: No es necesario agregar etiquetas.

  12. Introduce un Nombre de rol y, a continuación, selecciona Crear rol. En los siguientes ejemplos, el rol es glue_s3_role2.

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

  14. Selecciona el nombre del rol que has creado y, a continuación, elige la pestaña Relaciones de confianza.

  15. Selecciona Editar la relación de confianza.

  16. Elimina la política existente y, a continuación, sustitúyela por una política similar al siguiente ejemplo:

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

Nota: Sustituye redshift_account1 por el ID de la cuenta que utiliza Amazon Redshift. Sustituye redshift_role1 por el nombre del primer rol que creaste.

  1. Selecciona Actualizar la política de confianza.

Actualización de los permisos para el rol de IAM de Amazon Redshift

Actualiza los permisos del primer rol de IAM que creaste. Sigue estos pasos:

  1. Abre la consola de IAM.

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

  3. En Permisos, selecciona Agregar política insertada.

  4. Elige la pestaña JSON. Elimina la política existente y, a continuación, introduce una política de IAM similar al siguiente ejemplo:

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

    Nota: Sustituye glue_s3_account2 por el ID de la cuenta que utiliza AWS Glue y Amazon S3. Sustituye glue_s3_role2 por el nombre del segundo rol que creaste.

  5. Elige Revisar la política.

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

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

  8. Crea un esquema externo que utilice los roles que creaste en ambas cuentas. Observa 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'

    Nota: Sustituye los siguientes valores:

    your_db: el nombre de tu 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 creaste en la cuenta de AWS Glue y Amazon S3.

    En la instrucción Crear DDL de esquema externo, enumera los ARN de los roles de IAM en el siguiente orden: redshift_cluster_role, destination_account_role. No incluyas espacios entre los roles.

Ahora puedes usar Amazon Redshift Spectrum desde tu clúster de Amazon Redshift en redshift_account1 para consultar las tablas de AWS Glue en glue_s3_account2. Todos los recursos deben estar en la misma región de AWS. No necesitas volver a crear tus tablas externas porque Amazon Redshift Spectrum podrá acceder a tus tablas de AWS Glue.

La siguiente 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

Autorización a Amazon Redshift para obtener acceso a los servicios de AWS en tu nombre

Políticas de IAM para Amazon Redshift Spectrum

OFICIAL DE AWSActualizada hace 10 meses