IBM Cloud Docs
IAM (Identity and access management) sur IBM Cloud

IAM (Identity and access management) sur IBM Cloud

Le système de gestion des identités et des accès IAM vous permet de d'authentifier les utilisateurs en toute sécurité pour les services de plateforme et de contrôler l'accès aux ressources de manière cohérente dans l'ensemble de la plateforme IBM Cloud. Par exemple, avec une connexion unique à IBM Cloud à l'aide de votre IBMid, vous avez accès à toutes vos consoles de maintenance et leurs applications sans qu'il soit nécessaire de vous connecter à chacune d'elles.

IAM est activé pour tous les plans Db2 on Cloud, sauf pour les instances du plan Lite.

Fonctions IAM IBM Cloud

Les fonctions IAM suivantes sont implémentées pour le service géré Db2 on Cloud avec deux types d'identités prises en charge :

IBMid

Les utilisateurs possédant un IBMid doivent être ajoutés à chaque instance de service de base de données par l'administrateur de base de données via la console ou l'API REST avant que les utilisateurs puissent se connecter à l'instance de service de base de données particulière. Comme pour tout utilisateur ne disposant pas d'un IBMid, il est nécessaire de saisir un ID utilisateur pour l'instance de service de base de données lors de l'ajout de l'utilisateur doté d'un IBMid. Cet ID utilisateur doit être unique dans l'instance de service de base de données. Il s'agit également de l'ID d'autorisation (AUTH) au sein de la base de données. L'administrateur de base de données peut accorder et révoquer des droits en fonction de l'ID AUTH.

ID de service

Un ID de service identifie un service ou une application de la même façon qu'un ID utilisateur identifie un utilisateur. Les ID de service sont des identifiants qui peuvent être utilisés par les applications pour s'authentifier auprès d'un service IBM Cloud. Un ID de service représente une entité distincte de l'IBMid. Par conséquent, différents droits et permissions peuvent être accordés de manière spécifique à l'ID de service au sein de la base de données. Les ID de service n'ont pas de mot de passe. Une clé d'interface de programmation doit être créée pour chaque ID de service afin que ce dernier puisse se connecter à l'instance de service de base de données. Pour plus d'informations sur les ID de service, voir Présentation des ID IBM Cloud IAM Service et des clés d'API et Augmentation de la sécurité des informations pour Db2 sur IBM Cloud.

Rôles et actions

Chaque utilisateur qui accède au service Db2 on Cloud dans votre compte doit se voir attribuer une règle d'accès avec un rôle IAM. La règle d'accès que vous attribuez aux utilisateurs de votre compte détermine les actions qu'un utilisateur peut effectuer dans le contexte du service ou de l'instance spécifique que vous sélectionnez. Les actions autorisées sont personnalisées et définies par Db2 on Cloud en tant qu'opérations pouvant être réalisées sur le service. Chaque action est associée à une plateforme IAM ou à un rôle de service que vous pouvez attribuer à un utilisateur. Si un rôle spécifique et ses actions ne correspondent pas au cas d'utilisation que vous recherchez, vous pouvez créer un rôle personnalisé et sélectionner les actions à inclure.

Pour plus d'informations sur les actions exactes mappées à chaque rôle, voir Rôles et actions IAM et Db2.

Prérequis

Connexions client et connexions utilisateur

Les méthodes suivantes peuvent être utilisées pour l'authentification IAM :

Jeton d'accès

Un jeton d'accès peut être obtenu auprès du service IAM directement par l'application via l'API REST à l'aide d'une clé d'interface de programmation. Pour plus d'informations, voir Obtention d'un jeton IBM Cloud IAM à l'aide d'une clé d'API. Le jeton d'accès a une période de validité par défaut de 60 minutes avant qu'il n'expire. Si le jeton a expiré, le serveur Db2 ne permet pas l'établissement de la connexion. La date d'expiration du jeton n'est pas vérifiée une fois que la connexion est établie. Tout comme il était avant l'intégration IAM, la connexion reste connectée jusqu'à ce que l'application se déconnecte ou que la connexion soit terminée pour d'autres raisons.

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"

Un jeton d'accès identifie un IBMid ou un ID de service auprès de la base de données. Le serveur de base de données vérifie la validité du jeton d'accès avant de l'accepter. C'est la meilleure méthode si l'application doit se connecter à plus d'une instance de service de base de données ou à d'autres instances de service IBM Cloud car elle minimise la communication au service IAM pour valider le jeton d'accès.

Clé d'API

Plusieurs clés d'interface de programmation peuvent être créées pour chaque utilisateur IBMid ou ID de service. Chaque clé d'API est généralement créée pour une seule application. Elle permet à l'application de se connecter à l'instance de service de base de données tant que l'IBMid propriétaire ou l'ID de service est ajouté en tant qu'utilisateur à la même instance de service de base de données. La clé d'API possède les mêmes autorisations et permissions dans la base de données que l'IBMid ou l'ID de service propriétaire. Si une application n'est plus autorisée à se connecter à la base de données, la clé d'API correspondante peut être supprimée. La méthode d'authentification nécessite moins de changements dans l'application que l'utilisation d'un jeton d'accès car aucune interaction directe n'est nécessaire avec le service IAM. Pour plus d'informations sur la création et la gestion des clés d'API, voir Gestion des clés d'API utilisateur.

