Skip to content

OCI IAM DBトークン認証

OCI IAM が発行する DBトークン(JWT) を使って Oracle Database に接続する認証方式です。 有効期限 60 分の一時的なクレデンシャルを使用するため、固定パスワードを長期間保持するリスクを排除できます。

接続時にユーザー名・パスワードを入力する必要がなく、/@<接続記述子名> の形式で接続します。

IAM ユーザーを使う点や、グローバルユーザー・グローバルロールによる権限制御の仕組みは IAM DBパスワードと共通ですが、クレデンシャルの種類と取得方法が異なります。

IAM DBパスワードIAM DBトークン
クレデンシャル長期パスワード一時トークン(有効期限 60 分)
取得方法OCI コンソールで発行OCI CLI / SDK で取得
接続時の入力ユーザー名 + DBパスワード不要(/@接続名
静的な資格情報の保持ありなし(トークン取得のみ)
TLS 必須ADB ではデフォルト必須必須
クライアントバージョン制約なし(既存ツール対応)19.13 / 21.4 以降が必要
OCI IAM DBトークン認証のフロー

クライアントが OCI IAM から有効期限つきの DBトークン(JWT)を取得し、TOKEN_AUTH=OCI_TOKEN と TLS で Oracle Database に接続する。DB はトークンを検証し、IAM グループに応じてグローバルユーザー DBUSER_IAM とグローバルロールを適用する。

OCI IAMクライアントOracle Database① DBトークン生成要求(APIキー / インスタンスプリンシパル)② DBトークン(JWT)を発行 → ~/.oci/db-token/token③ 接続(TOKEN_AUTH=OCI_TOKEN + TLS)Oracle Database 内部の処理④ トークンを検証し IAM グループを照合⑤ グローバルユーザー DBUSER_IAM として接続⑥ グローバルロール付与(GLROLE_HR_ADMIN / GLROLE_HR_DEV)
  1. OCI CLI で oci iam db-token get を実行し、DBトークンと対応する秘密鍵を取得する
  2. tnsnames.oraTOKEN_AUTH=OCI_TOKEN を追加し、/@<接続名> で接続する
  3. DB がトークンを検証し、IAM グループに応じたグローバルロールを適用する
Terminal window
# デフォルトプロファイルでトークン取得
oci iam db-token get
# 特定のプロファイルを指定する場合
oci iam db-token get --profile iamuser-hr-admin-01

実行すると ~/.oci/db-token/ に以下の3ファイルが生成されます。

~/.oci/db-token/
├── oci_db_key.pem # 秘密鍵
├── oci_db_key_public.pem # 公開鍵
└── token # DBトークン本体(JWT)

インスタンスプリンシパル(APIキー不要)

Section titled “インスタンスプリンシパル(APIキー不要)”

OCI コンピュートインスタンスから接続する場合は、--auth instance_principal を指定することでAPIキーなしでトークンを取得できます。 クライアント環境に静的な資格情報を一切置かない構成が実現できます。

Terminal window
oci iam db-token get --auth instance_principal

既存の接続記述子の security セクションに TOKEN_AUTH=OCI_TOKEN を追加します。

db-token = (
description=
(address=(protocol=tcps)(port=1522)(host=<ホスト>))
(connect_data=(service_name=<サービス名>))
(security=(ssl_server_dn_match=yes))
(security=(ssl_server_dn_match=yes)(TOKEN_AUTH=OCI_TOKEN))
)

トークンファイルをデフォルト以外の場所に置く場合は TOKEN_LOCATION で指定します(トークンと秘密鍵を一緒に移動する必要があります)。

Terminal window
sql /nolog
SQL> connect /@db-token

ADB を対象に、2種類の IAM ユーザーのトークンでそれぞれ権限が異なることを確認します。 IAM・DB 側の初期設定は OCI IAM DBパスワード認証のチュートリアルと共通です。

  1. セットアップ

    Identity Domain・IAM ユーザー・グループの準備、DB のグローバルユーザー/ロール作成、IAM ポリシーの設定を行います。あわせて OCI CLI のインストールと APIキーの登録を行います。

  2. トークンを取得してアクセスする

    oci iam db-token get で admin / dev 各ユーザーのトークンを取得し、それぞれ /@db-token で接続します。トークンを切り替えることで適用されるグローバルロールが変わることを確認します。