Autorización a Amazon Redshift para obtener acceso a otros servicios de AWS en su nombre - Amazon Redshift

Autorización a Amazon Redshift para obtener acceso a otros servicios de AWS en su nombre

Algunas características de Amazon Redshift requieren que este servicio acceda a otros servicios de AWS en su nombre. Por ejemplo, los comandos COPY y UNLOAD pueden cargar o descargar datos en el clúster de Amazon Redshift mediante un bucket de Amazon S3. El comando CREATE EXTERNAL FUNCTION puede invocar una función de AWS Lambda mediante una función escalar de Lambda definida por el usuario (UDF). Amazon Redshift Spectrum puede usar un catálogo de datos en Amazon Athena oAWS Glue. Para que los clústeres de Amazon Redshift actúen en su nombre, debe proporcionarles credenciales de seguridad. El método preferido para proporcionar credenciales de seguridad consiste en especificar un rol de AWS Identity and Access Management (IAM). Para COPY y UNLOAD, puede proporcionar credenciales temporales.

Los usuarios necesitan acceso programático si desean interactuar con AWS fuera de la AWS Management Console. La forma de conceder el acceso programático depende del tipo de usuario que acceda a AWS.

Para conceder acceso programático a los usuarios, seleccione una de las siguientes opciones.

¿Qué usuario necesita acceso programático? Para Mediante

Identidad del personal

(Usuarios administrados en el IAM Identity Center)

Utilice credenciales temporales para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK y las API de AWS.

Siga las instrucciones de la interfaz que desea utilizar:

IAM Utilice credenciales temporales para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK y las API de AWS. Siguiendo las instrucciones de Uso de credenciales temporales con recursos de AWS de la Guía del usuario de IAM.
IAM

(No recomendado)

Utilizar credenciales a largo plazo para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK o las API de AWS.

Siga las instrucciones de la interfaz que desea utilizar:

A continuación, se explica cómo crear un rol de IAM con los permisos adecuados para tener acceso a otros servicios de AWS. También necesitará asociar el rol al clúster y especificar el nombre de recurso de Amazon (ARN) del rol cuando ejecute el comando de Amazon Redshift. Para obtener más información, consulte Autorización de las operaciones COPY, UNLOAD, CREATE EXTERNAL FUNCTION y CREATE EXTERNAL SCHEMA mediante roles de IAM.

Además, un superusuario puede conceder el privilegio ASSUMEROLE a usuarios y grupos específicos para proporcionar acceso a un rol para las operaciones COPY y UNLOAD. Para obtener más información, consulte GRANT en la Guía para desarrolladores de base de datos de Amazon Redshift.

Creación de un rol de IAM que permita al clúster de Amazon Redshift obtener acceso a los servicios de AWS

Para crear un rol de IAM que permita al clúster de Amazon Redshift comunicarse con otros servicios de AWS en su nombre, siga estos pasos. Los valores utilizados en esta sección son ejemplos; puede elegir valores en función de sus necesidades.

Para crear un rol de IAM que permita a Amazon Redshift el acceso a los servicios de AWS
  1. Abra la consola de IAM.

  2. Seleccione Roles en el panel de navegación.

  3. Elija Crear rol.

  4. Elija AWS service (Servicio de AWS) y, a continuación, elija Redshift.

  5. En Select your use case (Seleccione su caso de uso), elija Redshift - Customizable (Redshift - Personalizable) y Next: Permissions (Siguiente: permisos). Aparece la página Attach permissions policy (Adjuntar política de permisos).

  6. Para obtener acceso a Amazon S3 mediante COPY, por ejemplo, puede usar AmazonS3ReadOnlyAccess y agregarlo. Para acceder a Amazon S3 mediante COPY o UNLOAD, le sugerimos que cree políticas administradas que restrinjan el acceso al bucket y al prefijo deseados según corresponda. Para las operaciones de lectura y escritura, recomendamos aplicar los privilegios mínimos y restringirlas únicamente a los buckets y los prefijos de clave de Amazon S3 que Amazon Redshift requiere.

    Para poder obtener acceso para invocar las funciones de Lambda del comando CREATE EXTERNAL FUNCTION, agregue AWSLambdaRole.

    En Redshift Spectrum, además del acceso a Amazon S3, agregue AWSGlueConsoleFullAccess o AmazonAthenaFullAccess.

    Elija Siguiente: etiquetas.

  7. Aparece la página Add tags (Agregar etiquetas). Si lo desea, puede agregar etiquetas. Elija Siguiente: Revisar.

  8. En Role Name (Nombre de la función), escriba un nombre para la función; por ejemplo, RedshiftCopyUnload. Elija Crear rol.

  9. El nuevo rol está disponible para todos los usuarios en clústeres que utilizan el rol. Para restringir el acceso solo para usuarios específicos o para clústeres en regiones específicas, edite la relación de confianza del rol. Para obtener más información, consulte Restricción de acceso a los roles de IAM.

  10. Asocie el rol al clúster. Puede asociar un rol de IAM a un clúster cuando crea el clúster o agrega el rol a un clúster existente. Para obtener más información, consulte Asociación de roles de IAM a los clústeres.

    nota

    Para restringir el acceso a datos específicos, utilice un rol de IAM que otorgue los privilegios mínimos necesarios.