IBMid/mot de passe

L'IBMid/mot de passe peut être utilisé pour la connexion à la console et peut également être utilisé au sein de l'application de la même manière qu'un ID utilisateur/mot de passe. Il existe une exception lorsque l'IBMid est fédéré car un réacheminement est impossible vers la page de connexion de votre organisation. Toutefois, la méthode recommandée pour qu'une application puisse établir une connexion à l'instance de service de base de données est l'utilisation d'un jeton d'accès.

Interfaces prises en charge

Les interfaces client de base de données suivantes sont prises en charge :

ODBC, CLP et CLPPLUS

Pour qu'une application ODBC ou un client de ligne de commande (CLP, CLPPLUS) puisse se connecter à un serveur Db2 en utilisant l'authentification IAM, un nom de source de données (DSN) doit d'abord être défini dans un fichier de configuration db2dsdriver.cfg à l'aide de la commande suivante :

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

Le fichier de configuration db2dsdriver.cfg est un fichier XML, généralement situé dans le répertoire sqllib/cfg, qui contient la liste des alias DSN et leurs propriétés.

Voici un exemple de fichier de configuration db2dsdriver.cfg indiquant les configurations qui sont utilisées pour établir une connexion à une instance de service de base de données. Le fichier de configuration fournit l'alias DSN, le nom de base de données, le nom d'hôte (ou l'adresse IP), ainsi que le type d'authentification et les valeurs de paramètre 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 chaîne de connexion ODBC peut contenir l'un des éléments suivants :

  • Jeton d'accès

    DSN=<dsn>;ACCESSTOKEN=<access_token>

  • Clé d'API

    DSN=<dsn>;APIKEY=<api_key>

  • IBMid/mot de passe

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

Pour ODBC, AUTHENTICATION=GSSPLUGIN peut être spécifié dans le fichier de configuration db2dsdriver.cfg ou bien dans la chaîne de connexion de l'application.

CLP

L'instruction CLP CONNECT peut inclure l'un des éléments suivants :

  • Jeton d'accès

    Connectez-vous au serveur de base de données <database_server_name> et transmettez le jeton d'accès en exécutant la commande suivante dans le script ou dans l'invite de commande CLP :

    CONNECT TO <database_server_name> ACCESSTOKEN <access_token_string>

  • Clé d'API

    Connectez-vous au serveur de base de données <database_server_name> avec une clé d'API en exécutant la commande suivante dans le script ou dans l'invite de commande CLP :

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

  • IBMid/mot de passe

    Connectez-vous au serveur de base de données <database_server_name> avec un IBMid/mot de passe en exécutant la commande suivante dans le script ou l'invite de commande CLP :

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

Pour plus d'informations sur la connexion à un serveur de base de données avec CLP, voir Instruction CONNECT (type 2).

CLPPLUS

L'instruction CLPPLUS CONNECT peut inclure l'un des éléments suivants :

  • Jeton d'accès

    Connectez-vous à l'alias du DSN (@<data_source_name>) et passez-lui le jeton d'accès en exécutant la commande suivante à l'invite de commande CLPPLUS ou dans le script :

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

  • Clé d'API

    Connectez-vous à l'alias du DSN (@<data_source_name>) avec une clé d'API en exécutant la commande suivante à l'invite ou dans le script de commande CLPPLUS :

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

  • IBMid/mot de passe

    Connectez-vous à l'alias du DSN (@<data_source_name>) avec un IBMid/mot de passe en exécutant la commande suivante à l'invite de commande ou dans le script CLPPLUS :

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

Pour plus de détails sur la connexion aux alias DSN avec CLPPLUS, voir Alias DSN dans CLPPlus.

JDBC

Le pilote JDBC Type 4 est pris en charge pour l'authentification IAM.

Les exemples suivants montre les fragments de connexion pour les trois méthodes :

  • Jeton d'accès

    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( );
    

    ou

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:accessToken=<access_token>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    
  • Clé d'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( );
    

    ou

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

    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>" );
    

    ou

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

Expérience utilisateur de la console

La page de connexion de la console de service a la possibilité de se connecter avec votre IBMid et votre mot de passe. Après avoir cliqué sur le bouton Se connecter avec un IBMid, l'utilisateur est dirigé vers la page de connexion IAM, sur laquelle le mot de passe est entré. Une fois l'authentification terminée, l'utilisateur est redirigé vers la console. Avant qu'une telle connexion puisse être réussie, l'utilisateur IBMid doit être ajouté à chaque instance de service de base de données par l'administrateur de base de données via la console ou l'API REST. Comme pour tout utilisateur ne disposant pas d'un IBMid, il est nécessaire de saisir un ID utilisateur pour l'instance de service de base de données lors de l'ajout de l'utilisateur doté d'un IBMid. L'ID utilisateur doit être unique dans l'instance du service de base de données. Il s'agit également de l'ID d'autorisation (AUTH) au sein de la base de données.

Pour ajouter un utilisateur avec un IBMid ou un ID de service à l'aide de la console Web, procédez comme suit :

  1. Connectez-vous en tant qu'utilisateur disposant des privilèges d'administrateur.

  2. Dans le menu déroulant de droite, sélectionnez Gérer des utilisateurs.

    Vue de la page de tableau de bord de la console Web et du menu déroulant
    Figure 1. Sélection de la page Gérer les utilisateurs à partir du menu déroulant

  3. Sur l'onglet Utilisateurs sélectionné, cliquez sur Ajouter.

    Vue de la page Gérer les utilisateurs de la console Web
    Figure 2. Bouton Ajouter pour créer un utilisateur

  4. Sélectionnez Ajouter un utilisateur IBMid.

    Vue de la page d'ajout d'utilisateur IBMid de la console Web
    Figure 3. Création d'un utilisateur IBMid

  5. Entrez un ID utilisateur et un IBMid dans les zones fournies. Cliquez sur Créer.

    La zone IBMid peut être utilisée pour indiquer un IBMid ou un ID de service pour l'utilisateur.

Expérience de l'API REST

L'API REST Db2 on Cloud a été améliorée afin d'accepter également un jeton d'accès IAM pour les fonctions qui, auparavant, acceptaient un jeton d'accès généré par un service de base de données.

  • Pour ajouter un nouvel utilisateur IBMid, exécutez l'exemple d'appel API suivant :

    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}"
    

    La valeur userid (ID utilisateur) de "id" ne peut pas correspondre à l'ID de messagerie électronique complet. Elle peut correspondre à la première partie de l'ID de messagerie électronique, mais ce n'est pas nécessaire. Les deux ID différents ne sont pas liés entre eux. Par exemple, si votre "ibmid" est abc@us.ibm.com, vous pouvez spécifier abc ou def comme ID, mais vous ne pouvez pas spécifier abc@us.ibm.com.

  • Pour migrer un utilisateur de base de données sans IBMid existant (par exemple, abcuser) et en faire un utilisateur IBMid, commencez par supprimer l'ID utilisateur non IBMid en exécutant l'exemple d'appel API suivant :

    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"
    

    Ensuite, ajoutez de nouveau l'utilisateur doté d'un IBMid identique au précédent ID utilisateur (abcuser) en exécutant l'exemple d'appel API suivant :

    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}"
    

    Comme l'ID utilisateur (abcuser) reste le même pour le nouvel IBMid de cet utilisateur, les permissions accordées à l'utilisateur pour la base de données restent les mêmes. Si une liste d'utilisateurs de base de données non IBMid existants doit être migrée afin d'en faire des utilisateurs IBMid, vous devez exécuter la précédente paire d'appels API pour chaque utilisateur.

  • Pour ajouter un grand nombre de nouveaux utilisateurs IBMid en une seule opération, créez un fichier de traitement par lots répertoriant les exemples d'appels API suivants, un pour chaque utilisateur :

    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}"
    .
    .
    .
    

