IBM Cloud での Identity and access management (IAM)
Identity and access management (IAM) を使用すると、プラットフォーム・サービスのユーザーをセキュアに認証でき、また IBM Cloud プラットフォーム全体で一貫してリソースへのアクセスを制御できます。 例えば、IBMid を使用した IBM Cloud への単一ログインのみで、どのサービス・コンソールおよびアプリケーションにも、それぞれ別々にログインせずにアクセスすることができます。
IBM Cloud IAM のフィーチャー
2 つのタイプのサポートされる ID を使用して、Db2 Warehouse on Cloud マネージド・サービスで以下の IAM フィーチャーが実装されています。
IBMid
IBMid を持つユーザーが特定のデータベース・サービス・インスタンスに接続する前に、データベース管理者はコンソールまたは REST API を介してそれらのユーザーを各データベース・サービス・インスタンスに追加する必要があります。 非 IBMid ユーザーの場合と同様に、データベース・サービス・インスタンスのユーザー ID は、IBMid ユーザーを追加するのと同時に入力する必要があります。 このユーザー ID は、データベース・サービス・インスタンス内で固有でなければなりません。 このユーザー ID はまた、データベース内の許可 (AUTH) ID でもあります。 データベース管理者は、その AUTH ID に基づいて許可を付与したり取り消したりすることができます。
サービス ID
ユーザー ID がユーザーを識別するのと同様の方法で、サービス ID はサービスまたはアプリケーションを識別します。 サービス ID は、アプリケーションが IBM Cloud サービスでの認証を行うために使用できる ID です。 サービス ID は、所有する IBMid とは別個のエンティティーを表します。 したがって、データベース内のサービス ID に固有で、さまざまな権限と許可を付与できます。 サービス ID にはパスワードはありません。 サービス ID がデータベース・サービス・インスタンスに接続するためには、サービス ID ごとに API キーが作成される必要があります。 サービス ID について詳しくは、IBM Cloud IAM サービス ID および API キーの概要および Db2 on IBM Cloud の情報セキュリティーの強化を参照してください。
役割とアクション
アカウント内の Db2 Warehouse on Cloud サービスにアクセスするすべてのユーザーに、IAM 役割を持つアクセス・ポリシーが割り当てられている必要があります。 アカウント内のユーザーに割り当てたアクセス・ポリシーによって、選択したサービスまたは特定のインスタンスのコンテキスト内でユーザーが実行できるアクションが決まります。 許容されるアクションは、サービス上で実行可能な操作として、Db2 Warehouse on Cloud によってカスタマイズおよび定義されます。 各アクションは、IAM プラットフォーム、またはユーザーに割り当てることのできるサービス役割にマップされます。 特定の役割とそのアクションが、対処しようとしているユース・ケースに合わない場合は、カスタム役割を作成して、組み込むアクションを選択します。
各役割にマップされる正確なアクションについては、IAM 役割とアクション および Db2 Warehouse を参照してください。
前提条件
- Db2 Client V11.1 FP3 以降。
- ポート 50001 で SSL 接続を使用する必要があります。
- Db2 クライアントを構成します。
- データベースをカタログします。 データベースへの接続: ステップ 2 を参照してください。
クライアント接続およびユーザー・ログイン
IAM 認証には、以下の方式を使用できます。
アクセス・トークン
アクセス・トークンは、API キーを使用して REST API を介し、アプリケーションにより IAM サービスから直接入手できます。 詳しくは、API キーを使用した IBM Cloud IAM トークンの取得を参照してください。 アクセス・トークンのデフォルトの有効期間は 60 分間で、それを過ぎると期限切れになります。 トークンの有効期限が切れている場合、Db2 サーバーは接続の確立を許可しません。 接続が確立された後はトークンの有効期限は検査されません。 IAM 統合の前と同様に、アプリケーションが切断するか、他の理由で接続が終了されるまで、接続状態は維持されます。
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"
アクセス・トークンは、IBMid ユーザー、またはデータベースへのサービス ID を識別します。 データベース・サーバーは、アクセス・トークンを受け入れる前に有効期間を確認します。 この方式を使用すると、アクセス・トークンを検証するための IAM サービスへの通信が最小限になるため、アプリケーションが複数のデータベース・サービス・インスタンスや他の IBM Cloud サービス・インスタンスに接続する必要がある場合は、これが最良の方式になります。
API キー
IBMid ユーザーまたはサービス ID ごとに複数の API キーを作成できます。 通常、各 API キーは、単一アプリケーションに対して作成されます。 API キーは、所有する IBMid またはサービス ID がデータベース・サービス・インスタンスにユーザーとして追加されている限り、アプリケーションが同じデータベース・サービス・インスタンスに接続することを許可します。 API キーは、所有する IBMid またはサービス ID と同じ権限および許可をデータベース内で持っています。 アプリケーションのデータベースへの接続の許可を取りやめる場合は、対応する API キーを削除できます。 この認証方式では、IAM サービスと直接対話する必要がないため、アクセス・トークンを使用するよりもアプリケーションの変更が少なくて済みます。 API キーの作成および管理について詳しくは、ユーザー API キーの管理を参照してください。
IBMid/パスワード
IBMid/パスワードはコンソールへのログインに使用できます。また、ユーザー ID/パスワードが許可されているのと同じ方法でアプリケーション内で使用することもできます。 IBMid が統合されている場合は、ユーザーの組織のログイン・ページへのリダイレクトを実行できないため、例外が発生します。 ただし、アプリケーションがデータベース・サービス・インスタンスへの接続を確立するための推奨方式は、アクセス・トークンを使用することです。
サポートされるインターフェース
以下のデータベース・クライアント・インターフェースがサポートされています。
ODBC、CLP、および CLPPLUS
ODBC アプリケーションまたはコマンド・ライン・クライアント (CLP、CLPPLUS) が IAM 認証を使用して Db2 サーバーに接続するには、まず、以下のコマンドを実行して db2dsdriver.cfg
構成ファイル内にデータ・ソース名 (DSN) が構成される必要があります。
db2cli writecfg add -dsn <dsn_alias> -database <database_name> -host <host_name_or_IP_address> -port 50001 -parameter "Authentication=GSSPLUGIN;SecurityTransportMode=SSL"
db2dsdriver.cfg
構成ファイルは、DSN 別名とそれらのプロパティーのリストを含む XML ファイルで、通常、sqllib/cfg
ディレクトリーにあります。
以下の db2dsdriver.cfg
構成ファイルの例は、データベース・サービス・インスタンスへの接続を確立するために使用される構成を示しています。 この構成ファイルは、DSN 別名、データベース名、ホスト名 (または IP アドレス)、および認証タイプと 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
ODBC 接続ストリングには、次のいずれかを含めることができます。
-
アクセス・トークン
DSN=<dsn>;ACCESSTOKEN=<access_token>
-
API キー
DSN=<dsn>;APIKEY=<api_key>
-
IBMid/パスワード
DSN=<dsn>;UID=<ibmid>;PWD=<password>
ODBC の場合、** 構成ファイルまたはアプリケーションの接続ストリングのいずれかに **AUTHENTICATION=GSSPLUGINdb2dsdriver.cfg
を指定できます。
CLP
CLP CONNECT ステートメントには、次のいずれかを含めることができます。
-
アクセス・トークン
CLP コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、データベース・サーバー
<database_server_name>
に接続し、アクセス・トークンを渡します。CONNECT TO <database_server_name> ACCESSTOKEN <access_token_string>
-
API キー
CLP コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、API キーを使用してデータベース・サーバー
<database_server_name>
に接続します。CONNECT TO <database_server_name> APIKEY <api-key-string>
-
IBMid/パスワード
CLP コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、IBMid/パスワードを使用してデータベース・サーバー
<database_server_name>
に接続します。CONNECT TO <database_server_name> USER <IBMid> USING <password>
CLP を使用したデータベース・サーバーへの接続について詳しくは、CONNECT (タイプ 2) ステートメントを参照してください。
CLPPLUS
CLPPLUS CONNECT ステートメントには、次のいずれかを含めることができます。
-
アクセス・トークン
CLPPLUS コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、DSN 別名 (
@<data_source_name>
) に接続し、アクセス・トークンを渡します。connect @<data_source_name> using(accesstoken <access_token_string>)
-
API キー
CLPPLUS コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、API キーを使用して DSN 別名 (
@<data_source_name>
) に接続します。connect @<data_source_name> using(apikey <api-key-string>)
-
IBMid/パスワード
CLPPLUS コマンド・プロンプトまたはスクリプトで以下のコマンドを実行して、IBMid/パスワードを使用して DSN 別名 (
@<data_source_name>
) に接続します。connect <IBMid>/<password>@<data_source_name>
CLPPLUS を使用した DSN 別名への接続について詳しくは、CLPPlus での DSN 別名を参照してください。
JDBC
IAM 認証では、タイプ 4 JDBC ドライバーがサポートされています。
以下の例は、3 つの方式の接続スニペットを示しています。
-
アクセス・トークン
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( );
または
Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:accessToken=<access_token>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
-
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( );
または
Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:apiKey=<api_key>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
-
IBMid/パスワード
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>" );
または
Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:user=<IBMid>;password=<password>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
コンソール・ユーザー・エクスペリエンス
サービス・コンソールのログイン・ページには、IBMid とパスワードを使用してログインするオプションがあります。 **「IBMid でサインイン (Sign In via IBMid)」**ボタンをクリックすると、ユーザーは IAM ログイン・ページに誘導され、そこでパスワードを入力します。 認証が完了すると、ユーザーはコンソールにリダイレクトされます。 そのようなログインを成功させるには、データベース管理者がコンソールまたは REST API を介して IBMid ユーザーを各データベース・サービス・インスタンスに追加する必要があります。 非 IBMid ユーザーの場合と同様に、データベース・サービス・インスタンスのユーザー ID は、IBMid ユーザーを追加するのと同時に入力する必要があります。 ユーザー ID は、データベース・サービス・インスタンス内で固有である必要があります。 このユーザー ID はまた、データベース内の許可 (AUTH) ID でもあります。
Web コンソールを使用して、IBMid またはサービス ID を使用するユーザーを追加するには、以下のステップを実行します。
-
管理者特権を持つユーザーとしてログインします。
-
右側のドロップダウン・メニューから、**「ユーザーの管理」**を選択します。
図 1. ドロップダウン・メニューから「ユーザーの管理」ページを選択する -
**「ユーザー」タブを選択した状態で、「追加」**をクリックします。
図 2. 「追加」をクリックしてユーザーを作成する -
**「IBMid ユーザーの追加 (Add IBMid user)」**を選択します。
図 3. IBMid ユーザー -
表示されるフィールドに**「ユーザー ID」と「IBMid」**を入力します。 **「作成」**をクリックします。
**「IBMid」**フィールドを使用して、ユーザーの IBMid とサービス ID のいずれかを指定できます。
REST API エクスペリエンス
Db2 Warehouse on Cloud REST API は、以前データベース・サービスの生成したアクセス・トークンを受け入れていた機能で IAM アクセス・トークンも受け入れるように拡張されました。
-
新規 IBMid ユーザーを追加するには、以下のサンプル API 呼び出しを実行します。
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}"
"id"
のユーザー ID 値は完全な E メール ID と一致させることはできません。 E メール ID の最初の部分と一致させることはできますが、そうする必要はありません。 この 2 つの異なる ID がリンクされることはありません。 例えば、"ibmid"
isabc@us.ibm.com
の場合、ID としてabc
を指定することも、def
を指定することもできますが、abc@us.ibm.com
を指定することはできません。 -
既存の非 IBMid データベース・ユーザー (例えば、
abcuser
) をマイグレーションして IBMid ユーザーにするには、まず、以下の例のような API 呼び出しを実行して、非 IBMid ユーザー ID を削除します。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"
次に、以下のサンプル API 呼び出しを実行して、前のユーザー ID (
abcuser
) と同じ IBMid でユーザーを再び追加します。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}"
ユーザー ID (
abcuser
) はそのユーザーの新規 IBMid でも同じままであるため、このユーザーに付与されたデータベース許可に変更はありません。 既存の非 IBMid データベース・ユーザーのリストをマイグレーションしてそれらのユーザーを IBMid ユーザーにする必要がある場合は、ユーザーごとに、前述の API 呼び出しのペアを実行する必要があります。 -
多くの新規 IBMid ユーザーを同時に追加するには、以下のサンプル API 呼び出し (ユーザーごとに 1 つ) をリストするバッチ・ファイルを作成します。
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}" . . .
サービスの API について詳しくは、Db2 Warehouse on Cloud REST API を参照してください。
IBMid の統合
LDAP などの独自の ID プロバイダーを使用するには、まず LDAP サーバーを IBMid と統合する必要があります。 LDAP サーバーを IBMid に統合する手順については、IBMid Enterprise Federation Adoption Guide を参照してください。 IBMid の統合が完了して、許可されたユーザーがデータベース管理者によってデータベース・サービス・インスタンスに追加されると、それらのユーザーは、自分の企業のユーザー ID とパスワードを使用してコンソールにログインできるようになります。 代わりに、それらのユーザーは、自分のユーザー ID を表すアクセス・トークンまたは API キーを使用して、サポートされるデータベース・クライアント・インターフェースのいずれかを介してデータベース・サービス・インスタンスに接続することもできます。
制約事項
以下は、IAM 認証に関する制約事項です。
- Db2 サーバーに接続している Db2 クライアントの IAM 認証は、SSL 接続でのみサポートされます。
- IBMid 統合は、カスタムのユーザー管理ポータルまたはサーバーを認証に使用できるようにするためにサポートされます。 そのようなサポートには、グループ統合は含まれません。
- データベース統合のための IAM 認証はサポートされていません。
- CLPPlus からの IDA およびユーザー定義拡張機能 (UDX) コマンドの実行はサポートされていません。
- タイプ 2 JDBC ドライバーはサポートされていません。