Restricción de acceso a los roles de IAM

De manera predeterminada, los roles de IAM que están disponibles en un clúster de Amazon Redshift están disponibles para todos los usuarios de ese clúster. Tiene la opción de restringir los roles de IAM para usuarios específicos de la base de datos de Amazon Redshift en clústeres o regiones específicos.

Para permitir la utilización de un rol de IAM solo a usuarios específicos de la base de datos, siga estos pasos.

Para identificar a los usuarios específicos de la base de datos con acceso a un rol de IAM
  1. Identifique el nombre de recurso de Amazon (ARN) de los usuarios de la base de datos en el clúster de Amazon Redshift. El ARN de un usuario de la base de datos está en el formato: arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name.

    Para Amazon Redshift sin servidor utilice el siguiente formato de ARN. arn:aws:redshift:region:account-id:dbuser:workgroup-name/user-name

  2. Abra la consola de IAM.

  3. Seleccione Roles en el panel de navegación.

  4. Elija el rol de IAM que desea restringir para usuarios específicos de la base de datos de Amazon Redshift.

  5. Seleccione la pestaña Trust Relationships (Relaciones de confianza) y Edit Trust Relationship (Editar relación de confianza). Un rol de IAM nuevo que permita a Amazon Redshift obtener acceso a otros servicios de AWS en su nombre tiene la siguiente relación de confianza:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. Agregue una condición a la sección de acción sts:AssumeRole de la relación de confianza que limita el campo sts:ExternalId a los valores que usted especifique. Incluya un ARN para cada usuario de la base de datos al que desea concederle acceso al rol. El ID externo puede ser cualquier cadena única.

    Por ejemplo, la siguiente relación de confianza especifica que solo los usuarios de la base de datos user1 y user2 en el clúster my-cluster en la región us-west-2 tienen permiso para utilizar este rol de IAM.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1", "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2" ] } } }] }
  7. Elija Actualizar política de confianza.

Restricción de un rol de IAM a una región de AWS

Puede restringir un rol de IAM para que sea accesible solo en una determinada región de AWS. De manera predeterminada, los roles de IAM para Amazon Redshift no se restringen a ninguna región en particular.

Para restringir la utilización de un rol de IAM por región, siga estos pasos.

Para identificar las regiones permitidas para un rol de IAM
  1. Abra la consola de IAM en https://console.aws.amazon.com/.

  2. Seleccione Roles en el panel de navegación.

  3. Seleccione el rol que desea modificar con regiones específicas.

  4. Seleccione la pestaña Trust Relationships (Relaciones de confianza) y Edit Trust Relationship (Editar relación de confianza). Un rol de IAM nuevo que permita a Amazon Redshift obtener acceso a otros servicios de AWS en su nombre tiene la siguiente relación de confianza:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. Modifique la lista Service para el Principal con la lista de las regiones específicas a las que desea permitir la utilización del rol. Cada región de la lista Service debe indicarse con el formato siguiente: redshift.region.amazonaws.com.

    Por ejemplo, la siguiente relación de confianza editada permite la utilización del rol de IAM solo en las regiones us-east-1 y us-west-2.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.us-east-1.amazonaws.com", "redshift.us-west-2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. Seleccione Update Trust Policy (Actualizar política de confianza)

Encadenamiento de roles de IAM en Amazon Redshift