Pour plus de détails sur l'API de votre service, voir API REST Db2 on Cloud.

Fédération avec l'IBMid

Pour utiliser votre propre fournisseur d'identité tel que LDAP, vous devez d'abord fédérer votre serveur LDAP avec IBMid. Pour des instructions sur la fédération de votre serveur LDAP avec IBMid, voir IBMid Enterprise Federation-Guide d'adoption. Une fois que la fédération IBMid est terminée et que les utilisateurs autorisés ont été ajoutés à l'instance du service de base de données par l'administrateur de la base de données, ces utilisateurs peuvent se connecter à la console avec le nom utilisateur de leur entreprise et le mot de passe. Ces utilisateurs peuvent aussi utiliser un jeton d'accès ou une clé d'interface de programmation qui représente leur ID utilisateur pour se connecter à l'instance de service de base de données via l'une des interfaces client de base de données prises en charge.

Restrictions

Les restrictions suivantes s'appliquent à l'authentification IAM :

  • L'authentification IAM pour un client Db2 qui se connecte à un serveur Db2 n'est prise en charge que par le biais d'une connexion SSL.
  • La fédération IBMid est prise en charge pour permettre l'utilisation d'un portail ou d'un serveur de gestion des utilisateurs personnalisé pour l'authentification. Ce type de prise en charge n'inclut aucune fédération de groupe. Actuellement, la prise en charge d'AppID n'est pas fournie, mais cette prise en charge sera ajoutée à l'avenir.
  • L'authentification IAM pour la fédération de base de données n'est pas pris en charge.
  • L'exécution de commandes IDA et d'extensions définies par l'utilisateur (UDX) via CLPPlus n'est pas prise en charge.
  • Le pilote JDBC Type 2 n'est pas pris en charge.