IBM Cloud Docs
Gestión de identidad y acceso (IAM) en IBM Cloud

Gestión de identidad y acceso (IAM) en IBM Cloud

La gestión de identidad y acceso (IAM) le permite autenticar de forma segura usuarios para los servicios de plataforma y controlar el acceso a los recursos de forma coherente en la plataforma de IBM Cloud. Por ejemplo, con un solo inicio de sesión en IBM Cloud con su IBMid, tiene acceso a cualquiera de sus consolas de servicio y sus aplicaciones sin tener que iniciar sesión en cada uno.

IAM está habilitado para todos los planes de Db2 on Cloud excepto para instancias del plan Lite.

Características de IAM de IBM Cloud

Las siguientes características de IAM están implementadas en el servicio gestionado de Db2 on Cloud con dos tipos de identidades admitidas:

IBMid

El administrador de la base de datos debe añadir los usuarios con un IBMid a cada instancia de servicio de base de datos mediante la consola o la API REST antes de que los usuarios puedan conectarse a una instancia de servicio de base de datos determinada. Al igual que para los usuarios sin IBMid, debe introducirse un ID de usuario para la instancia de servicio de base de datos al mismo tiempo que se agrega el usuario IBMid. Este ID de usuario debe ser único en la instancia de servicio de base de datos. Este ID de usuario también es el ID de autorización (AUTH) en la base de datos. El administrador de la base de datos puede otorgar y revocar permisos basados en el ID de AUTH.

ID de servicio

Un ID de servicio identifica un servicio o una aplicación de manera parecida a la manera en la que un ID de usuario identifica a un usuario. Los ID de servicio son ID que las aplicaciones pueden utilizar para autenticarse con un servicio de IBM Cloud. Un ID de servicio representa una entidad separada del IBMid. Por lo tanto, se pueden otorgar diferentes autoridades y permisos específicos al ID de servicio en la base de datos. Los ID de servicio no tienen contraseñas. Es necesario crear una clave de API para cada ID de servicio para que éste se conecte a la instancia de servicio de la base de datos. Para obtener más información sobre los ID de servicio, consulte: Introducción a los ID y claves de API de IBM Cloud IAM Service y Aumentar la seguridad de la información para Db2 en IBM Cloud.

Roles y acciones

A cada usuario que acceda al servicio Db2 on Cloud en la cuenta se le debe asignar una política de acceso con un rol de IAM. La política de acceso que asigne a los usuarios de la cuenta determina las acciones que un usuario puede realizar en el contexto del servicio o la instancia específica que seleccione. Las acciones permitidas se personalizan y definen mediante Db2 on Cloud como operaciones que se permiten realizar en el servicio. Cada acción se correlaciona con una plataforma de IAM o un rol de servicio que puede asignar a un usuario. Si un rol específico y sus acciones no se ajustan al caso práctico que desea abordar, puede crear un rol personalizado y seleccionar las acciones que desea incluir.

Para obtener información sobre las acciones exactas correlacionadas con cada rol, consulte Roles y acciones de IAM y Db2.

Requisitos previos

Conexiones de cliente e inicios de sesión de usuario

Es posible utilizar los métodos siguientes para la autenticación de IAM:

Señal de acceso

La aplicación puede obtener una señal de acceso directamente del servicio de IAM a través de la API REST utilizando una clave de API. Para obtener más información, consulte: Obtención de una señal de IBM Cloud IAM utilizando una clave de API. La señal de acceso tiene un periodo de validez predeterminado de 60 minutos antes de caducar. Si la señal ha caducado, el servidor Db2 no permitirá que se establezca la conexión. No se comprobará la caducidad de la señal hasta que se haya establecido la conexión. Como antes de la integración de IAM, la conexión permanece activa hasta que la aplicación se desconecta o hasta que finaliza la conexión por otros motivos.

curl -k -X POST \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --header "Accept: application/json" \
  --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
  --data-urlencode "apikey=<apikey>" \
  "https://iam.cloud.ibm.com/identity/token"

