Autorización del acceso a la API de datos de Amazon Redshift - Amazon Redshift

Autorización del acceso a la API de datos de Amazon Redshift

Para poder obtener acceso a la API de datos, el usuario debe contar con la autorización respectiva. Puede autorizar a un usuario a obtener acceso a la API de datos si agrega la política administrada, que es una política de AWS Identity and Access Management (IAM) predefinida, a ese usuario. Como práctica recomendada, aconsejamos asociar las políticas de permisos a un rol de IAM y luego asignarlo a los usuarios y grupos según sea necesario. Para obtener más información, consulte Administración de identidades y accesos en Amazon Redshift. Para ver los permisos permitidos y denegados por las políticas administradas, consulte la consola de IAM (https://console.aws.amazon.com/iam/).

Amazon Redshift proporciona la política administrada AmazonRedshiftDataFullAccess. Esta política proporciona acceso pleno a las operaciones de la API de datos de Amazon Redshift. Esta política también permite el acceso limitado a operaciones específicas de la API de Amazon Redshift, AWS Secrets Manager e IAM que se necesitan para autenticar y obtener acceso a un clúster de Amazon Redshift o a un grupo de trabajo de Redshift sin servidor.

También puede crear una política de IAM propia que permita obtener acceso a recursos específicos. Para crear su política, utilice la política AmazonRedshiftDataFullAccess como la plantilla de partida. Una vez creada la política, agréguela a todos los usuarios que deban acceder a la API de datos.

Tenga en cuenta los siguientes requisitos de la política de IAM asociada al usuario:

  • Si se utiliza AWS Secrets Manager para la autenticación, confirmar la política permite que se use la acción secretsmanager:GetSecretValue para recuperar el secreto etiquetado con la clave RedshiftDataFullAccess.

  • Si se utilizan credenciales temporales para autenticar un clúster, confirmar la política permite el uso de la acción redshift:GetClusterCredentials en el nombre de usuario de base de datos redshift_data_api_user correspondiente a cualquiera de las bases de datos del clúster. Es necesario que este nombre de usuario ya se haya creado en su base de datos.

  • Si utiliza credenciales temporales para autenticarse en un grupo de trabajo sin servidor, confirme que la política permite el uso de la acción redshift-serverless:GetCredentials para recuperar el grupo de trabajo etiquetado con la clave RedshiftDataFullAccess. El usuario de la base de datos se asigna 1:1 a la identidad de AWS Identity and Access Management (IAM) de origen. Por ejemplo, el usuario sample_user se asigna al usuario IAM:sample_user de la base de datos y el rol de IAM sample_role se asigna a IAMR:sample_role. Para obtener más información acerca de las identidades de IAM, consulte Identidades (usuarios, grupos de usuarios y roles) en la Guía del usuario de IAM.

Para ejecutar una consulta en un clúster que es propiedad de otra cuenta, la cuenta propietaria debe proporcionar un rol de IAM que la API de datos pueda asumir en la cuenta que llama. Por ejemplo, supongamos que la cuenta B posee un clúster al que la cuenta A necesita acceder. La cuenta B puede adjuntar la política administrada por AWS AmazonRedshiftDataFullAccess al rol de IAM de la cuenta B. A continuación, la cuenta B se fía de la cuenta A gracias a una política de confianza como la siguiente:

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

Por último, el rol de IAM de la cuenta A debe ser capaz de asumir el rol de IAM de la cuenta B.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::accountID-of-account-B:role/someRoleB" } }

En los siguientes enlaces, encontrará más información sobre AWS Identity and Access Management en la Guía del usuario de IAM.

Almacenamiento de credenciales de base de datos en AWS Secrets Manager

Al llamar a la API de datos, puede transmitir las credenciales del clúster o grupo de trabajo sin servidor con un secreto en AWS Secrets Manager. Para pasar credenciales mediante este método, especifique el nombre del secreto o el Nombre de recurso de Amazon (ARN) del secreto.

Para almacenar credenciales con Secrets Manager, se necesita contar con el permiso de la política administrada SecretManagerReadWrite. Para obtener más información sobre los permisos mínimos, consulte Creación y administración de secretos con AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

Si desea almacenar las credenciales en un secreto para un clúster de Amazon Redshift
  1. Utilice la consola de AWS Secrets Manager para crear un secreto que contenga credenciales para el clúster:

    • Cuando elija Store a new secret (Almacenar un secreto nuevo), elija Credentials for Redshift cluster (Credenciales para clúster de Redshift).

    • Almacene sus valores para User name (Nombre de usuario) que es el usuario de la base de datos, Password (Contraseña) y DB cluster (Clúster de base de datos) que es el identificador del clúster, en su secreto.

    • Etiquete el secreto con la clave RedshiftDataFullAccess. La política administrada por AWS AmazonRedshiftDataFullAccess solo permite la acción secretsmanager:GetSecretValue para los secretos etiquetados con la clave RedshiftDataFullAccess.

    Para obtener instrucciones, consulte Creación de un secreto básico en la Guía del usuario de AWS Secrets Manager.

  2. Utilice la consola de AWS Secrets Manager para ver los detalles del secreto que ha creado, o ejecute el comando de la AWS CLI aws secretsmanager describe-secret.

    Anote el nombre y el ARN del secreto. Puede utilizarlos en las llamadas a la API de datos.

Para almacenar las credenciales en un secreto para un grupo de trabajo sin servidor
  1. Utilice los comandos de la AWS CLI de AWS Secrets Manager para almacenar un secreto que contenga credenciales para el grupo de trabajo sin servidor:

    • Cree su secreto en un archivo, por ejemplo, un archivo JSON llamado mycreds.json. Proporcione los valores de User name (Nombre de usuario) (usuario de base de datos) y Password (Contraseña) en el archivo.

      { "username": "myusername", "password": "mypassword" }
    • Almacene los valores en el secreto y etiquete el secreto con la clave RedshiftDataFullAccess.

      aws secretsmanager create-secret --name MyRedshiftSecret --tags Key="RedshiftDataFullAccess",Value="serverless" --secret-string file://mycreds.json

      El ejemplo siguiente muestra la salida.

      { "ARN": "arn:aws:secretsmanager:region:accountId:secret:MyRedshiftSecret-mvLHxf", "Name": "MyRedshiftSecret", "VersionId": "a1603925-e8ea-4739-9ae9-e509eEXAMPLE" }

    Para obtener más información, consulte Creación de un secreto básico con AWS CLI en la Guía del usuario de AWS Secrets Manager.

  2. Utilice la consola de AWS Secrets Manager para ver los detalles del secreto que ha creado, o ejecute el comando de la AWS CLI aws secretsmanager describe-secret.

    Anote el nombre y el ARN del secreto. Puede utilizarlos en las llamadas a la API de datos.

Creación de un punto de enlace de la VPC de Amazon VPC (AWS PrivateLink) para la API de datos

Amazon Virtual Private Cloud (Amazon VPC) le permite lanzar recursos de AWS, como clústeres y aplicaciones de Amazon Redshift, en una nube virtual privada (VPC). AWS PrivateLink proporciona conectividad segura y privada entre las nubes virtuales privadas (VPC) y los servicios de AWS a través de la red de Amazon. Con AWS PrivateLink, puede crear puntos de enlace de la VPC que puede utilizar para conectarse a servicios a través de diferentes cuentas y VPC basadas en Amazon VPC. Para obtener más información acerca de AWS PrivateLink, consulte Servicios de punto de enlace de la VPC (AWS PrivateLink) en la guía del usuario de Amazon Virtual Private Cloud.

Puede llamar a la API de datos con los puntos de enlace de la Amazon VPC. El uso de un punto de enlace de la Amazon VPC mantiene el tráfico entre las aplicaciones de su Amazon VPC y la API de datos en la red de AWS, sin usar direcciones IP públicas. Los puntos de enlace de la Amazon VPC pueden ayudarle a cumplir los requisitos reglamentarios y de conformidad relacionados con la limitación de la conectividad a internet público. Por ejemplo, si utiliza un punto de enlace de la Amazon VPC, puede mantener el tráfico entre una aplicación que se ejecuta en una instancia Amazon EC2 y la API de datos en las VPC donde se contienen.

Después de crear el punto de enlace de la Amazon VPC, puede comenzar a usarlo sin realizar ningún cambio de código o configuración en la aplicación.

Para crear un punto de enlace de la Amazon VPC para la API de datos
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. Elija Endpoints (Puntos de enlace) y, a continuación, elija Create Endpoint (Crear punto de enlace).

  3. En la página Create Endpoint (Crear punto de enlace), en Service category (Categoría de servicio), elija AWS services(Servicios de AWS). En Service Name (Nombre del servicio), elija redshift-data (com.amazonaws.region.redshift-data).

  4. Para VPC, elija la VPC en la que crear el punto de enlace.

    Elija la VPC que contiene la aplicación que realiza llamadas a la API de datos.

  5. En Subnets (Subredes), elija la subred para cada zona de disponibilidad (AZ) utilizada por el servicio de AWS que ejecuta la aplicación.

    Para crear un punto de enlace de la VPC de Amazon VPC, especifique el rango de direcciones IP privadas con las que se puede acceder al punto de enlace. Para ello, elija la subred para cada zona de disponibilidad. Al hacerlo, se restringe el punto de enlace de la VPC al rango de direcciones IP privadas específico de cada zona de disponibilidad y también se crea un punto de enlace de la Amazon VPC en cada zona de disponibilidad.

  6. En Enable Private DNS Name (Habilitar nombre de DNS privado), seleccione Enable for this endpoint (Habilitar para este punto de enlace).

    El DNS privado resuelve el nombre de host de DNS de la API de datos estándar (https://redshift-data.region.amazonaws.com) en las direcciones IP privadas asociadas con el nombre de host de DNS específico del punto de enlace de la Amazon VPC. Como resultado, puede acceder al punto de enlace de la VPC de la API de datos utilizando los SDK de AWS CLI o la AWS sin realizar ningún cambio de código o configuración para actualizar la URL del punto de enlace de la API de datos.

  7. En Security group (Grupo de seguridad), elija los grupos de seguridad que deban asociarse al punto de enlace de la Amazon VPC.

    Elija el grupo de seguridad que permita el acceso al servicio de AWS que ejecuta la aplicación. Por ejemplo, si una instancia Amazon EC2 está ejecutando la aplicación, elija el grupo de seguridad que permita el acceso a la instancia Amazon EC2. El grupo de seguridad le permite controlar el tráfico al punto de enlace de la Amazon VPC desde los recursos de la VPC.

  8. Elija Create endpoint (Crear punto de enlace).

Una vez creado el punto de enlace, elija el vínculo en la AWS Management Console para ver los detalles del punto de enlace.

La ficha Details (Detalles) del punto de enlace muestra los nombres de host de DNS que se generaron al crear el punto de enlace de la Amazon VPC.

Puede utilizar el punto de enlace estándar (redshift-data.region.amazonaws.com) o uno de los puntos de enlace específicos de la VPC para llamar a la API de datos dentro de la Amazon VPC. El punto de enlace de la API de datos estándar se dirige automáticamente al punto de enlace de la Amazon VPC. Este enrutamiento se produce porque cuando se creó el punto de enlace de la Amazon VPC se habilitó el nombre de host de DNS privado.

Cuando utiliza un punto de enlace de la Amazon VPC en una llamada a la API de datos, todo el tráfico entre la aplicación y la API de datos permanece en las Amazon VPC donde se contienen. Puede usar un punto de enlace de la Amazon VPC para cualquier tipo de llamada a la API de datos. Para obtener más información sobre la llamada a la API de datos, consulte Consideraciones que deben tenerse en cuenta al llamar a la API de datos de Amazon Redshift.

Unión a grupos de bases de datos al conectarse a un clúster

Los grupos de bases de datos son colecciones de usuarios de bases de datos. Se pueden conceder privilegios de base de datos a los grupos. Un administrador puede configurar un rol de IAM para que estos grupos de bases de datos se tengan en cuenta cuando su código SQL se ejecute con la API de datos. Para obtener más información sobre los grupos de bases de datos, consulte Grupos en la Guía para desarrolladores de bases de datos de Amazon Redshift.

Puede configurar el rol de IAM del intermediario de la API de datos para que el usuario de base de datos especificado en la llamada se una a los grupos de bases de datos cuando la API de datos se conecte a un clúster. Esta capacidad solo se admite cuando se conecta a clústeres aprovisionados. No es compatible cuando se conecta a grupos de trabajo de Redshift sin servidor. El rol de IAM del intermediario de la API de datos también debe permitir la acción redshift:JoinGroup.

Agregue etiquetas a los roles de IAM para configurarlo. El administrador del rol de IAM del intermediario agrega etiquetas con la clave RedshiftDbGroups y un valor de clave de una lista de grupos de bases de datos. El valor es una lista de nombres de grupos de bases de datos separados por dos puntos (:) hasta una longitud total de 256 caracteres. Los grupos de bases de datos deben estar previamente definidos en la base de datos conectada. Si algún grupo especificado no se encuentra en la base de datos, se omite. Por ejemplo, para los grupos de bases de datos accounting y retail, la clave-valor es accounting:retail. El par clave-valor de etiqueta {"Key":"RedshiftDbGroups","Value":"accounting:retail"} lo utiliza la API de datos para determinar qué grupos de base de datos están asociados al usuario de base de datos proporcionado en la llamada a la API de datos.

Para agregar grupos de bases de datos como etiquetas a un rol de IAM
  1. Inicie sesión en AWS Management Console y abra la consola IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación de la consola, elija Roles (Roles) y, a continuación, elija el nombre de la entidad que desea editar.

  3. Elija la pestaña Etiquetas y, a continuación, Administrar etiquetas.

  4. Elija Agregar etiqueta y, a continuación, agregue la clave RedshiftDbGroups y un valor que sea una lista de grupos de bases de datos separados por dos puntos.

  5. Elija Guardar cambios.

    Ahora, cuando una entidad principal de IAM (con este rol de IAM asociado) llama a la API de datos, el usuario de base de datos especificado se une a los grupos de base de datos indicados en el rol de IAM.

Para obtener más información sobre cómo adjuntar una etiqueta a una entidad principal, incluidos los roles de IAM y los usuarios de IAM, consulte Etiquetado de recursos de IAM en la Guía del usuario de IAM.