ベース・データベース・サービスでのIdentity and Access Management認証の使用
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)認証および認可を使用して、IAMユーザーがIAM資格証明でデータベースにアクセスできるように、ベース・データベース・サービスでOracle Databaseを構成できます。
ノート:
Oracle Databaseは、アイデンティティ・ドメインを持つOCI IAMのベース・データベース・サービス統合と、アイデンティティ・ドメインを含まないレガシーIAMをサポートします。 アイデンティティ・ドメインでIAMを使用するときは、デフォルトと非デフォルトの両方のドメイン・ユーザーおよびグループがサポートされます。デフォルト以外のカスタム・ドメインのサポートは、Oracle Databaseリリース19c、バージョン19.21以降でのみ使用できます(ただし、Oracle Databaseリリース21cでは使用できません)。
関連トピック
IAM認証について
ベース・データベース・サービスとのOCI IAM統合では、データベース・パスワード検証認証とトークン・ベース認証の両方がサポートされています。 Base Database ServiceでIAMユーザーを使用するためのアーキテクチャの詳細は、「Oracle DBaaSデータベースのIAMユーザーの認証および認可」を参照してください。
IAMデータベース・パスワード認証
Oracle Databaseインスタンスを有効にして、OCI IAMデータベース・パスワード(パスワード・ベリファイアを使用)を使用したユーザー・アクセスを許可できます。
パスワード・ベリファイア・データベース・アクセスの場合、IAMユーザーおよびOCIアプリケーションのOracle Databaseインスタンスへのマッピングを作成します。 IAMユーザー・アカウント自体はIAMで管理されます。 ユーザー・アカウントおよびユーザー・グループは、デフォルト・ドメインにすることも、デフォルト以外のカスタム・ドメインにすることもできます。
ノート:
サポートされている12c以上のデータベース・クライアントは、Oracle DatabaseへのIAMデータベース・パスワード・アクセスに使用できます。OCI IAMデータベース・パスワードを使用すると、IAMユーザーは通常、ユーザー名とパスワードでログインするOracle Databaseユーザーとしてデータベース・インスタンスにログインできます。 ユーザーは、IAMユーザー名およびIAMデータベースのパスワードを入力します。 IAMデータベースのパスワードは、OCIコンソールのパスワードとは異なります。 IAMユーザーをパスワード・ベリファイアとともに使用すると、データベース・クライアントがOracle Database 12cパスワード・ベリファイアをサポートしているかぎり、サポートされている任意のデータベース・クライアントでデータベースにログインできます。
IAM SSOトークン・ベース認証
Oracle Databaseインスタンスを有効にして、OCI IAM SSOトークンを使用できます。
トークン・データベース・アクセスの場合、IAMユーザーおよびOCIアプリケーションのOracle Databaseインスタンスへのマッピングを作成します。 IAMユーザー・アカウント自体はIAMで管理されます。 ユーザー・アカウントおよびユーザー・グループは、デフォルト・ドメインにすることも、デフォルト以外のカスタム・ドメインにすることもできます。
データベース・クライアントは、IAMデータベース・トークンを取得する方法はいくつかあります:
- クライアント・アプリケーションまたはツールは、ユーザーのIAMからデータベース・トークンをリクエストでき、クライアントAPIを介してデータベース・トークンを渡すことができます。 APIを使用してトークンを送信すると、データベース・クライアントの他の設定がオーバーライドされます。 IAMデータベース・トークンを使用するには、(21cではなく) Oracle Databaseクライアント19.16以上が必要です。 制限された(完全ではない) IAMデータベース・トークン機能は、一部のOracle Databaseクライアント21.5以上で使用できます。
- アプリケーションまたはツールがIAMデータベース・トークンのリクエストをサポートしておらず、クライアントAPIを介してデータベースに送信する場合、IAMユーザーはまずOCIコマンドライン・インタフェース(CLI)を使用してIAMデータベース・トークンを取得し、ファイルのロケーションに保存できます。 たとえば、この接続メソッドを使用してSQL*Plusおよび他のアプリケーションおよびツールを使用するには、まずOCI CLIを使用してデータベース・トークンを取得します。 データベース・クライアントがIAMデータベース・トークン用に構成されている場合、ユーザーがスラッシュ・ログイン・フォームを使用してログインすると、データベース・ドライバは、デフォルトまたは指定されたファイルのロケーションに保存されているIAMデータベース・トークンを使用します。
- クライアント・アプリケーションまたはツールは、OCI IAMインスタンス・プリンシパルまたはリソース・プリンシパルを使用してIAMデータベース・トークンを取得し、IAMデータベース・トークンを使用してデータベース・インスタンスに対する認証を行うことができます。
- IAMユーザーおよびOCIアプリケーションは、APIキーの使用など、いくつかのメソッドでIAMからデータベース・トークンをリクエストできます。
クライアント接続の構成の詳細は、「IAMトークンを使用するSQL*Plusのクライアント接続の構成」を参照してください。 OCI Cloud Shell内で委任トークンを使用するなど、他のメソッドの詳細は、「Oracle DBaaSデータベースのIAMユーザーの認証および認可」を参照してください。
ユーザーがログインするためにユーザー名とパスワードを入力した場合、データベース・ドライバは、デフォルトのメソッドとしてパスワード検証メソッドを使用して、データベースにアクセスします。
前提条件
ベース・データベース・サービスのIAM認証には、次の前提条件が必要です。
ネットワーク設定
データベースでIAM認証を使用する前に、ネットワーキング・サービスを使用して、サービス・ゲートウェイ、ルート・ルールおよびエグレス・セキュリティ・ルールを、データベース・リソースが存在するVirtual Cloud Network (VCN)およびサブネットに追加する必要があります。
- 「サービス・ゲートウェイの作成」の手順に従って、データベース・リソースが存在するVCNにサービス・ゲートウェイを作成します。
- サービス・ゲートウェイを作成した後、データベース・リソースが存在する各サブネット(VCN内)にルート・ルールおよびエグレス・セキュリティ・ルールを追加して、これらのリソースがゲートウェイを使用してIAM認証を使用できるようにします:
- サブネットの「サブネットの詳細」ページに移動します。
- 「サブネット情報」タブで、サブネット「ルート表」の名前をクリックしてその「ルート表詳細」ページを表示します。
- 既存の「ルート・ルール」の表で、次の特性を持つルールがすでに存在するかどうかを確認します:
- 宛先: Oracle Services NetworkのすべてのIADサービス
- ターゲット・タイプ: サービス・ゲートウェイ
- ターゲット: VCNで作成したサービス・ゲートウェイの名前
このようなルールが存在しない場合は、「ルート・ルールの追加」をクリックし、これらの特性を持つルート・ルールを追加します。
- サブネットの「サブネットの詳細」ページに戻ります。
- サブネット「セキュリティ・リスト」表で、サブネット・セキュリティ・リストの名前をクリックして、その「セキュリティ・リストの詳細」ページを表示します。
- サイド・メニューの「リソース」で、「エグレス・ルール」をクリックします。
- 既存の「エグレス・ルール」の表で、次の特性を持つルールがすでに存在するかどうかを確認します:
- ステートレス: いいえ
- 宛先: Oracle Services NetworkのすべてのIADサービス
- IPプロトコル: TCP
- ソース・ポート範囲: すべて
- 宛先ポート範囲: 443
- このようなルールが存在しない場合は、「エグレス・ルールの追加」をクリックし、これらの特性を持つエグレス・ルールを追加します。
環境設定
WALLET_ROOTが構成されているかどうかを確認します:
show parameters wallet_root;NAME TYPE VALUE
------------------ ----------- --------
wallet_root string ディレクトリのロケーションがWALLET_ROOTに表示されない場合は、IAMでこのデータベースを構成できません。 WALLET_ROOTは、データベースが次回パッチ適用されたときに設定する必要があります。 新しいデータベースには、WALLET_ROOTが設定されます。
TLS構成
データベース・クライアントからデータベース・サーバーにIAMトークンを送信する場合、TLS接続を確立する必要があります。 ベースDBサービス・インスタンスのデータベース証明書を含むTLSウォレットは、WALLET_ROOTのロケーションに格納する必要があります。 tlsディレクトリを作成: WALLET_ROOT/<PDB GUID>/tls
データベース・クライアントとサーバー間のTLSを構成する場合、考慮すべきオプションがいくつかあります。
- 一般的に知られている認証局によって署名された、自己署名データベース・サーバー証明書とデータベース・サーバー証明書の使用。
- 一方向TLS (TLS)と相互または双方向TLS (mTLS)。
- ウォレットの有無にかかわらずクライアント。
自己署名証明書: 自己署名証明書の使用は、自分で作成でき、無料であるため、内部的にITリソースに直面する一般的な方法です。 リソース(この場合、データベース・サーバー)には、データベース・クライアントに対して自身を認証するための自己署名証明書があります。 自己署名証明書およびルート証明書は、データベース・サーバー・ウォレットに格納されます。 データベース・クライアントがデータベース・サーバー証明書を認識できるようにするには、クライアントでルート証明書のコピーも必要です。 この自動作成されたルート証明書は、クライアント側のウォレットに格納することも、クライアント・システムのデフォルトの証明書ストアにインストールすることもできます(WindowsおよびLinuxのみ)。 セッションが確立されると、データベース・クライアントは、データベース・サーバーによって送信された証明書が同じルート証明書によって署名されていることを確認します。
よく知られた認証局: 一般的に知られているルート認証局を使用すると、ルート証明書がすでにクライアント・システムのデフォルトの証明書ストアに格納されている可能性が高いという点で、いくつかの利点があります。 共通のルート証明書であれば、クライアントがルート証明書を格納するための追加のステップはありません。 不利な点は、通常はコストが関連付けられていることです。
一方向TLS: 標準のTLSセッションでは、サーバーのみがクライアントに証明書を提供して自身を認証します。 クライアントは、サーバーに対して自身を認証するために個別のクライアント証明書を必要としません(HTTPSセッションの確立方法と同様)。 データベースにはサーバー証明書を格納するためのウォレットが必要ですが、クライアントに必要なのは、サーバー証明書の署名に使用されるルート証明書のみです。
双方向TLS (相互TLS、mTLSとも呼ばれる): mTLSでは、クライアントとサーバーの両方に、相互に表示されるアイデンティティ証明書があります。 ほとんどの場合、同じルート証明書がこれらの証明書の両方に署名されているため、データベース・サーバーとクライアントで同じルート証明書を使用してほかの証明書を認証できます。ユーザー・アイデンティティは証明書によってデータベース・サーバーによって認証されるため、mTLSを使用してユーザーを認証することがあります。 これは、IAMトークンを渡すには必要ありませんが、IAMトークンを渡すときに使用できます。
ウォレットを持つクライアント: クライアント証明書を格納するためにmTLSを使用する場合、クライアント・ウォレットは必須です。 ただし、ルート証明書は、同じウォレットまたはシステムのデフォルトの証明書ストアに格納できます。
- クライアントが独自の証明書を持たない一方向TLSが構成されています
- データベース・サーバーの証明書に署名したルート証明書は、システムのデフォルトの証明書ストアに格納されます。 サーバー証明書が共通認証局によって署名されている場合、おそらくすでにルート証明書が存在することになります。 自己署名証明書の場合は、クライアント・ウォレットの使用を回避するために、システムのデフォルトの証明書ストアにルート証明書をインストールする必要があります。
前述のオプションを含むデータベース・クライアントとデータベース・サーバー間のTLSの構成方法の詳細は、「トランスポート層のセキュリティ認証の構成」を参照してください。
自己署名証明書の使用およびウォレット関連の追加タスクを選択する場合は、データベース・セキュリティ・ガイドのorapkiコマンドライン・インタフェース(CLI)リファレンス・ガイドを参照してください。 「公開キー・インフラストラクチャ(PKI)要素の管理」を参照してください。
外部アイデンティティ・プロバイダの変更
このトピックでは、集中管理ユーザー(CMU)からOCI IAM認証および認可に外部アイデンティティ・プロバイダを変更するステップ、およびベース・データベース・サービスでのその逆の手順について説明します。
デフォルトでは、ユーザーに対するOCI IAM認証および認可は、新しくプロビジョニングされたデータベースでは有効になっていません。 外部認証のもう1つのオプションは、Active Directory (CMU-AD)で集中管理ユーザーを使用することです。 常に有効な外部認証スキームは1つのみです。
OCI IAM認証および認可の有効化
次のステップを実行して、OCI IAMの認証および認可を有効にします。
ALTER SYSTEMコマンドを使用して、OCI IAM認証および認可を有効にします。ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=OCI_IAM SCOPE=BOTH;IDENTITY_PROVIDER_TYPEシステム・パラメータの値を確認します。SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';NAME VALUE ---------------------- ------- identity_provider_type OCI_IAMIDENTITY_PROVIDER_CONFIGパラメータが設定されているかどうかを確認します。SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_config';IDENTITY_PROVIDER_CONFIGパラメータが設定されている場合は、このパラメータをリセットします。ALTER SYSTEM RESET IDENTITY_PROVIDER_CONFIG SCOPE=BOTH;
OCI IAM認証および認可の無効化
次のステップを実行して、OCI IAMの認証および認可を無効にします。
ALTER SYSTEMコマンドを使用して、OCI IAM統合を無効にします。ALTER SYSTEM RESET IDENTITY_PROVIDER_TYPE SCOPE=BOTH;
CMU-ADの有効化
Active Directory (AD)ユーザーがCMUを使用してデータベースに接続できるようにするには、次のステップを実行します:
- 「OCI IAM認証および認可の無効化」の説明に従って、IAM統合を無効にします。
- 「Microsoft Active Directoryによる集中管理ユーザーの構成」の説明に従って、CMU-ADを構成します。
CMU-ADの無効化
次のステップを実行して、CMU-ADを無効にします:
ALTER SYSTEMコマンドを使用して、CMU-ADを無効にします。ALTER SYSTEM SET LDAP_DIRECTORY_ACCESS = 'NONE';
OCI IAM認証および認可の再有効化
次のステップを実行して、OCI IAM認証および認可を使用してデータベースに接続するためにIAMユーザーを再度有効にします:
- 「CMU-ADの無効化」の説明に従って、CMU-ADを無効にします。
- 「OCI IAM認証および認可の有効化」の説明に従って、OCI IAM認証および認可を有効にします。
IAMユーザーのIAMグループおよびポリシーの作成
このトピックでは、IAMユーザーがOCIリソース(特にデータベース・インスタンス)にアクセスできるようにするために、IAMグループのポリシー・ステートメントを記述するステップについて説明します。
ポリシーは、特定のリソースにアクセスできるユーザーおよび方法を指定する文のグループです。 アクセスは、テナンシ全体、コンパートメント内のデータベースまたは個々のデータベースに対して付与できます。 つまり、特定のグループに特定のコンパートメント内の特定のタイプのリソースへのアクセス権を付与するポリシー・ステートメントを記述します。
ノート:
IAMトークンを使用してデータベースにアクセスするには、ポリシーを定義する必要があります。 IAMデータベース・パスワードを使用してデータベースにアクセスする場合、ポリシーは不要です。データベースでIAMユーザーがIAMトークンを使用してデータベースに接続できるようにするには:
-
グループを作成し、グループにユーザーを追加して、OCI IAMの前提条件を実行します。
たとえば、グループ
sales_dbusersを作成します。詳細は、グループの管理を参照してください。
-
OCIリソースへのアクセスを有効にするポリシー・ステートメントを記述します。
- OCIコンソールで、「アイデンティティとセキュリティ」をクリックし、「ポリシー」をクリックします。
- 書込みポリシーには、「ポリシーの作成」をクリックし、「名前」と「説明」を入力します。
-
「ポリシー・ビルダー」を使用してポリシーを作成します。
たとえば、IAMグループ
DBUsers内のユーザーがテナンシ内の任意のデータベースにアクセスできるようにするポリシーを作成します:Allow group DBUsers to use database-connections in tenancyたとえば、コンパートメント
testing_compartment内のデータベースにのみアクセスするようにDBUsersグループのメンバーを制限するポリシーを作成します:allow group DBUsers to use database-connections in compartment testing_compartmentたとえば、コンパートメント内の単一データベースへのグループ・アクセスを制限するポリシーを作成するには:
allow group DBUsers to use database-connections in compartment testing_compartment where target.database.id = 'ocid1.database.oc1.iad.aabbcc' - 「作成」をクリックします。
ポリシーの詳細は、「ポリシーの管理」を参照してください。
ノート:
ベース・データベース・サービスのデータベースでIAMユーザーで使用するポリシーを作成するには、次が必要です。
-
ポリシーでは、IAMユーザーがテナンシ全体、コンパートメント内のデータベース・インスタンスにアクセスできるようにしたり、単一のデータベース・インスタンスへのアクセスを制限できます。
-
インスタンス・プリンシパルまたはリソース・プリンシパルのいずれかを使用して、アプリケーションからデータベース・インスタンスへの接続を確立するデータベース・トークンを取得できます。 インスタンス・プリンシパルまたはリソース・プリンシパルを使用している場合は、動的グループをマップする必要があります。 したがって、インスタンス・プリンシパルとリソース・プリンシパルを排他的にマップすることはできません。マップできるのは、共有マッピングを使用してのみであり、インスタンスまたはリソース・インスタンスをIAM動的グループに配置できます。
動的グループを作成し、作成したポリシー内の動的グループを参照してOCIにアクセスできます。
詳細は、動的グループの管理を参照してください。
IAMユーザーの追加
データベースへのアクセスを許可するIAMユーザーを追加するには、データベース・グローバル・ユーザーをCREATE USERまたはALTER USER文でIAMグループまたはユーザーにマップします(IDENTIFIED GLOBALLY AS句を使用)。
IAMユーザーのデータベース・インスタンスへの認可は、データベース・グローバル・ユーザー(スキーマ)をIAMユーザー(排他マッピング)またはIAMグループ(共有スキーマ・マッピング)にマップすることで機能します。
データベース・インスタンスでのIAMユーザーの認可:
次のステップを実行して、データベース・インスタンスでIAMユーザーを認可します。
- IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要な
CREATE USERおよびALTER USERシステム権限があります)。 -
CREATE USER文またはALTER USER文でデータベース・ユーザー(スキーマ)間のマッピングを作成し、IAMグループ名を指定してIDENTIFIED GLOBALLY AS句を含めます。グローバル・ユーザーをIAMグループにマップするには、次の構文を使用します:
CREATE USER global_user IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_GROUP_NAME';たとえば、
db_sales_groupという名前のIAMグループをsales_groupという名前の共有データベース・グローバル・ユーザーにマップするには:CREATE USER sales_group IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=db_sales_group';これにより、共有グローバル・ユーザー・マッピングが作成されます。 グローバル・ユーザー
sales_groupを使用したマッピングは、IAMグループ内のすべてのユーザーに対して有効です。 したがって、db_sales_groupのユーザーは、(sales_groupグローバル・ユーザーの共有マッピングを介して)IAM資格証明を使用してデータベースにログインできます。次の例は、非デフォルト・ドメイン
sales_domainに対してこれを実行する方法を示しています:CREATE USER shared_sales_schema IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=sales_domain/db_sales_group'; - 他のIAMグループまたはユーザーの追加のグローバル・ユーザー・マッピングを作成する場合は、各IAMグループまたはユーザーについて次のステップに従います。
ノート:
IDENTIFIED GLOBALLYではないデータベース・ユーザーは、データベースがIAM認証に対して有効化されている場合でも、以前と同じようにログインを続行できます。
ローカルIAMユーザーをOracle Databaseグローバル・ユーザーに排他的にマップします:
次のステップを実行して、ローカルIAMユーザーをOracle Databaseグローバル・ユーザーに厳密にマップします。
- IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要な
CREATE USERおよびALTER USERシステム権限があります)。 -
CREATE USERまたはALTER USER文を使用してデータベース・ユーザー(スキーマ)間のマッピングを作成し、IAMローカルIAMユーザー名を指定してIDENTIFIED GLOBALLY AS句を含めます。たとえば、
peter_fitchという名前の新しいデータベース・グローバル・ユーザーを作成し、このユーザーをpeterfitchという名前の既存のローカルIAMユーザーにマップするには:CREATE USER peter_fitch IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_NAME=peterfitch'次の例は、デフォルト以外のドメイン
sales_domainを指定してユーザーを作成する方法を示しています:CREATE USER peter_fitch2 IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_NAME=sales_domain/peterfitch';
IAMロールの追加
オプションで、複数のIAMユーザーが同じ共有グローバル・ユーザーにマップされている場合に、IAMユーザーに追加のデータベース・ロールと権限を提供するグローバル・ロールを作成します。
グローバル・ロールの作成は、データベース・ユーザー(スキーマ)への排他的なIAMマッピングを持つIAMユーザーに対してオプションです。 IAMマッピングが共有スキーマに対する場合、グローバル・ロールの作成もオプションです。 たとえば、すべての権限とロールを共有スキーマに付与でき、共有スキーマにマップするすべてのIAMユーザーには、共有スキーマに割り当てられた権限とロールが付与されます。
グローバル・ロールを使用して、同じ共有スキーマを使用するユーザーをオプションで区別します。 たとえば、ユーザーのセットはすべて同じ共有スキーマを持ち、共有スキーマにはCREATE SESSION権限を設定できます。 次に、グローバル・ロールを使用して、同じ共有スキーマを使用する様々なユーザー・グループに割り当てられた差別化された権限とロールを提供できます。
IAMユーザーに追加のロールを付与するには、データベース・グローバル・ロールをIAMグループにマッピングします。
データベース・グローバル・ロールをIAMグループにマップします:
次のステップを実行して、データベースのグローバル・ロールをIAMグループにマップします。
- IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要な
CREATE USERおよびALTER USERシステム権限があります)。 -
CREATE ROLEまたはALTER ROLE文でデータベース・ロールのデータベース認可を設定し、IAMグループ名を指定してIDENTIFIED GLOBALLY AS句を含めます。グローバル・ロールをIAMグループにマップするには、次の構文を使用します:
CREATE ROLE global_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_GROUP_of_WHICH_the_IAM_USER_IS_a_MEMBER';たとえば、
ExporterGroupという名前のIAMグループをexport_roleという名前の共有データベース・グローバル・ロールにマップするには:CREATE ROLE export_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=ExporterGroup';次の例は、デフォルト以外のドメイン
sales_domainを指定してロールを作成する方法を示しています:CREATE ROLE export_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=sales_domain/ExporterGroup';sales_domainドメイン内のExporterGroupのすべてのメンバーは、データベースへのログイン時にデータベース・グローバル・ロールexport_roleで認可されます。 GRANT文を使用して、グローバル・ロールに必要な権限またはその他のロールを付与します。GRANT CREATE SESSION TO export_role; GRANT DWROLE TO export_role;- 既存のデータベース・ロールをIAMグループに関連付ける場合は、
ALTER ROLE文を使用して、既存のデータベース・ロールを変更してロールをIAMグループにマップします。 次の構文を使用して、既存のデータベース・ロールを変更してIAMグループにマップします:ALTER ROLE existing_database_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_Group_Name';
他のIAMグループのグローバル・ロール・マッピングを追加する場合は、各IAMグループの前述のステップに従います。
IAMユーザーのIAMデータベース・パスワードの作成
IAMユーザーを追加し、ユーザー名とパスワードを指定してIAMユーザーがデータベースにログインできるようにするには、IAMデータベース・パスワードを作成する必要があります。 IAMユーザー名およびIAMデータベース・パスワードは、2つの方法のいずれかで使用できます。
- IAMユーザーは、データベースへのアクセス時にIAMユーザー名およびIAMデータベースのパスワードを入力できます。 デフォルトでは、データベース・クライアントは通常のパスワード認証メカニズムに従いますが、データベースはIAMからIAMデータベースのパスワード・ベリファイアを取得します。
- データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用して、IAMデータベース・トークンを取得するように構成できます。 データベース・クライアントは、このデータベース・トークンをユーザー・アクセスのためにデータベースに送信します。
IAMユーザー名およびIAMデータベース・パスワードを使用したIAMデータベース・トークンの取得の詳細は、「Oracle DBaaSのIAMの構成」を参照してください。
IAMデータベース・パスワードの詳細は、「ユーザー資格証明の管理」の「IAMデータベースのユーザー名とパスワードの操作」を参照してください。
IAM認証によるデータベースへの接続
データベースADMINユーザーがグローバル・ユーザーおよびグローバル・ロールをIAMユーザーおよびIAMグループにマップした後、ユーザーはOCI IAM資格証明を使用してデータベース・インスタンスにログインするか、OCI IAMデータベース・トークンを使用してデータベースにアクセスします。
ローカル・データベース・アカウントのユーザー名とパスワード(非グローバル・データベース・ユーザー・アカウント)を使用して、データベースにログインできます。
データベース・クライアントを使用して、OCI IAMユーザーとしてデータベース・インスタンスにアクセスできます。 OCI IAMのユーザー名とパスワード資格証明およびパスワード検証でクライアントを使用するには、データベース・クライアントが12c以降である必要があります。
IAMデータベース・トークンを使用するには、(21cではなく) Oracle Databaseクライアント19.16以上が必要です。 制限された(完全ではない) IAMデータベース・トークン機能は、一部のOracle Databaseクライアント21.5以上で使用できます。
ノート:
データベース・インスタンスが制限モードの場合、ADMINなどのRESTRICTED SESSION権限を持つユーザーのみがデータベースに接続できます。
IAMを使用したデータベース・インスタンスへの接続について
IAMユーザーは、IAMデータベースのパスワード・ベリファイアまたはIAMトークンのいずれかを使用して、データベース・インスタンスに接続できます。
IAMデータベース・パスワード・ベリファイアの使用は、データベース・パスワード認証プロセスに似ています。 ただし、データベースに格納されるパスワード・ベリファイア(パスワードの暗号化されたハッシュ)のかわりに、ベリファイアはOCI IAMユーザー・プロファイルの一部として格納されます。
2番目の接続メソッドでは、データベースのIAMトークンが使用されます。 トークン・ベース・アクセスの使用は、ベース・データベース・サービスのOracle Databasesなどのクラウド・リソースに適しています。 トークンは、IAMエンドポイントで強制できる強度に基づいています。 これはマルチ・ファクタ認証であり、パスワードのみを使用するよりも強力です。 トークンを使用するもう1つの利点は、パスワード検証子(機密とみなされる)がメモリーに格納されないこと、またはメモリーで使用できないことです。 データベース・アクセスにトークンを使用する場合は、TCPS (TLS)接続が必要です。
ノート:
IAMトークンを渡すときにネイティブ・ネットワーク暗号化を設定することはできません。 Transport Layer Security (TLS)のみがサポートされ、ネイティブ・ネットワーク暗号化やTLSによるネイティブ・ネットワーク暗号化はサポートされていません。IAMデータベース・パスワード・ベリファイアを使用するクライアント接続
IAMユーザーに必要な認可を構成した後、このユーザーは、追加の構成なしで、SQL*PlusやSQLclなどの既存のクライアント・アプリケーションを使用してログインできます。
IAMユーザーは、現在サポートされているデータベース・クライアントを使用して、IAMユーザー名およびIAMデータベース・パスワード(OCIコンソール・パスワードではない)を入力します。 唯一の制約は、データベース・クライアントのバージョンがOracle Databaseリリース12.1.0.2以降で、Oracle Database 12cのパスワードを使用することです。 データベース・クライアントは、12cのパスワード・ベリファイアを使用できる必要があります。 11gベリファイア暗号化の使用は、IAMではサポートされていません。 IAMユーザーがデータベースに接続するために特別なクライアントまたはツール構成は必要ありません。
データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用して、IAMから直接トークンをリクエストすることもできます。 トークンを取得するためのクライアントの構成の詳細は、「IAMユーザー名およびデータベース・パスワードによってリクエストされたトークンを使用するクライアント接続」を参照してください。
トークンを使用するクライアント接続
データベースへのIAMトークン・アクセスの場合、クライアント・アプリケーションまたはツールは、IAMユーザーのIAMからデータベース・トークンをリクエストします。
クライアント・アプリケーションは、データベース・クライアントAPIを介してデータベース・トークンを直接データベース・クライアントに渡します。
アプリケーションまたはツールが更新されてIAMトークンをリクエストしていない場合、IAMユーザーはOCI CLIを使用してデータベース・トークンをリクエストおよび格納できます。 次の資格証明を使用して、データベース・アクセス・トークン(db-token)をリクエストできます:
- セキュリティ・トークン(IAM認証あり)、委任トークン(OCIクラウド・シェル内)および
API-keys。これらは、認証を有効にするためにIAMユーザーを表す資格証明です - IAMユーザー名およびIAMデータベース・パスワード。データベース・クライアントは、IAMデータベース・トークンを取得するように構成するときに直接取得するために使用できます。
- インスタンス・プリンシパル・トークン。これは、認証後にインスタンスが、サービス・リソースに対してアクションを実行するための認可されたアクター(またはプリンシパル)となることができるようにします
- リソース・プリンシパル・トークン。これは、アプリケーションが他のOCIサービスに自身を認証できるようにする資格証明です。
- IAMユーザー名およびIAMデータベース・パスワード(データベース・クライアントによってのみリクエスト可能)を使用します。
IAMユーザーがスラッシュ/ログインでクライアントにログインし、OCI_IAMパラメータが構成されている場合(sqlnet.ora、tnsnames.oraまたは接続文字列の一部として)、データベース・クライアントはファイルからデータベース・トークンを取得します。 IAMユーザーがユーザー名とパスワードを送信する場合、IAMデータベースのパスワード・ベリファイアを使用するクライアント接続について記述されたIAMデータベース・ベリファイア・アクセスが接続で使用されます。ただし、データベース・クライアントがIAMユーザー名およびIAMデータベースのパスワードを使用してIAMからデータベース・トークンを取得するように構成されている場合を除きます。 このトピックの手順は、OCI CLIをデータベース・トークンのヘルパーとして使用する方法を示しています。 アプリケーションまたはツールがIAMで動作するように更新されている場合は、アプリケーションまたはツールの手順に従います。 一般的なユースケースには、次のものがあります: オンプレミスSQL*Plus、オンプレミスSQLcl、クラウド・シェルのSQL*Plus、またはSEPウォレットを使用するアプリケーション。
次のトピックでは、次の方法について説明します:
IAMデータベース・パスワードを使用するSQL*Plusのクライアント接続の構成
IAMデータベース・パスワードを使用するようにSQL*Plusを構成できます。
IAMユーザーとして、次の構文を使用してデータベースにログインします:
CONNECT user_name@db_connect_string
Enter password: passwordこの仕様では、user_nameはIAMユーザー名です。 結合されたdomain_name/user_nameには128バイトの制限があります。
次の例は、IAMユーザーpeter_fitchがデータベース・インスタンスにログインする方法を示しています。
sqlplus /nolog
connect peter_fitch@db_connect_string
Enter password: password一部の特殊文字では、user_nameおよびpasswordの周りに二重引用符が必要です。 たとえば:
"peter_fitch@example.com"@db_connect_string
"IAM database password"IAMトークンを使用するSQL*Plusのクライアント接続の構成
次のステップを実行して、IAMトークンを使用するSQL*Plusのクライアント接続を構成します。
- IAMユーザー・アカウントがあることを確認します。
- IAM管理者およびデータベース管理者と協力して、コンパートメントまたはテナンシのデータベースにアクセスできるポリシーがあり、データベースのグローバル・スキーマにマップされていることを確認します。
- アプリケーションまたはツールで直接のIAM統合がサポートされていない場合は、OCI CLIをダウンロードしてインストールし、構成します。 OCI CLIのインストールおよび構成の詳細は、「クイックスタート」を参照してください。
- OCI CLI構成の一部としてAPIキーを設定し、デフォルト値を選択します。
- IAMユーザーのAPIキー・アクセスを設定します。
db-tokenを取得します。 たとえば:- OCI CLIを使用した
API-keyでのdb-tokenの取得:oci iam db-token get - セキュリティ(またはセッション)トークンを使用した
db-tokenの取得:oci iam db-token get --auth security_tokenセキュリティ・トークンが期限切れになると、ユーザーがOCIに再度ログインできるようにウィンドウが表示されます。 これにより、ユーザーのセキュリティ・トークンが生成されます。 OCI CLIでは、このリフレッシュされたトークンを使用して
db-tokenを取得します。 - 委任トークンを使用した
db-tokenの取得: クラウド・シェルにログインすると、委任トークンが自動的に生成され、/etcディレクトリに配置されます。 このトークンを取得するには、OCI CLIで次のコマンドを実行します:oci iam db-token get - OCI CLIを使用したインスタンス・トークンの取得:
oci iam db-token get --auth instance_principal
- OCI CLIを使用した
詳細については、「必要なキーとOCID」を参照してください。
- この構成は、Oracle Database 19cクライアントでのみ機能します。 このクライアントの最新リリース更新を使用していることを確認してください。
ノート:
Oracle Databaseクライアント・リリース21cでは、IAMトークン機能が制限されています。 - 既存のプロセスに従って、ウォレットをデータベースからダウンロードし、SQL*Plusで使用するように構成するための指示に従います。
sqlnet.oraでSSL_SERVER_DN_MATCH=ONを検索して、DN一致が有効になっていることを確認します。sqlnet.oraファイルにTOKEN_AUTH=OCI_TOKENを追加して、IAMトークンを使用するようにデータベース・クライアントを構成します。 データベース・トークン・ファイルのデフォルトの場所を使用するため、トークンの場所を含める必要はありません。
tnsnames.ora接続文字列内のTOKEN_AUTHおよびTOKEN_LOCATION値は、その接続のsqlnet.ora設定より優先されます。 たとえば、接続文字列の場合、トークンがデフォルトのロケーション(Linuxの場合は~/.oci/db-token)にあると仮定します:(description= (retry_count=20)(retry_delay=3) (address=(protocol=tcps)(port=1522) (host=example.us-phoenix-1.oraclecloud.com)) (connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com)) (security=(ssl_server_cert_dn="CN=example.uscom-east-1.oraclecloud.com, OU=Oracle BMCS US, O=Example Corporation, L=Redwood City, ST=California, C=US") (TOKEN_AUTH=OCI_TOKEN)))
TOKEN_AUTHパラメータを使用して接続文字列を更新した後、IAMユーザーは次のコマンドを実行してSQL*Plusを起動することで、データベース・インスタンスにログインできます。 接続記述子自体を含めることも、tnsnames.oraファイルの記述子の名前を使用することもできます。
connect /@exampledb_highまたは
connect /@(description=
(retry_count=20)(retry_delay=3)
(address=(protocol=tcps)(port=1522)
(host=example.us-phoenix-1.oraclecloud.com))
(connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com))
(security=(ssl_server_cert_dn="CN=example.uscom-east-1.oraclecloud.com,
OU=Oracle BMCS US, O=Example Corporation,
L=Redwood City, ST=California, C=US")
(TOKEN_AUTH=OCI_TOKEN)))TOKEN_AUTHはsqlnet.oraファイルまたは接続文字列のいずれかですでに設定されているため、データベース・クライアントはdb-tokenを取得するようにすでに構成されています。 データベース・クライアントはdb-tokenを取得し、秘密キーを使用して署名し、トークンをデータベースに送信します。 スラッシュ/のかわりにIAMユーザー名およびIAMデータベース・パスワードが指定されている場合、別のパラメータが指定されていないかぎり、データベース・クライアントはdb-tokenを使用するかわりに、パスワードを使用して接続: PASSWORD_AUTH = OCI_TOKEN。 これにより、IAMユーザー名およびIAMデータベース・パスワードを使用して、IAMからトークンを取得するようにデータベース・クライアントに指示されます。 PASSWORD_AUTH,の設定に加えて、OCI_IAM_URL、OCI_TENANCYおよびオプションでOCI_COMPARTMENTおよびOCI_DATABASEも設定する必要があります。
Instance Principalを使用したIAM認証でのデータベースへのアクセス
ADMINユーザーがデータベースでOCI IAMを有効にすると、アプリケーションはインスタンス・プリンシパルを使用してOCI IAMデータベース・トークンを介してデータベースにアクセスできます。
詳細は、「インスタンス・プリンシパルを使用したOracle Cloud Infrastructure APIへのアクセス」を参照してください。
プロキシ認証の構成
プロキシ認証により、IAMユーザーは、アプリケーションのメンテナンスなどのタスクのためにデータベース・スキーマにプロキシできます。
プロキシ認証は、通常、実際のユーザーを認証し、アプリケーションを管理するためにスキーマ権限およびロールを持つデータベース・スキーマの使用を認可するために使用されます。 アプリケーション・スキーマ・パスワードの共有などの代替方法は、安全でないものとみなされ、実際のユーザーがアクションを実行したものを監査できません。
ユース・ケースは、アプリケーション・データベース管理者である名前付きIAMユーザーが、資格証明を使用して認証し、データベース・スキーマ・ユーザー(たとえば、hrapp)にプロキシできます。 この認証により、IAM管理者は、アプリケーションのメンテナンスを実行するためにhrapp権限およびロールをユーザーhrappとして使用できますが、認証にはIAM資格証明を使用します。 アプリケーション・データベース管理者は、データベースにサインインし、アプリケーション・スキーマにプロキシしてこのスキーマを管理できます。
パスワード認証とトークン認証の両方のメソッドにプロキシ認証を構成できます。
IAMユーザーのプロキシ認証の構成
IAMユーザーのプロキシ認証を構成するには、IAMユーザーにはグローバル・スキーマ(排他マッピングまたは共有マッピング)へのマッピングがすでに必要です。 プロキシするIAMユーザーの別のデータベース・スキーマも使用可能である必要があります。
このタイプのユーザーがあることを確認したら、IAMユーザーにプロキシを許可するようにデータベース・ユーザーを変更します。
ALTER USERシステム権限を持つユーザーとしてデータベース・インスタンスにログインします。- ローカル・データベース・ユーザー・アカウントにプロキシする権限をIAMユーザーに付与します。 IAMユーザーをコマンドで参照できないため、データベース・グローバル・ユーザー(IAMユーザーにマップ)とターゲット・データベース・ユーザーの間にプロキシを作成する必要があります。次の例では、
hrappはプロキシ先のデータベース・スキーマで、peterfitch_schemaはユーザーpeterfitchに排他的にマップされたデータベース・グローバル・ユーザーです。ALTER USER hrapp GRANT CONNECT THROUGH peterfitch_schema;
この段階で、IAMユーザーはプロキシを使用してデータベース・インスタンスにログインできます。 たとえば:
パスワード検証を使用して接続するには:
CONNECT peterfitch[hrapp]@connect_string
Enter password: passwordトークンを使用して接続するには:
CONNECT [hrapp]/@connect_stringIAMユーザー・プロキシ認証の検証
パスワード認証メソッドとトークン認証メソッドの両方についてIAMユーザー・プロキシ構成を検証できます。
CREATE USERおよびALTER USERシステム権限を持つユーザーとしてデータベース・インスタンスにログインします。- IAMユーザーとして接続し、
SHOW USERおよびSELECT SYS_CONTEXTコマンドを実行します。 たとえば、データベース・ユーザーhrappにプロキシされたときに、IAMユーザーpeterfitchのプロキシ認証を確認するとします。 ここに示す様々なタイプの認証メソッドを使用してデータベースに接続する必要がありますが、実行するコマンドの出力はすべてのタイプで同じになります。- パスワード認証の場合、IAMユーザーがデフォルト・ドメインにあると仮定すると、次のようになります。
CONNECT peterfitch[hrapp]/password\!@connect_string SHOW USER; --The output should be USER is "HRAPP" SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL; --The output should be "PASSWORD_GLOBAL_PROXY" SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL; --The output should be "PETERFITCH_SCHEMA" SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL; --The output should be "HRAPP" - トークン認証の場合、デフォルト以外のドメインにあるユーザーに対し、
sales_domain:CONNECT [hrapp]/@connect_string SHOW USER; --The output should be USER is "HRAPP " SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL; --The output should be "TOKEN_GLOBAL_PROXY" SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL; --The output should be "PETERFITCH_SCHEMA" SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL; --The output should be "HRAPP"
- パスワード認証の場合、IAMユーザーがデフォルト・ドメインにあると仮定すると、次のようになります。
IAM認証済ユーザーでのデータベース・リンクの使用
データベース・リンクを使用して、あるデータベース・インスタンスから別のデータベース・インスタンスにOCI IAMユーザーとして接続できます。
接続されたユーザーまたは固定ユーザーのデータベース・リンクを使用して、OCI IAMユーザーとしてデータベースに接続できます。
ノート:
現在のユーザー・データベース・リンクは、OCI IAMユーザーとしてBase Database Serviceのデータベースに接続することはサポートされていません。-
接続されたユーザー・データベース・リンク: 接続されたユーザー・データベース・リンクの場合、IAMユーザーは、データベース・リンクによって接続されたソース・データベースとターゲット・データベースの両方でスキーマにマップされる必要があります。 データベース・パスワード・ベリファイアまたはIAMデータベース・トークンを使用して、接続されたユーザー・データベース・リンクを使用できます。
-
固定ユーザー・データベース・リンク: 固定ユーザー・データベース・リンクは、データベース・ユーザーまたはIAMユーザーを使用して作成できます。 IAMユーザーを固定ユーザー・データベース・リンクとして使用する場合、IAMユーザーはターゲット・データベースでスキーマ・マッピングを持っている必要があります。 データベース・リンクのIAMユーザーは、パスワード・ベリファイアでのみ構成できます。