Una señal de acceso identifica a un usuario de IBMid o a un ID de servicio en la base de datos. El servidor de base de datos verifica la validez de la señal de acceso antes de aceptarla. Este es el mejor método si la aplicación necesita conectarse a más de una instancia de servicio de base de datos u otras instancias de servicio de IBM Cloud, ya que minimiza la comunicación con el servicio de IAM para validar las señales de acceso.

Clave de API

Es posible crear varias claves de API para cada usuario IBMid o ID de servicio. Normalmente, se crea una clave de API para cada aplicación. Permite que la aplicación se conecte a la instancia de servicio de base de datos siempre que el IBMid o el ID de servicio propietario se añada como usuario a la misma instancia de servicio de base de datos. La clave de API tiene las mismas autorizaciones y permisos dentro de la base de datos que el IBMid o el ID de servicio del propietario. Si desea que una aplicación no pueda volver a conectarse con la base de datos, puede eliminar la clave de API correspondiente. Este método de autenticación requiere menos cambios en la aplicación que utilizar una señal de acceso, ya que no requiere una interacción directa con el servicio de IAM. Para obtener más información sobre cómo crear y gestionar claves de API, consulte: Gestión de claves de API de usuario.

IBMid/contraseña

Se puede utilizar el IBMid/contraseña para iniciar sesión en la consola y también puede utilizarse en la aplicación del mismo modo que un ID de usuario/contraseña. La excepción se produce cuando el IBMid se federa porque no se puede realizar una redirección a la página de inicio de sesión de la organización. Sin embargo, el método recomendado para que una aplicación establezca una conexión con la instancia de servicio de base de datos es utilizar una señal de acceso.

Interfaces soportadas

Se ofrece soporte a las interfaces de cliente de base de datos siguientes:

ODBC, CLP y CLPPLUS

Para que una aplicación ODBC o un cliente de línea de mandatos (CLP, CLPPLUS) se conecte a un servidor de Db2 utilizando la autenticación IAM, primero es necesario configurar un nombre de origen de datos (DSN) en un archivo de configuración db2dsdriver.cfg ejecutando el mandato siguiente:

db2cli writecfg add -dsn <dsn_alias> -database <database_name> -host <host_name_or_IP_address> -port 50001 -parameter "Authentication=GSSPLUGIN;SecurityTransportMode=SSL"

El archivo de configuración db2dsdriver.cfg es un archivo XML que normalmente se encuentra en el directorio sqllib/cfg y que contiene una lista de alias de DSN y sus propiedades.

El siguiente ejemplo de archivo de configuración db2dsdriver.cfg muestra las configuraciones utilizadas para establecer una conexión con una instancia de servicio de base de datos. El archivo de configuración proporciona los alias de DSN, el nombre de la base de datos, el nombre del host (o dirección IP), el tipo de Autenticación y los valores del parámetro SecurityTransportMode:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
        <dsncollection>
        <dsn alias="<data_source_name>" name="bludb" host="<host_name_or_IP_address>" port="50001">
            <parameter name="Authentication" value="GSSPLUGIN"/>
            <parameter name="SecurityTransportMode" value="SSL"/>
        </dsn>
        </dsncollection>
        <databases>
            <database name="bludb" host="<host_name_or_IP_address>" port="50001"/>
        </databases>
</configuration>

ODBC

La serie de conexión ODBC puede contener una de las siguientes opciones:

  • Señal de acceso

    DSN=<dsn>;ACCESSTOKEN=<access_token>

  • Clave de API

    DSN=<dsn>;APIKEY=<api_key>

  • IBMid/contraseña

    DSN=<dsn>;UID=<ibmid>;PWD=<password>

En ODBC, se puede especificar AUTHENTICATION=GSSPLUGIN en el archivo de configuración db2dsdriver.cfg o en la serie de conexión de la aplicación.

CLP

