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

Identity and access management (IAM) su IBM Cloud

Identity and access management (IAM) ti consente di autenticare in modo sicuro gli utenti per i servizi della piattaforma e il controllo dell'accesso alle risorse in modo coerente nella piattaforma IBM Cloud. Ad esempio, con un solo accesso a IBM Cloud con il tuo ID IBM, disponi dell'accesso a tutte le console di servizio e alle relative applicazioni senza dover accedere ad ognuna di esse separatamente.

IAM è abilitato per tutti i piani Db2 on Cloud ad eccezione delle istanze del piano Lite.

Funzioni di IBM Cloud IAM

Le seguenti funzioni IAM sono implementate per il servizio gestito da Db2 on Cloud con due tipi di identità supportate:

IBMid

Gli utenti con un ID IBM devono essere aggiunti a ogni istanza del servizio database dall'amministratore del database tramite la console o l'API REST prima che questi utenti possano collegarsi a quella particolare istanza del servizio database. Proprio come per un utente non ID IBM, un ID utente per l'istanza del servizio database deve essere immesso nello stesso momento in cui viene aggiunto l'utente ID IBM. Questo ID utente deve essere univoco all'interno dell'istanza del servizio database. Questo ID utente è anche l'ID di autorizzazione (AUTH) all'interno del database. L'amministratore del database può concedere e revocare le autorizzazioni in base all'ID AUTH.

ID servizio

Un ID servizio identifica un servizio o un'applicazione analogamente a come un ID utente identifica un utente. Gli ID servizio sono gli ID che possono essere utilizzati dalle applicazioni per l'autenticazione a un servizio IBM Cloud. Un ID servizio rappresenta un'entità separata dall'ID IBM di appartenenza. Pertanto, autorità e autorizzazioni diverse possono essere concesse in modo specifico all'ID servizio all'interno del database. Gli ID servizio non hanno password. Deve essere creata una chiave API per ogni ID servizio per l'ID da connettere all'istanza del servizio database. Per ulteriori informazioni sugli ID dei servizi, consultare: Introduzione di IBM Cloud IAM Service ID e API Keys e Aumentare la sicurezza delle informazioni per Db2 su IBM Cloud.

Ruoli e azioni

Ogni utente che accede al servizio Db2 on Cloud nel proprio account deve essere assegnata una politica di accesso con un ruolo IAM. La politica di accesso che si assegna agli utenti nel proprio account determina quali azioni un utente può eseguire all'interno del contesto del servizio o dell'istanza specifica che si seleziona. Le azioni consentite sono personalizzate e definite da Db2 on Cloud come operazioni di cui è consentita l'esecuzione sul servizio. Ogni azione è mappata su una piattaforma IAM o un ruolo di servizio che è possibile assegnare ad un utente. Se un ruolo specifico e le sue azioni non si adattano al caso di utilizzo che si sta cercando di affrontare, è possibile creare un ruolo personalizzato e scegliere le azioni da includere.

Per informazioni sulle azioni esatte mappate ad ogni ruolo, consultare IAM ruoli e azioni e Db2.

Prerequisiti

Connessioni client e accessi utente

I seguenti metodi possono essere utilizzati per l'autenticazione IAM:

Token di accesso

Puoi ottenere un token di accesso dal servizio IAM direttamente dall'applicazione tramite l'API REST utilizzando una chiave API. Per ulteriori informazioni, consultare: Introduzione di un token IBM Cloud IAM utilizzando un tasto API. Il token di accesso ha un periodo di validità predefinito di 60 minuti prima della scadenza. Se il token è scaduto, il server Db2 non consentirà di stabilire la connessione. Non viene controllata la scadenza del token dopo che la connessione è stata stabilita. Così come era prima dell'integrazione di IAM, la connessione rimane in essere fino a quando l'applicazione non si disconnette o viene terminata a causa di altre ragioni.

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 token di accesso identifica un utente ID IBM o un ID servizio al database. Il server del database verifica la validità del token di accesso prima di accettarlo. Questo è il metodo migliore se l'applicazione deve connettersi a più di un'istanza del servizio database o ad altre istanze del sevizio IBM Cloud perché minimizza la comunicazione al servizio IAM per convalidare il token di accesso.

chiave API

