Puede acceder a Hologres si asume un rol de RAM mediante el inicio de sesión único (SSO) basado en roles.
Contexto
Los usuarios empresariales de Alibaba Cloud suelen iniciar sesión en la consola con un nombre de usuario y una contraseña. Como los requisitos de seguridad son cada vez más estrictos, muchas empresas prefieren el SSO basado en roles para centralizar la autenticación. Para obtener más información, consulte Overview of SAML-based role SSO.
Escenarios
Para cumplir con normativas de seguridad más estrictas y centralizar la autenticación, las empresas suelen adoptar el SSO. Este mecanismo permite que los usuarios inicien sesión una sola vez y accedan a todas las aplicaciones de confianza. Hologres es compatible con el SSO basado en roles. Para obtener más información, consulte Overview of SAML-based role SSO. Con esta función, puede usar su cuenta empresarial para asumir un rol de RAM y acceder a una instancia de Hologres. Los permisos de acceso se controlan mediante el rol de RAM. 
-
El usuario abre un navegador y selecciona Alibaba Cloud como servicio de destino en la página de inicio de sesión del proveedor de identidades (IdP).
Por ejemplo, si el IdP de su empresa es Microsoft Active Directory Federation Services (AD FS), la URL de inicio de sesión es Página de inicio de sesión de AD FS, donde
<adfsservicename>es el nombre de su servicio de AD FS.NotaAlgunos IdP requieren que los usuarios inicien sesión antes de poder seleccionar la aplicación de SSO que representa a Alibaba Cloud.
El IdP genera una respuesta SAML y la devuelve al navegador.
El navegador redirige a la página del servicio de SSO y reenvía la respuesta SAML a dicho servicio.
-
El servicio de SSO utiliza la respuesta SAML para solicitar credenciales de seguridad temporales al Security Token Service (STS) de Alibaba Cloud. Después, genera una URL de inicio de sesión para la consola de administración de Alibaba Cloud.
NotaSi la respuesta SAML contiene atributos que se asignan a varios roles de RAM, se le pedirá al usuario que seleccione un rol para acceder a Alibaba Cloud.
El servicio de SSO devuelve la URL al navegador.
El navegador redirige a la URL e inicia sesión en la consola de administración de Alibaba Cloud con el rol de RAM especificado. Luego, el usuario accede a la instancia de Hologres al asumir este rol.
Métodos de acceso compatibles en Hologres
Hologres es compatible con los dos métodos de acceso siguientes:
-
Acceder a Hologres con una cuenta en la nube (una cuenta de Alibaba Cloud o un usuario de RAM).
Inicie sesión en la consola de administración de Alibaba Cloud con un nombre de usuario y una contraseña. Después, utilice Hologres con la cuenta actual. En este caso, la cuenta de Alibaba Cloud se convierte en miembro de una instancia de Hologres con permisos para usar el servicio.
-
Iniciar sesión en Hologres mediante el SSO basado en roles.
También puede iniciar sesión en Alibaba Cloud mediante el SSO basado en roles (Overview of SAML-based role SSO) y utilizar Hologres. En este caso, el rol de RAM se convierte en miembro de una instancia de Hologres. Los usuarios que asumen este rol de RAM tienen los mismos permisos que los miembros que usan cuentas de Alibaba Cloud. Para obtener más información sobre los roles de RAM, consulte RAM role overview.
En Hologres, un rol de RAM equivale a una cuenta de Alibaba Cloud (ya sea una cuenta raíz o un usuario de RAM). Por lo tanto, se considera un método de inicio de sesión estándar. Un superusuario debe otorgar permisos, como SELECT, INSERT o UPDATE, directamente al rol de RAM y no a la cuenta de Alibaba Cloud subyacente. De este modo, el rol de RAM puede utilizar Hologres dentro del alcance de los permisos otorgados.
SSO basado en roles (STS)
El SSO basado en roles para Hologres utiliza el Security Token Service (STS) de Alibaba Cloud. STS emite credenciales de seguridad temporales con períodos de validez y permisos personalizados a los usuarios que gestiona su sistema de identidad local. Los usuarios pueden emplear estas credenciales para conectarse directamente a Hologres y acceder a los recursos autorizados.
Los tokens de STS ofrecen las siguientes ventajas:
Reducen el riesgo de exponer su par de AccessKey. Solo necesita generar credenciales temporales para los usuarios.
Permiten un control de permisos flexible. Los tokens de STS caducan automáticamente después de un período de validez limitado, por lo que no es necesario revocar los permisos manualmente.
Siga estos pasos para crear un rol de RAM y otorgarle permisos de acceso a Hologres.
Paso 1: Crear un rol de RAM
Inicie sesión en la consola de Resource Access Management (RAM) para crear un rol de RAM. Como tipo de entidad de seguridad, elija Alibaba Cloud Account o Identity Provider.
Si necesita cambiar de identidad en la consola de administración de Alibaba Cloud para asumir el rol, cree uno con el tipo de entidad de seguridad Alibaba Cloud Account. Para obtener más información, consulte Assume a role as a RAM user and grant permissions.
Si necesita iniciar sesión en Alibaba Cloud con una cuenta de IdP local para asumir el rol, cree uno con el tipo de entidad de seguridad Identity Provider. Para obtener más información, consulte Assume a role as an IdP user and grant permissions.
Asumir un rol como usuario de RAM
Si necesita que un usuario de RAM asuma un rol de RAM al cambiar de identidad en la consola de administración de Alibaba Cloud, inicie sesión en la consola de Resource Access Management (RAM) y cree un rol de RAM. Como tipo de entidad de seguridad, seleccione Alibaba Cloud Account.
-
Cree un rol de RAM cuyo tipo de entidad de seguridad sea Alibaba Cloud Account.
Inicie sesión en la consola de Resource Access Management (RAM). En el panel de navegación izquierdo, elija Identities > Roles.
En la página Create Role, haga clic en Create Role. En Principal Type, seleccione Alibaba Cloud Account. En Principal Name, seleccione Current Account. Haga clic en OK.
En el cuadro de diálogo Create Role, introduzca un valor en Role Name y haga clic en OK para crear el rol.
-
Cree y adjunte una política de permisos.
En la página de gestión de roles de RAM, haga clic en el nombre del rol de destino para ir a su página de detalles.
-
Haga clic en la pestaña Trust Policy. Haga clic en Edit Trust Policy y reemplace la política con el siguiente script.
-
Descripción de los parámetros
Cuando configure la política, reemplace
root_account_IDen la cadenaacs:ram::root_account_ID:rootcon el ID de la cuenta que desea autorizar. Vaya a la página User Information para obtener el ID de la cuenta. -
Ejemplo de política
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::
-
Haga clic en OK para guardar la política de confianza.
-
Cree un usuario de RAM y otórguele permisos para asumir un rol.
Para asumir un rol de RAM como usuario de RAM, debe crear un usuario de RAM y otorgarle permiso para asumir roles.
Inicie sesión en la consola de Resource Access Management (RAM). En el panel de navegación izquierdo, elija .
(Opcional) Si ya tiene un usuario de RAM, omita este paso. Haga clic en Create User para crear uno o más usuarios de RAM. Para obtener más información, consulte Create a RAM user.
Haga clic en Add Permissions en la columna Actions del usuario de RAM de destino.
En la página Add Permissions, otorgue el permiso
AliyunSTSAssumeRoleAccessal usuario de RAM para permitirle llamar a la operaciónAssumeRolede la API de STS. En la sección de permisos, haga clic en la pestaña System Policy y luego busque y seleccione la política AliyunSTSAssumeRoleAccess.Haga clic en OK para finalizar la configuración.
Asumir un rol como usuario de IdP
Si necesita iniciar sesión en Alibaba Cloud con una cuenta de IdP local para asumir un rol de RAM, inicie sesión en la consola de Resource Access Management (RAM) y cree un rol de RAM. Como tipo de entidad de seguridad, seleccione Identity Provider.
-
Cree un rol de RAM cuyo tipo de entidad de seguridad sea Identity Provider.
Inicie sesión en la consola de Resource Access Management (RAM). En el panel de navegación izquierdo, elija Identities > Role.
En la página Role, haga clic en Create Role. En Principal Type, seleccione Identity Provider.
Haga clic en OK. Configure los parámetros Role Name y Note.
Seleccione un valor en IdP Type y otro en Select IdP. Revise las condiciones y haga clic en Complete. Aparecerá un mensaje que indica que se creó el rol.
-
Cree y adjunte una política de permisos.
En la página de lista de roles, haga clic en el nombre del rol de destino para ir a su página de detalles.
-
Haga clic en la pestaña Trust Policy. Haga clic en Edit Trust Policy y reemplace la política con el siguiente script.
-
Descripción de los parámetros
Cuando configure una política, debe reemplazar
RootAccountIDen el scriptacs:ram::RootAccountID:saml-provider/IDPcon la información de la cuenta que desea autorizar. Vaya a la página User Information para obtener el ID de la cuenta. -
Ejemplo de política
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "saml:recipient": "https://signin.alibabacloud.com/saml-role/sso" } }, "Effect": "Allow", "Principal": { "Federated": [ "acs:ram::
-
Haga clic en OK para guardar la política de confianza.
Paso 2: Agregar y autorizar el rol de RAM
Un rol de RAM debe tener permisos de desarrollo en una instancia de Hologres antes de poder utilizar el servicio. De forma predeterminada, un rol de RAM no puede consultar ni gestionar instancias en la consola de Hologres, por lo que la cuenta raíz primero debe otorgar los permisos obligatorios en RAM. Para obtener más información, consulte Grant permissions to a RAM user. Puede agregar el rol de RAM a una instancia de Hologres y otorgarle permisos mediante uno de los métodos siguientes.
-
Inicie sesión en la consola de Hologres para otorgar permisos.
En el panel de navegación izquierdo, vaya a la página Instances. Haga clic en la instancia a la que desea otorgar permisos. En la pestaña User Management , busque el rol de RAM y agréguelo como nuevo usuario a la instancia.
En la pestaña Database Authorization, otorgue al rol de RAM los permisos de desarrollo de instancia necesarios.
-
Otorgue permisos con comandos SQL.
Puede otorgar permisos mediante comandos SQL. Para obtener más información, consulte Permission management overview.
Cuando un usuario de RAM asume un rol de RAM, el rol no tiene permisos para acceder a la consola de Hologres de forma predeterminada. La cuenta raíz debe otorgar el permiso AliyunRAMReadOnlyAccess al usuario de RAM en la consola de RAM. De lo contrario, el rol no podrá ejecutar ninguna operación en la consola de Hologres. Para obtener más información, consulte Grant permissions to a RAM user.
Paso 3: Iniciar sesión y utilizar Hologres
Inicio de sesión en la consola y en HoloWeb
Después de otorgar los permisos, los usuarios pueden asumir el rol de RAM para iniciar sesión y utilizar Hologres.
Asuma el rol de RAM para iniciar sesión en la consola de Hologres y gestionar sus instancias de Hologres.
En la página de la consola de Hologres, haga clic en Go to HoloWeb en el panel de navegación izquierdo para abrir la página de HoloWeb. Después, podrá diseñar esquemas y desarrollar datos. Para obtener más información, consulte Connect to HoloWeb and run a query.
Inicio de sesión con clientes JDBC y psql
Hologres V2.0 y versiones posteriores permiten especificar un token de seguridad en las opciones de conexión del protocolo PostgreSQL. Así, puede acceder a Hologres como un rol de RAM desde un cliente PostgreSQL, como JDBC o psql.
Antes de conectarse, asegúrese de cumplir con los siguientes requisitos previos:
Agregó el rol de RAM a la instancia de Hologres y le otorgó permisos. Para obtener más información, consulte Step 2: Add the RAM role to a Hologres instance and grant permissions.
-
Llamó a la operación de API AssumeRole - Get temporary security credentials for assuming a role en Resource Access Management (RAM) para obtener la tripleta de tokens de STS: un AccessKey ID, un AccessKey Secret y un token de seguridad. Para obtener más información, consulte STS SDK call examples. El código siguiente muestra un ejemplo de token de STS:
"Credentials": { "SecurityToken": "CAISuwJ1q6Ft5B2yu****KiAA", "AccessKeyId": "STS.NTKaenSkmLhG4HpM5****76UV", "AccessKeySecret": "6itECZnhbG2RU6ktTSBSd6JxeLHKPWyBt****SS62", "Expiration": "2025-02-21T03:47:07Z" }
Una vez cumplidos estos requisitos previos, conéctese a Hologres de una de las siguientes maneras.
-
Conexión mediante JDBC (Java): para obtener más información, consulte Connect to Hologres by using JDBC.
-
Ejemplo 1: cargue la tripleta de tokens de STS con las propiedades de la clase PGProperty del controlador JDBC de PostgreSQL para completar la verificación de identidad.
import org.postgresql.PGProperty; import java.sql.*; import java.io.IOException; import java.util.Properties; public class JdbcLinkHologres1 { public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException { // This example shows how to store the AccessKey ID and AccessKey Secret in environment variables. You can also store them in a configuration file based on your business needs. // To prevent key leakage, do not hard-code the AccessKey ID and AccessKey Secret in your code. String accessKeyId = "ALIBABA_CLOUD_ACCESS_KEY_ID"; String accessKeySecret = "ALIBABA_CLOUD_ACCESS_KEY_SECRET"; String securityToken = "<SecurityToken>"; String url = "jdbc:postgresql://<host>:<port>/<database>"; Properties props = new Properties(); PGProperty.USER.set(props, accessKeyId); PGProperty.PASSWORD.set(props, accessKeySecret); PGProperty.OPTIONS.set(props, "sts_token=" + securityToken); Class.forName("org.postgresql.Driver"); Connection connection = DriverManager.getConnection(url, props); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM tabletest"); // Process the resultSet while (resultSet.next()) { System.out.println("Result: " + resultSet.getInt(1)); System.out.println("Result: " + resultSet.getString(2)); } } } -
Ejemplo 2: codifique el token de seguridad con formato URL, añádalo a la URL de JDBC y luego cargue el AccessKey ID y el AccessKey Secret cuando la clase del controlador establezca la conexión con Hologres para completar la verificación de identidad.
import java.net.URLEncoder; import java.sql.*; import java.io.IOException; public class JdbcLinkHologres2 { public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException { // This example shows how to store the AccessKey ID and AccessKey Secret in environment variables. You can also store them in a configuration file based on your business needs. // To prevent key leakage, do not hard-code the AccessKey ID and AccessKey Secret in your code. String accessKeyId = "ALIBABA_CLOUD_ACCESS_KEY_ID"; String accessKeySecret = "ALIBABA_CLOUD_ACCESS_KEY_SECRET"; String securityToken = "<SecurityToken>"; String url = "jdbc:postgresql://<host>:<port>/<database>"; String urlWithOptions = url + "?options=sts_token=" + URLEncoder.encode(securityToken, "UTF-8"); Class.forName("org.postgresql.Driver"); Connection connection = DriverManager.getConnection(urlWithOptions, accessKeyId, accessKeySecret); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM tabletest"); // Process the resultSet while (resultSet.next()) { System.out.println("Result: " + resultSet.getInt(1)); System.out.println("Result: " + resultSet.getString(2)); } } }
-
-
Conexión con un cliente psql: el comando siguiente aplica a sistemas Linux. Para obtener más información, consulte Connect to Hologres by using a psql client.
PGUSER=<AccessKeyId> PGPASSWORD=<AccessKeySecret> PGOPTIONS="sts_token=<SecurityToken>" psql -h <host> -p <port> -d <database>
Preguntas frecuentes
¿Qué debo hacer si recibo el error password authentication failed for user "<AccessKeyId>" al iniciar sesión como rol de RAM?
Este error indica que el AccessKey ID, el AccessKey Secret o el token de seguridad son incorrectos, o bien que el usuario no existe en la instancia de Hologres. Compruebe lo siguiente:
Compruebe si el usuario existe en la instancia. Si no existe, agregue el rol de RAM a la instancia. Para obtener más información, consulte Step 2: Add the RAM role to a Hologres instance and grant permissions.
Compruebe si el token de seguridad se pasó correctamente. Si lo pasa en la URL, debe codificarlo con
URLEncoder.encode.Compruebe si el AccessKey ID, el AccessKey Secret y el token de seguridad son correctos.