Permisos para acceder a otros recursos de AWS
Para trasladar datos entre el clúster y otro recurso de AWS, como Amazon S3, Amazon DynamoDB, Amazon EMR o Amazon EC2, el clúster debe tener permiso para acceder al recurso y realizar las acciones necesarias. Por ejemplo, para cargar datos de Amazon S3, COPY debe tener acceso LIST para el bucket y acceso GET para los objetos del bucket. Para obtener información acerca de los permisos mínimos, consulte Permisos de IAM para COPY, UNLOAD y CREATE LIBRARY.
Para obtener la autorización para acceder al recurso, el clúster debe estar autenticado. Puede seleccionar uno de los siguientes métodos de autenticación:
-
Control de acceso con base en roles: en el caso del control de acceso basado en roles, se especifica un rol de AWS Identity and Access Management (IAM) que el clúster utiliza para la autenticación y la autorización. Para salvaguardar las credenciales de AWS y la información confidencial, le recomendamos encarecidamente utilizar una autenticación basada en roles.
-
Control de acceso basado en claves: en el caso del control de acceso basado en claves, se proporcionan las credenciales de acceso de AWS (ID de clave de acceso y clave de acceso secreta) de un usuario como texto sin formato.
Control de acceso con base en roles
Con el control de acceso basado en roles, el clúster adopta de forma temporal un rol de IAM en su nombre. Luego, en función de las autorizaciones que se otorgaron al rol, su clúster puede acceder a los recursos de AWS requeridos.
La creación de un rol de IAM es similar a la concesión de permisos a un usuario, en el sentido de que se trata de una identidad de AWS con políticas de permisos que determinan lo que la identidad puede y no puede hacer en AWS. No obstante, en lugar de asociarse exclusivamente a un usuario, cualquier entidad puede asumir un rol cuando lo necesite. Además, un rol no tiene ninguna credencial (una contraseña o claves de acceso) asociada a él. En cambio, si se asocia un rol a un clúster, se crean de forma dinámica claves de acceso y se proporcionan al clúster.
Recomendamos el uso de control de acceso basado en roles porque ofrece un control más preciso y seguro del acceso a los recursos de AWS y a la información confidencial de los usuarios, además de salvaguardar las credenciales de AWS.
La autenticación basada en roles brinda los siguientes beneficios:
-
Puede utilizar las herramientas de IAM estándar de AWS para definir un rol de IAM y asociarlo a varios clústeres. Cuando se modifica una política de acceso de un rol, los cambios se aplican automáticamente a todos los clústeres que utilicen ese rol.
-
Puede definir políticas de IAM pormenorizadas que concedan permisos para que clústeres y usuarios de bases de datos específicos puedan acceder a determinadas acciones y recursos de AWS.
-
El clúster obtiene credenciales de sesión temporales en tiempo de ejecución y actualiza las credenciales según se necesite hasta que se complete la operación. En el caso de que utilice credenciales temporales basadas en claves, si estas vencen antes de completarse la operación, la operación falla.
-
El ID de clave de acceso y el ID de clave de acceso secreta no se almacenan ni se transmiten en el código SQL.
Para utilizar el control de acceso basado en roles, primero debe crear un rol de IAM mediante el tipo de función del servicio de Amazon Redshift y, luego, debe adjuntarlo al clúster. Como mínimo, el rol debe tener los permisos especificados en Permisos de IAM para COPY, UNLOAD y CREATE LIBRARY. Para conocer los pasos que se deben realizar para crear un rol de IAM y adjuntarlo a un clúster, consulte Autorización a Amazon Redshift para acceder a otros servicios de AWS en su nombre en la Guía de administración de Amazon Redshift.
Puede agregar un rol a un clúster o ver los roles asociados a un clúster mediante la consola de administración, la CLI o la API de Amazon Redshift. Para obtener más información, consulte Asociación de un rol de IAM a un clúster en la Guía de administración de Amazon Redshift.
Al crear un rol de IAM, IAM devuelve el Amazon Resource Name (ARN, Nombre de recurso de Amazon) del rol. Para especificar un rol de IAM, proporcione el ARN del rol con el parámetro IAM_ROLE o el parámetro CREDENTIALS.
Por ejemplo, suponga que se asocia el siguiente rol al clúster.
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
En el siguiente ejemplo, el comando COPY utiliza el parámetro IAM_ROLE con el ARN del ejemplo anterior para la autenticación y el acceso a Amazon S3.
copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
En el siguiente ejemplo de comando COPY se utiliza el parámetro CREDENTIALS para especificar el rol de IAM.
copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
Además, un superusuario puede conceder el privilegio ASSUMEROLE a los usuarios y los grupos de bases de datos con objeto de proporcionar acceso a un rol para las operaciones COPY. Para obtener más información, consulte GRANT.
Control de acceso basado en claves
Con el control de acceso basado en claves, se proporciona el ID de clave de acceso y la clave de acceso secreta de un usuario de IAM que está autorizado a acceder a los recursos de AWS que contienen los datos. Puede utilizar los parámetros ACCESS_KEY_ID and SECRET_ACCESS_KEY juntos o el parámetro CREDENTIALS.
nota
Recomendamos encarecidamente que use un rol de IAM para su autenticación, en lugar de brindar un ID de clave de acceso y una clave de acceso secreta como texto sin formato. Si elige el control de acceso basado en claves, nunca utilice las credenciales (raíz) de su cuenta de AWS. Siempre cree un usuario de IAM y proporcione el ID de clave de acceso y la clave de acceso secreta de ese usuario. Si desea conocer los pasos necesarios para crear un usuario de IAM, consulte Creación de un usuario de IAM en su cuenta de AWS.
Para realizar la autenticación con ACCESS_KEY_ID y SECRET_ACCESS_KEY, sustituya <access-key-id>
y <secret-access-key>
por el ID de clave de acceso de un usuario autorizado y la clave de acceso secreta completa, tal y como se muestra a continuación.
ACCESS_KEY_ID '
<access-key-id>
' SECRET_ACCESS_KEY '<secret-access-key>
';
Para realizar la autenticación con el parámetro CREDENTIALS, sustituya <access-key-id>
y <secret-access-key>
por el ID de clave de acceso de un usuario autorizado y la clave de acceso secreta completa, tal y como se muestra a continuación.
CREDENTIALS 'aws_access_key_id=
<access-key-id>
;aws_secret_access_key=<secret-access-key>
';
Como mínimo, el usuario de IAM debe tener los permisos que se indican en Permisos de IAM para COPY, UNLOAD y CREATE LIBRARY.
Credenciales de seguridad temporales
Si utiliza el control de acceso basado en claves, puede limitar más el acceso que los usuarios tienen a los datos mediante el uso de credenciales de seguridad temporales. La autenticación basada en roles utiliza de forma automática credenciales temporales.
nota
Le recomendamos encarecidamente utilizar role-based access control en lugar de crear credenciales temporales y proporcionar el ID de clave de acceso y la clave de acceso secreta como texto sin formato. El control de acceso basado en roles utiliza de forma automática credenciales temporales.
Las credenciales de seguridad temporales proporcionan más seguridad debido a su breve vigencia y al hecho de que no se pueden reutilizar cuando vencen. El ID de clave de acceso y la clave de acceso secreta generados con el token no pueden utilizarse sin el token, y un usuario que tenga estas credenciales de seguridad temporales puede acceder a los recursos solo hasta que estas venzan.
Para conceder a los usuarios acceso temporal a los recursos, debe llamar a las operaciones de API de AWS Security Token Service (AWS STS). Las operaciones de API de AWS STS devuelven credenciales de seguridad temporales compuestas por un token de seguridad, un ID de clave de acceso y una clave de acceso secreta. Emita las credenciales de seguridad temporales a los usuarios que necesiten obtener acceso temporalmente a los recursos. Estos usuarios pueden ser usuarios de IAM existentes o pueden ser usuarios que no utilizan AWS. Para obtener más información acerca de la creación de credenciales de seguridad temporales, consulte Uso de credenciales de seguridad temporales en la Guía del usuario de IAM.
Puede utilizar los parámetros ACCESS_KEY_ID and SECRET_ACCESS_KEY junto con el parámetro SESSION_TOKEN o el parámetro CREDENTIALS. También debe suministrar el ID de clave de acceso y la clave de acceso secreta que se proporcionaron con el token.
Para realizar la autenticación con ACCESS_KEY_ID, SECRET_ACCESS_KEY y SESSION_TOKEN, sustituya <temporary-access-key-id>
, <temporary-secret-access-key>
y <temporary-token>
, tal y como se muestra a continuación.
ACCESS_KEY_ID '
<temporary-access-key-id>
' SECRET_ACCESS_KEY '<temporary-secret-access-key>
' SESSION_TOKEN '<temporary-token>
';
Para autenticar con CREDENTIALS, incluya session_token=
en la cadena de credenciales, como se muestra a continuación. <temporary-token>
CREDENTIALS 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
';
En el siguiente ejemplo, se muestra un comando COPY con credenciales de seguridad temporales.
copy table-name from 's3://objectpath' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
';
En el siguiente ejemplo, se carga la tabla LISTING con credenciales temporales y cifrado de archivos.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
' master_symmetric_key '<root-key>
' encrypted;
En el siguiente ejemplo, se carga la tabla LISTING mediante el parámetro CREDENTIALS con credenciales temporales y cifrado de archivos.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' credentials 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
;master_symmetric_key=<root-key>
' encrypted;
importante
Las credenciales de seguridad temporales deben ser válidas durante toda la operación COPY o UNLOAD. Si las credenciales de seguridad temporales vencen durante la operación, el comando falla y se revierte la transacción. Por ejemplo, si las credenciales de seguridad temporales vencen después de 15 minutos y la operación COPY requiere una hora, el comando COPY falla antes de completarse. Si utiliza un acceso basado en roles, las credenciales de seguridad temporales se actualizan de forma automática hasta que se complete la operación.
Permisos de IAM para COPY, UNLOAD y CREATE LIBRARY
El rol o usuario de IAM indicado por el parámetro CREDENTIALS debe tener, como mínimo, los siguientes permisos:
-
Para utilizar COPY de Amazon S3, debe tener permiso para utilizar LIST sobre el bucket de Amazon S3 y GET sobre los objetos de Amazon S3 que se están cargando y el archivo de manifiesto, si se utiliza alguno.
-
Para utilizar COPY de Amazon S3, Amazon EMR y los alojamientos remotos (SSH) con datos en formato JSON deben tener permiso para utilizar LIST y GET con el archivo JSONPaths de Amazon S3, si se utiliza uno.
-
Para utilizar COPY de DynamoDB, debe tener permiso para utilizar SCAN y DESCRIBE en la tabla de DynamoDB que se está cargando.
-
Para utilizar COPY desde un clúster de Amazon EMR, debe tener permiso para la acción
ListInstances
en el clúster de Amazon EMR. -
Para utilizar UNLOAD en Amazon S3, debe tener permisos para usar GET, LIST y PUT sobre el bucket de Amazon S3 en que se están descargando los archivos de datos.
-
Para utilizar CREATE LIBRARY de Amazon S3, debe tener permiso para usar LIST sobre el bucket de Amazon S3 y GET sobre los objetos de Amazon S3 que se están importando.
nota
Si recibe el mensaje de error S3ServiceException: Access
Denied
cuando ejecuta un comando COPY, UNLOAD o CREATE LIBRARY, el clúster no dispone de los permisos de acceso adecuados para Amazon S3.
Puede administrar los permisos de IAM si asocia una política de IAM a un rol de IAM que esté asociado a su clúster, a un usuario o al grupo al que pertenezca su usuario. Por ejemplo, la política administrada AmazonS3ReadOnlyAccess
concede permisos para utilizar LIST y GET sobre los recursos de Amazon S3. Para obtener más información acerca de las políticas de IAM, consulte Administración de las políticas de IAM en la Guía del usuario de IAM.