Possono essere create più chiavi per ogni ID servizio o utente ID IBM. Ogni chiave API viene normalmente creata per una singola applicazione. Consente all'applicazione di connettersi all'istanza del servizio database fino a quando l'ID IBM di appartenenza o l'ID servizio viene aggiunto come un utente alla stessa istanza del servizio database. La chiave API ha le stesse autorizzazioni all'interno del database come l'ID servizio o l'ID IBM di appartenenza. Se un'applicazione non deve più essere consentita per connettersi al database, la chiave API corrispondente può essere rimossa. Questo metodo di autenticazione richiede meno modifiche nell'applicazione rispetto all'utilizzo di un token di accesso poiché non richiede un'interazione diretta con il servizio IAM. Per ulteriori informazioni sulla creazione e la gestione delle chiavi API, consultare: Gestione delle chiavi API dell'utente.

ID IBM/password

Puoi utilizzare l'ID IBM e la password per accedere alla console e anche all'interno dell'applicazione negli stessi modi in cui sono consentiti l'ID utente e la password. Si verifica un'eccezione quando l'ID IBM è federato perché non è possibile eseguire un reindirizzamento alla pagina di accesso della tua organizzazione. Tuttavia, il metodo consigliato per un'applicazione di stabilire una connessione all'istanza del servizio database è quello di utilizzare un token di accesso.

Interfacce supportate

Sono supportate le seguenti interfacce client del database:

ODBC, CLP e CLPPLUS

Per consentire a un'applicazione ODBC o un client riga di comando (CLP, CLPPLUS) di connettersi a un server Db2 utilizzando l'autenticazione IAM, deve essere prima configurato un nome dell'origine dati (DSN) in un file di configurazione db2dsdriver.cfg, immettendo il seguente comando:

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

Il file di configurazione db2dsdriver.cfg è un file XML, normalmente ubicato nella directory sqllib/cfg, che contiene un elenco di alias DSN e le relative proprietà.