El mandato CONNECT de CLP puede contener una de las siguientes opciones:

  • Señal de acceso

    Conéctese al servidor de bases de datos <database_server_name> y pase la señal de acceso ejecutando el mandato siguiente en el indicador de mandatos de CLP o script:

    CONNECT TO <database_server_name> ACCESSTOKEN <access_token_string>

  • Clave de API

    Conéctese al servidor de bases de datos <database_server_name> con una clave de la API ejecutando el mandato siguiente en el indicador de mandatos de CLP o script:

    CONNECT TO <database_server_name> APIKEY <api-key-string>

  • IBMid/contraseña

    Conéctese al servidor de bases de datos <database_server_name> con un valor /password de IBMid ejecutando el mandato siguiente en el indicador de mandatos de CLP o script:

    CONNECT TO <database_server_name> USER <IBMid> USING <password>

Para obtener más detalles sobre la conexión a un servidor de bases de datos con CLP, consulte: Sentencia CONNECT (tipo 2).

CLPPLUS

El mandato CONNECT de CLPPLUS puede contener una de las siguientes opciones:

  • Señal de acceso

    Conéctese al alias de DSN (@<data_source_name>) y pase la señal de acceso ejecutando el mandato siguiente en el indicador de mandatos o script de CLPPLUS:

    connect @<data_source_name> using(accesstoken <access_token_string>)

  • Clave de API

    Conéctese al alias de DSN (@<data_source_name>) con una clave de API ejecutando el mandato siguiente en el indicador de mandatos o script de CLPPLUS:

    connect @<data_source_name> using(apikey <api-key-string>)

  • IBMid/contraseña

    Conéctese al alias de DSN (@<data_source_name>) con un IBMid/contraseña ejecutando el mandato siguiente en el indicador de mandatos o script de CLPPLUS:

    connect <IBMid>/<password>@<data_source_name>

Para obtener más detalles sobre la conexión a alias de DSN con CLPPLUS, consulte: Alias de DSN en CLPPlus.

JDBC

El controlador JDBC de tipo 4 se admite en la autenticación de IAM.

Los ejemplos siguientes muestran fragmentos de código de conexión para los tres métodos:

  • Señal de acceso

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    dataSource.setAccessToken( "<access_token>" );
    Connection conn = dataSource.getConnection( );
    

    o

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:accessToken=<access_token>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    
  • Clave de API

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    dataSource.setApiKey( "<api_key>" );
    Connection conn = dataSource.getConnection( );
    

    o

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:apiKey=<api_key>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    
  • IBMid/contraseña

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    Connection conn = dataSource.getConnection( "<IBMid>", "<password>" );
    

    o

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:user=<IBMid>;password=<password>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    

Experiencia del usuario de consola

La página de inicio de sesión de la consola de servicio ofrece la opción de iniciar sesión con el IBMid y la contraseña. Después de pulsar el botón Iniciar sesión mediante IBMid, el usuario se dirige a la página de inicio de sesión de IAM en la que especifica la contraseña. Cuando se haya completado la autenticación, el usuario se redirigirá de nuevo a la consola. Para que el inicio de sesión se realice correctamente, el administrador de la base de datos debe añadir al usuario IBMid a cada instancia de servicio de base de datos mediante la consola o la API REST. Al igual que para los usuarios sin IBMid, debe introducirse un ID de usuario para la instancia de servicio de base de datos al mismo tiempo que se agrega el usuario IBMid. El ID de usuario debe ser exclusivo en la instancia de servicio de base de datos. Este ID de usuario también es el ID de autorización (AUTH) en la base de datos.

Para añadir un usuario con un IBMid o un ID de servicio mediante la consola web, realice los pasos siguientes:

  1. Inicie la sesión como usuario con privilegios de administrador.

  2. En el menú desplegable de la derecha, seleccione Gestionar usuarios.

    Vista de la página del panel de control de la consola web y menú desplegable
    Figura 1. Selección de la página Gestión de usuarios en el menú desplegable

  3. Con el separador Usuarios seleccionado, pulse Añadir.

    Vista de la página Gestionar usuarios de la consola web
    Figura 2. Pulsando Añadir para crear un usuario

  4. Seleccione Añadir usuario IBMid.

    Vista de la página Añadir usuario de IBMid de la consola web
    Figura 3. Creación de un usuario IBMid

  5. Especifique un ID de usuario y un IBMid en los campos que se proporcionan. Pulse Crear.

    El campo IBMid se puede utilizar para especificar un IBMid o un ID de servicio para el usuario.

