OCI IAM DBトークン認証
OCI IAM DBトークン認証とは
Section titled “OCI IAM DBトークン認証とは”OCI IAM が発行する DBトークン(JWT) を使って Oracle Database に接続する認証方式です。 有効期限 60 分の一時的なクレデンシャルを使用するため、固定パスワードを長期間保持するリスクを排除できます。
接続時にユーザー名・パスワードを入力する必要がなく、/@<接続記述子名> の形式で接続します。
IAM DBパスワード認証との比較
Section titled “IAM DBパスワード認証との比較”IAM ユーザーを使う点や、グローバルユーザー・グローバルロールによる権限制御の仕組みは IAM DBパスワードと共通ですが、クレデンシャルの種類と取得方法が異なります。
| IAM DBパスワード | IAM DBトークン | |
|---|---|---|
| クレデンシャル | 長期パスワード | 一時トークン(有効期限 60 分) |
| 取得方法 | OCI コンソールで発行 | OCI CLI / SDK で取得 |
| 接続時の入力 | ユーザー名 + DBパスワード | 不要(/@接続名) |
| 静的な資格情報の保持 | あり | なし(トークン取得のみ) |
| TLS 必須 | ADB ではデフォルト必須 | 必須 |
| クライアントバージョン | 制約なし(既存ツール対応) | 19.13 / 21.4 以降が必要 |
仕組みの概要
Section titled “仕組みの概要”[ OCI IAM ] [ クライアント ] [ Oracle Database ] | | | |─ iamuser-hr-admin-01 | | |─ iamuser-hr-dev-01 | | | | | |─────────── 1. DBトークン生成要求 ──────────────▶| | (APIキー / インスタンスプリンシパル) | |◀────────────── DBトークン(JWT) ────────────────| | ~/.oci/db-token/token | | | | | |──────── 2. 接続 ───────▶| | | (OCI_TOKEN + TLS) | | | | | | | 3. トークン検証 | | | + IAMグループ照合 | | | 4. DBユーザー接続 | | | (DBUSER_IAM) | | | 5. ロール付与 | | | (GLROLE_HR_ADMIN / DEV) | | |- OCI CLI で
oci iam db-token getを実行し、DBトークンと対応する秘密鍵を取得する tnsnames.oraにTOKEN_AUTH=OCI_TOKENを追加し、/@<接続名>で接続する- DB がトークンを検証し、IAM グループに応じたグローバルロールを適用する
DBトークンの取得方法
Section titled “DBトークンの取得方法”OCI CLI(APIキー認証)
Section titled “OCI CLI(APIキー認証)”# デフォルトプロファイルでトークン取得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キーなしでトークンを取得できます。
クライアント環境に静的な資格情報を一切置かない構成が実現できます。
oci iam db-token get --auth instance_principaltnsnames.ora への追記
Section titled “tnsnames.ora への追記”既存の接続記述子の 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 で指定します(トークンと秘密鍵を一緒に移動する必要があります)。
接続コマンド
Section titled “接続コマンド”sql /nolog
SQL> connect /@db-tokenチュートリアルについて
Section titled “チュートリアルについて”ADB を対象に、2種類の IAM ユーザーのトークンでそれぞれ権限が異なることを確認します。 IAM・DB 側の初期設定は OCI IAM DBパスワード認証のチュートリアルと共通です。
-
Identity Domain・IAM ユーザー・グループの準備、DB のグローバルユーザー/ロール作成、IAM ポリシーの設定を行います。あわせて OCI CLI のインストールと APIキーの登録を行います。
-
oci iam db-token getで admin / dev 各ユーザーのトークンを取得し、それぞれ/@db-tokenで接続します。トークンを切り替えることで適用されるグローバルロールが変わることを確認します。