Cuando adjunta un rol a su clúster, este puede asumir ese rol y, de esa manera, obtener acceso a Amazon S3, Amazon Athena, AWS Glue y AWS Lambda en su nombre. Si un rol que está asociado al clúster no tiene acceso a los recursos necesarios, puede encadenar otro rol, que posiblemente pertenezca a otra cuenta. El clúster asumirá de forma temporal el rol encadenado para obtener acceso a los datos. También puede conceder acceso entre cuentas mediante el encadenamiento de roles. Cada uno de los roles de la cadena asume el rol siguiente, hasta que el clúster asume el rol situado al final de la cadena. El número máximo de roles de IAM que puede asociar está sujeto a una cuota. Para obtener más información, consulte la cuota "Roles de IAM del clúster que permiten a Amazon Redshift acceder a otros servicios de AWS" en Cuotas para objetos de Amazon Redshift.

Por ejemplo, imagine que la empresa A desea obtener acceso a los datos de un bucket de Amazon S3 que pertenece a la empresa B. La empresa A crea una función del servicio de AWS para Amazon Redshift denominada RoleA y la adjunta a su clúster. La empresa B crea un rol denominado RoleB que está autorizado para obtener acceso a los datos del bucket de la empresa B. Para obtener acceso a los datos del bucket de la empresa B, la empresa A ejecuta un comando COPY utilizando un parámetro iam_role que encadena RoleA y RoleB. Durante la operación COPY, RoleA asume de forma temporal RoleB para obtener acceso al bucket de Amazon S3.

Para encadenar roles, debe establecer una relación de confianza entre ellos. Un rol que asume otro rol (por ejemplo, RoleA) debe tener una política de permisos que le permita asumir el rol encadenado siguiente (por ejemplo, RoleB). A su vez, el rol que transfiere los permisos (RoleB) debe tener una política de confianza que le permita transferir sus permisos al rol encadenado anterior (RoleA). Para obtener más información, consulte Uso de roles de IAM en la Guía del usuario de IAM.

El primer rol de la cadena debe ser un rol asociado al clúster. El primer rol y cada uno de los roles posteriores que asuma el rol siguiente en la cadena deben tener una política que incluya una instrucción específica. Esta instrucción tiene el efecto Allow en la acción sts:AssumeRole y el nombre de recurso de Amazon (ARN) del rol siguiente en un elemento Resource. En nuestro ejemplo, RoleA tiene la siguiente política de permisos que le permite asumir RoleB, que pertenece a la cuenta de AWS 210987654321.

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

Un rol que se transfiere a otro rol debe establecer una relación de confianza con el rol que lo asume o con la cuenta de AWS a la que pertenece el rol. En nuestro ejemplo, RoleB tiene la siguiente política de confianza para establecer una relación de confianza con RoleA.

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

La siguiente política de confianza establece una relación de confianza con el propietario de RoleA, la cuenta de AWS 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
nota

Para restringir la autorización de encadenamiento de roles a usuarios específicos, defina una condición. Para obtener más información, consulte Restricción de acceso a los roles de IAM.

Los comandos UNLOAD, COPY, CREATE EXTERNAL FUNCTION o CREATE EXTERNAL SCHEMA permiten encadenar roles al incluir una lista de ARN de rol separada por comas en el parámetro iam_role. A continuación se muestra la sintaxis para encadenar roles en el parámetro iam_role.

unload ('select * from venue limit 10') to 's3://acmedata/redshift/venue_pipe_' IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
nota

La cadena de roles debe estar encerrada entre comillas simples y no puede contener espacios.

En los siguientes ejemplos, RoleA está adjuntado al clúster que pertenece a la cuenta de AWS 123456789012. RoleB, que pertenece a la cuenta 210987654321, tiene permiso para obtener acceso al bucket denominado s3://companyb/redshift/. En el siguiente ejemplo, se encadenan RoleA y RoleB para DESCARGAR datos en el bucket s3://companyb/redshift/.

unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

En el siguiente ejemplo, se utiliza un comando COPY para cargar los datos que se descargaron en el ejemplo anterior.

copy venue from 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

En el siguiente ejemplo, CREATE EXTERNAL SCHEMA utiliza roles encadenados para asumir el rol RoleB.

create external schema spectrumexample from data catalog database 'exampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

En el siguiente ejemplo, CREATE EXTERNAL FUNCTION utiliza roles encadenados para asumir el rol RoleB.

create external function lambda_example(varchar) returns varchar volatile lambda 'exampleLambdaFunction' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

También puede consultar Autorización de las operaciones COPY, UNLOAD, CREATE EXTERNAL FUNCTION y CREATE EXTERNAL SCHEMA mediante roles de IAM para obtener más información.