Experiencia de API REST

La API REST de Db2 on Cloud se ha mejorado para admitir también una señal de acceso de IAM para las funciones que han aceptado previamente una señal de acceso generada por servicio de base de datos.

  • Para añadir un nuevo usuario de IBMid, ejecute la siguiente llamada de API de ejemplo:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid>","ibmid":"<userid>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    

    El valor de ID de usuario para "id" no puede coincidir con el ID de correo electrónico completo. Puede coincidir con la primera parte del ID de correo electrónico, pero no es necesario. Los dos identificadores distintos no están enlazados de ninguna manera. Por ejemplo, si "ibmid" es abc@us.ibm.com, podría especificar abc como el ID, o podría especificar def por ejemplo, pero no puede especificar abc@us.ibm.com.

  • Para migrar un usuario de la base de datos que no sea IBMid (por ejemplo, abcuser) y transformarlo en un usuario IBMid, suprima primero el ID de usuario que no sea IBMid ejecutando la siguiente llamada API de ejemplo:

    curl --tlsv1.2 -X DELETE "https://<IPaddress>/dbapi/v3/users/abcuser" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json"
    

    A continuación, vuelva a añadir el usuario con un IBMid que sea el mismo que el ID de usuario anterior (abcuser) ejecutando la siguiente llamada de API de ejemplo:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"abcuser","ibmid":"abcuser@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    

    Puesto que el ID de usuario (abcuser) sigue siendo el mismo para el nuevo IBMid para ese usuario, los permisos de base de datos otorgados al usuario permanecerán sin modificaciones. Si es necesario migrar una lista de usuarios de base de datos que no sean IBMid para convertirlos en usuarios IBMid, debe ejecutar las dos llamadas de API anteriores para cada usuario.

  • Para añadir muchos usuarios IBMid nuevos de una vez, cree un archivo de proceso por lotes que liste las siguientes llamadas de API de ejemplo, una para cada usuario:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid1>","ibmid":"<userid1>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid2>","ibmid":"<userid2>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    .
    .
    .
    

Para obtener más detalles sobre la API del servicio, consulte: API REST de Db2 on Cloud.

Federación de IBMid

Para utilizar su propio proveedor de identidad como, por ejemplo, LDAP, primero debe federar el servidor LDAP con IBMid. Para obtener instrucciones sobre cómo federar el servidor LDAP con IBMid, consulte: Guía de adopción de IBMid Enterprise Federation. Una vez que se haya completado la federación de IBMid y que el administrador de base de datos haya añadido los usuarios con permiso a la instancia de servicio de la base de datos, los usuarios podrán iniciar sesión en la consola con el ID de usuario y la contraseña de su empresa. Como alternativa, estos usuarios pueden utilizar una señal de acceso o clave de API que represente su ID de usuario para conectarse a la instancia de servicio de base de datos a través de una de las interfaces de cliente de base de datos admitidas.

Restricciones

Las restricciones siguientes se refieren a la autenticación de IAM:

  • La autenticación de IAM para un cliente Db2 que se está conectando a un servidor Db2 solo se admite a través de una conexión SSL.
  • La federación de IBMid está soportada para permitir que el servidor o el portal de gestión de usuarios personalizado se utilicen en la autenticación. Este tipo de soporte no incluye ninguna federación de grupo. Actualmente, el soporte de AppID no se proporciona, aunque este soporte se añadirá en el futuro.
  • La autenticación de IAM para la federación de base de datos no está soportada.
  • La ejecución de mandatos de extensiones definidas por el usuario (UDX) e IDA mediante CLPPlus no está soportada.
  • El controlador JDBC de tipo 2 no está soportado.