Il seguente esempio di un file di configurazione di db2dsdriver.cfg mostra le configurazioni utilizzate per stabilire una connessione a un'istanza del servizio database. Il file di configurazione fornisce l'alias DSN, il nome del database, il nome host (o l'indirizzo IP) e il tipo Authentication e i valori del parametro 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 stringa di connessione ODBC può contenere uno dei seguenti:

  • Token di accesso

    DSN=<dsn>;ACCESSTOKEN=<access_token>

  • chiave API

    DSN=<dsn>;APIKEY=<api_key>

  • ID IBM/password

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

Per ODBC, può essere specificato AUTHENTICATION=GSSPLUGIN nel file di configurazione db2dsdriver.cfg o nella stringa di connessione dell'applicazione.

CLP

L'istruzione CLP CONNECT può contenere uno dei seguenti:

  • Token di accesso

    Collegarsi al server di database <database_server_name> e passare il token di accesso eseguendo il seguente comando al prompt dei comandi CLP o script:

    CONNECT TO <database_server_name> ACCESSTOKEN <access_token_string>

  • chiave API

    Collegarsi al server di database <database_server_name> con un tasto API eseguendo il seguente comando al prompt dei comandi CLP o script:

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

  • ID IBM/password

    Collegarsi al server di database <database_server_name> con un IBMid/password eseguendo il seguente comando al prompt dei comandi CLP o script:

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

Per ulteriori dettagli sulla connessione a un server di database con CLP, consultare: CONNECT (tipo 2) istruzione.

CLPPLUS

L'istruzione CLPPLUS CONNECT può contenere uno dei seguenti:

  • Token di accesso

    Collegarsi all'alias DSN (@<data_source_name>) e passare il token di accesso eseguendo il seguente comando al prompt o allo script del comando CLPPLUS:

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

  • chiave API

    Collegarsi all'alias DSN (@<data_source_name>) con un tasto API eseguendo il seguente comando al prompt o script del comando CLPPLUS:

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

  • ID IBM/password

    Collegarsi all'alias DSN (@<data_source_name>) con un IBMid/password eseguendo il seguente comando al prompt o script del comando CLPPLUS:

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

Per ulteriori dettagli sulla connessione ai alias DSN con CLPPLUS, vedere: alias DSN in CLPPlus.

JDBC

Il driver JDBC di tipo 4 è supportato per l'autenticazione IAM.

I seguenti esempi mostrano i frammenti di connessione per i tre metodi:

  • Token di accesso

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

    oppure

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

    oppure

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

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

    oppure

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

Esperienza utente console

La pagina di accesso della console di servizio ha l'opzione di accedere con i tuoi ID IBM e password. Dopo aver fatto clic sul pulsante Sign In via IBMid, l'utente viene indirizzato alla pagina di accesso IAM, su cui viene immessa la password. Quando l'autenticazione è stata completata, l'utente viene reindirizzato nuovamente alla console. Prima di eseguire correttamente l'accesso, l'ID IBM deve essere aggiunto a ogni istanza del servizio database dall'amministratore del database tramite la console o l'API REST. Proprio come per un utente non ID IBM, un ID utente per l'istanza del servizio database deve essere immesso nello stesso momento in cui viene aggiunto l'utente ID IBM. L'ID utente deve essere univoco all'interno dell'istanza del servizio database. Questo ID utente è anche l'ID di autorizzazione (AUTH) all'interno del database.

Per aggiungere un utente con un ID IBM o un ID servizio utilizzando la console web, completa la seguente procedura:

  1. Accedi come utente che dispone dei privilegi di amministratore.

  2. Dal menu a discesa a destra, seleziona Manage Users.

    Visualizza la pagina della dashboard della console web e il menu a discesa
    Figura 1. Selezione della pagina Gestisci utenti dal menu a discesa

  3. Con la scheda Users selezionata, fai clic su Add.

    Vista della console web Gestisci utenti
    Figura 2. Clicca Aggiungi per creare un utente

  4. Seleziona Add IBMid user.

    Vista della console web Aggiungi IBMid pagina utente
    Figura 3. Creazione di un utente IBMid

  5. Immetti un ID utente (User ID) e un ID IBM (IBMid) nei campi forniti. Fai clic su Crea.

    Il campo IBMid può essere utilizzato per specificare un ID IBM o un ID servizio per l'utente.

Esperienza API REST

L'API REST Db2 on Cloud è stata migliorata per accettare anche un token di accesso IAM per le funzioni che in precedenza accettavano un token di accesso generato dal servizio database.

  • Per aggiungere un nuovo utente ID IBM, esegui la seguente chiamata API di esempio:

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

    Il valore userid per "id" non può corrispondere all'ID email completo. Può corrispondere alla prima parte dell'ID email, ma non è necessario. I due ID diversi non sono collegati in alcun modo. Ad esempio, se il tuo "ibmid" è abc@us.ibm.com, potresti specificare abc come ID o def ma non puoi specificare abc@us.ibm.com.

  • Per migrare un utente del database non ID IBM esistente (ad esempio, abcuser) e farne un utente ID IBM, elimina prima l'ID utente non ID IBM eseguendo la seguente chiamata API di esempio:

    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"
    

    Successivamente, riaggiungi l'utente con un ID IBM che è lo stesso dell'ID utente precedente (abcuser) eseguendo la seguente chiamata API di esempio:

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

    Poiché l'ID utente (abcuser) rimane lo stesso per il nuovo ID IBM per tale utente, le autorizzazioni database concesse per l'utente restano invariate. Se un elenco di utenti del database non ID IBM esistenti deve essere migrato per renderli utenti ID IBM, devi eseguire la coppia precedente di chiamate API per ogni utente.

  • Per aggiungere molti nuovi utenti ID IBM contemporaneamente, crea un file batch che elenca le seguenti chiamate API di esempio, una per ogni utente:

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

Per ulteriori dettagli sull'API del vostro servizio, consultare: Db2 on Cloud REST API.

Federazione ID IBM

Per utilizzare il tuo provider di identità come ad esempio LDAP, devi prima federare il tuo server LDAP con l'ID IBM. Per le istruzioni sulla federazione del server LDAP con IBMid, consultare: IBMid Enterprise Federation Adoption Guide. Dopo che la federazione dell'ID IBM è stata completata e gli utenti consentiti sono stati aggiunti all'istanza del servizio database dall'amministratore del database, questi utenti possono accedere alla console con i loro ID utente e password aziendali. In alternativa, questi utenti possono utilizzare un token di accesso o una chiave API che rappresenta il proprio ID utente per connettersi all'istanza del servizio database tramite una delle interfacce client del database supportate.

Limitazioni

Le seguenti sono le limitazioni che riguardano l'autenticazione IAM:

  • L'autenticazione IAM per un client Db2 che si collega a un server Db2 è supportata solo su una connessione SSL.
  • La federazione dell'ID IBM è supportata per consentire l'utilizzo di un portale o di un server di gestione utenti personalizzato per l'autenticazione. Tale supporto non include alcuna federazione di gruppo. Attualmente il supporto AppID non viene fornito sebbene questo supporto verrà aggiunto in futuro.
  • L'autenticazione IAM per la federazione del database non è supportata.
  • L'esecuzione dei comandi delle estensioni definite dall'utente (UDX) e IDA tramite CLPPlus non è supportata.
  • Il driver JDBC di tipo 2 non è supportato.