ベース・データベース・サービスでのIdentity and Access Management認証の使用

Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)認証および認可を使用するようにベース・データベース・サービスでOracleデータベースを構成し、IAMユーザーがIAM資格証明を使用してデータベースにアクセスできるようにします。

ノート:

Oracle Databaseは、OCI IAMとアイデンティティ・ドメインとのベース・データベース・サービスの統合、およびアイデンティティ・ドメインを含まないレガシーIAMをサポートしています。アイデンティティ・ドメインでIAMを使用する場合、デフォルト・ドメイン・ユーザーおよびデフォルト以外のドメイン・ユーザーおよびグループの両方がサポートされます。

デフォルト以外のカスタム・ドメインのサポートは、Oracle Databaseリリース19c、バージョン19.21以降でのみ使用できます(ただし、Oracle Databaseリリース21cでは使用できません)。

IAM認証について

OCI IAMとベース・データベース・サービスとの統合では、データベース・パスワード・ベリファイア認証とトークンベース認証の両方がサポートされます。ベース・データベース・サービスでIAMユーザーを使用するためのアーキテクチャの詳細は、Oracle DBaaSデータベースに対するIAMユーザーの認証と認可を参照してください。

IAMデータベース・パスワード認証

Oracle Databaseインスタンスで、OCI IAMデータベース・パスワード(パスワード・ベリファイアを使用)によるユーザー・アクセスを可能にすることができます。

パスワード・ベリファイアのデータベース・アクセスのために、Oracle DatabaseインスタンスへのIAMユーザーおよびOCIアプリケーションのマッピングを作成します。IAMユーザー・アカウント自体はIAMで管理されます。ユーザー・アカウントとユーザー・グループは、デフォルト・ドメインまたはカスタムのデフォルト以外のドメインにあります。

ノート:

サポートされている12c以上のデータベース・クライアントは、Oracle DatabaseへのIAMデータベース・パスワード・アクセスに使用できます。

OCI IAMデータベース・パスワードを使用すると、IAMユーザーは、Oracle Databaseユーザーが通常ユーザー名とパスワードでログインするようにデータベース・インスタンスにログインできます。ユーザーは、IAMユーザー名およびIAMデータベース・パスワードを入力します。IAMデータベース・パスワードは、OCIコンソール・パスワードとは異なるパスワードです。データベース・クライアントがOracle Database 12cパスワード・ベリファイアをサポートしているかぎり、パスワード・ベリファイアでIAMユーザーを使用し、サポートされている任意のデータベース・クライアントでデータベースにログインできます。

IAM SSOトークン・ベース認証

Oracle DatabaseインスタンスでOCI IAM SSOトークンを使用できるようにすることができます。

トークン・データベース・アクセスのために、Oracle DatabaseインスタンスへのIAMユーザーおよびOCIアプリケーションのマッピングを作成します。IAMユーザー・アカウント自体はIAMで管理されます。ユーザー・アカウントとユーザー・グループは、デフォルト・ドメインまたはカスタムのデフォルト以外のドメインにあります。

データベース・クライアントがIAMデータベース・トークンを取得するには、いくつかの方法があります:

  • クライアント・アプリケーションまたはツールは、IAMからユーザーのデータベース・トークンをリクエストでき、クライアントAPIを介してデータベース・トークンを渡すことができます。APIを使用してトークンを送信すると、データベース・クライアント内の他の設定がオーバーライドされます。IAMデータベース・トークンを使用するには、Oracle Databaseクライアント19.16以上が必要です(21cではありません)。一部のOracle Databaseクライアント21.5以上では、IAMデータベース・トークン機能が制限されています(完全ではありません)。
  • アプリケーションまたはツールでIAMデータベース・トークンのリクエストおよびクライアントAPIを介したデータベースへの送信がサポートされていない場合、IAMユーザーは最初にOCIコマンドライン・インタフェース(CLI)を使用してIAMデータベース・トークンを取得し、ファイルの場所に保存できます。たとえば、この接続方法を使用してSQL*Plusおよびその他のアプリケーションおよびツールを使用するには、最初にOCI CLIを使用してデータベース・トークンを取得します。データベース・クライアントがIAMデータベース・トークン用に構成されている場合、ユーザーがスラッシュ・ログイン形式でログインすると、データベース・ドライバは、デフォルトまたは指定されたファイルの場所に保存されたIAMデータベース・トークンを使用します。
  • クライアント・アプリケーションまたはツールは、OCI IAMインスタンス・プリンシパルまたはリソース・プリンシパルを使用してIAMデータベース・トークンを取得し、IAMデータベース・トークンを使用してデータベース・インスタンスに自己認証できます。
  • IAMユーザーおよびOCIアプリケーションは、APIキーの使用など、いくつかの方法でIAMからデータベース・トークンをリクエストできます。

    クライアント接続の構成の詳細は、IAMトークンを使用するSQL*Plusのクライアント接続の構成を参照してください。OCIクラウド・シェル内での委任トークンの使用など、その他の方法の詳細は、Oracle DBaaSデータベースに対するIAMユーザーの認証と認可を参照してください。

ユーザーがログインするためにユーザー名とパスワードを入力した場合、データベース・ドライバは、デフォルトの方法としてパスワード・ベリファイアを使用してデータベースにアクセスします。

前提条件

ベース・データベース・サービスでのIAM認証には、次の前提条件が必要です。

ネットワーク設定

データベースでIAM認証を使用する前に、ネットワーキング・サービスを使用して、サービス・ゲートウェイ、ルート・ルールおよびエグレス・セキュリティ・ルールを、データベース・リソースが存在する仮想クラウド・ネットワーク(VCN)およびサブネットに追加する必要があります。

  1. サービス・ゲートウェイの作成の手順に従って、データベース・リソースが存在するVCNにサービス・ゲートウェイを作成します。
  2. サービス・ゲートウェイを作成したら、データベース・リソースが存在する(VCN内の)各サブネットにルート・ルールおよびエグレス・セキュリティ・ルールを追加して、これらのリソースがゲートウェイを使用してIAM認証を使用できるようにします:
    1. サブネットの「サブネットの詳細」ページに移動します。
    2. 「サブネット情報」タブで、サブネットの「ルート表」の名前をクリックして、その「ルート表の詳細」ページを表示します。
    3. 既存のルート・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • 宛先: Oracle Services NetworkのすべてのIADサービス
      • ターゲット・タイプ: サービス・ゲートウェイ
      • ターゲット: VCN内に作成したサービス・ゲートウェイの名前

      そのようなルールが存在しない場合は、「ルート・ルールの追加」をクリックし、これらの特性を持つルート・ルールを追加します。

    4. サブネットの「サブネットの詳細」ページに戻ります。
    5. サブネットの「セキュリティ・リスト」表で、サブネットのセキュリティ・リストの名前をクリックして、その「セキュリティ・リストの詳細」ページを表示します。
    6. サイド・メニューの「リソース」で、「エグレス・ルール」をクリックします。
    7. 既存のエグレス・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • ステートレス: いいえ
      • 宛先: Oracle Services NetworkのすべてのIADサービス
      • IPプロトコル: TCP
      • ソース・ポート範囲: すべて
      • 宛先ポート範囲: 443
    8. そのようなルールが存在しない場合は、「エグレス・ルールの追加」をクリックし、これらの特性を持つエグレス・ルールを追加します。

環境設定

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の場所の下に格納する必要があります。WALLET_ROOT/<PDB GUID>/tlsのようになるようにtlsディレクトリを作成します

データベース・クライアントとサーバー間にTLSを構成する場合は、いくつかのオプションを検討する必要があります。

  • 自己署名データベース・サーバー証明書と、既知の認証局によって署名されたデータベース・サーバー証明書の使用の比較
  • 一方向TLS (TLS)と相互または双方向TLS (mTLS).の比較
  • クライアントのウォレットの有無

自己署名証明書: 自己署名証明書は自分で作成でき、無料であるため、これを使用することは内部でITリソースに接続する場合の一般的な方法です。リソース(この場合はデータベース・サーバー)には、データベース・クライアントに対して自身を認証するための自己署名証明書があります。自己署名証明書とルート証明書は、データベース・サーバー・ウォレットに格納されます。データベース・クライアントがデータベース・サーバー証明書を認識できるようにするには、ルート証明書のコピーがクライアントにも必要です。この自己作成ルート証明書は、クライアント側のウォレットに格納することも、クライアント・システムのデフォルト証明書ストアにインストールすることもできます(WindowsおよびLinuxのみ)。セッションが確立されると、データベース・クライアントは、データベース・サーバーによって送信された証明書が同じルート証明書によって署名されていることを確認します。

既知の認証局: よく知られたルート認証局を使用すると、ルート証明書がクライアント・システムのデフォルト証明書ストアにすでに格納されている可能性が最も高いという利点があります。一般的なルート証明書の場合、クライアントがルート証明書を格納するための追加のステップはありません。欠点は、通常、これに関連付けられたコストがあることです。

一方向TLS: 標準TLSセッションでは、サーバーのみがクライアントに証明書を提供し、自身を認証します。クライアントは、サーバーに対して自身を認証するために個別のクライアント証明書を必要としません(HTTPSセッションの確立方法と同様)。データベースにはサーバー証明書を格納するためのウォレットが必要ですが、クライアントに必要なのはサーバー証明書の署名に使用されるルート証明書のみです。

双方向TLS(相互TLS、mTLSとも呼ばれる): mTLSでは、クライアントとサーバーの両方がアイデンティティ証明書を持ち、相互に提示します。ほとんどの場合、同じルート証明書がこれらの証明書の両方に署名するため、データベース・サーバーおよびクライアントで同じルート証明書を使用して他の証明書を認証できます。mTLSは、ユーザー・アイデンティティが証明書を介してデータベース・サーバーによって認証されるため、ユーザーの認証に使用されることがあります。これは、IAMトークンを渡すためには不要ですが、IAMトークンを渡すときに使用できます。

ウォレットを持つクライアント: mTLSを使用してクライアント証明書を格納する場合は、クライアント・ウォレットが必須です。ただし、ルート証明書は、同じウォレットまたはシステムのデフォルト証明書ストアのいずれかに格納できます。

ウォレットのないクライアント: TLSを次の条件で使用する場合、クライアントはウォレットなしで構成できます:
  1. クライアントに独自の証明書がない一方向TLSが構成されています。
  2. データベース・サーバー証明書に署名したルート証明書は、システムのデフォルト証明書ストアに格納されています。サーバー証明書が一般的な認証局によって署名されている場合、ルート証明書はすでに存在している可能性があります。自己署名証明書の場合は、クライアント・ウォレットを使用しないように、システムのデフォルト証明書ストアにルート証明書をインストールする必要があります。

前述のオプションを含むデータベース・クライアントとデータベース・サーバーの間のTLSを構成する方法の詳細は、トランスポート・レイヤー・セキュリティ認証の構成を参照してください。

自己署名証明書の使用を選択する場合および追加のウォレット関連のタスクについては、データベース・セキュリティ・ガイドのorapkiコマンドライン・インタフェース(CLI)のリファレンス・ガイドを参照してください。公開キー・インフラストラクチャ(PKI)要素の管理を参照してください。

外部アイデンティティ・プロバイダの変更

このトピックでは、ベース・データベース・サービスで外部アイデンティティ・プロバイダを集中管理ユーザー(CMU)からOCI IAM認証および認可に、またはその逆に変更する手順について説明します。

ユーザーのOCI IAM認証および認可は、新規にプロビジョニングされたデータベースに対してデフォルトでは有効になっていません。外部認証のもう1つのオプションは、集中管理ユーザーとActive Directoryの組合せ(CMU-AD)を使用することです。ある時点において有効化できる外部認証スキームは1つのみです。

OCI IAM認証および認可の有効化

OCI IAMの認証および認可を有効にするには、次のステップを実行します。

  1. ALTER SYSTEMコマンドを使用して、OCI IAMの認証および認可を有効にします。
    ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=OCI_IAM SCOPE=BOTH;
  2. IDENTITY_PROVIDER_TYPEシステム・パラメータの値を確認します。
    SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
    NAME                   VALUE   
    ---------------------- ------- 
    identity_provider_type OCI_IAM 
  3. IDENTITY_PROVIDER_CONFIGパラメータが設定されているかどうかを確認します。
    SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_config';
  4. IDENTITY_PROVIDER_CONFIGパラメータが設定されている場合は、このパラメータをリセットします。
    ALTER SYSTEM RESET IDENTITY_PROVIDER_CONFIG SCOPE=BOTH;

OCI IAM認証および認可の無効化

OCI IAMの認証および認可を無効にするには、次のステップを実行します。

  1. ALTER SYSTEMコマンドを使用してOCI IAM統合を無効化します。
    ALTER SYSTEM RESET IDENTITY_PROVIDER_TYPE SCOPE=BOTH;

CMU-ADの有効化

次のステップを実行して、Active Directory (AD)ユーザーがCMUを使用してデータベースに接続できるようにします:

  1. OCI IAM認証および認可の無効化の説明に従って、IAM統合を無効にします。
  2. Microsoft Active Directoryによる集中管理ユーザーの構成の説明に従って、CMU-ADを構成します。

CMU-ADの無効化

CMU-ADを無効にするには、次のステップを実行します:

  1. ALTER SYSTEMコマンドを使用してCMU-ADを無効化します。
    ALTER SYSTEM SET LDAP_DIRECTORY_ACCESS = 'NONE';

OCI IAM認証および認可の再有効化

OCI IAM認証および認可を使用してIAMユーザーがデータベースに接続できるようにするには、次のステップを実行します:

  1. CMU-ADの無効化の説明に従って、CMU-ADを無効にします。
  2. OCI IAM認証および認可の有効化の説明に従って、OCI IAM認証および認可を有効にします。

IAMユーザーのIAMグループおよびポリシーの作成

このトピックでは、IAMグループのポリシー・ステートメントを記述して、OCIリソース(特にデータベース・インスタンス)へのIAMユーザー・アクセスを有効にするステップについて説明します。

ポリシーは、特定のリソースにアクセスできるユーザーとその方法を指定するステートメントのグループです。アクセスは、テナンシ全体、コンパートメント内のデータベースまたは個々のデータベースに対して付与できます。つまり、特定のコンパートメント内の特定のタイプのリソースへの特定のアクセス・タイプを特定のグループに付与するポリシー・ステートメントを記述します。

ノート:

IAMトークンを使用してデータベースにアクセスするには、ポリシーを定義する必要があります。IAMデータベース・パスワードを使用してデータベースにアクセスする場合、ポリシーは不要です。

IAMユーザーがIAMトークンを使用してデータベースに接続できるようにするには:

  1. グループを作成し、そのグループにユーザーを追加して、OCI IAMの前提条件を実行します。

    たとえば、グループsales_dbusersを作成します。

    詳細は、グループの管理を参照してください。

  2. OCIリソースへのアクセスを有効にするポリシー・ステートメントを記述します。

    1. OCIコンソールで、「アイデンティティとセキュリティ」をクリックし、「ポリシー」をクリックします。
    2. 書込みポリシーには、「ポリシーの作成」をクリックし、「名前」および「説明」を入力します。
    3. ポリシー・ビルダーを使用してポリシーを作成します。

      たとえば、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' 
    4. 「Create」をクリックします。

      ポリシーの詳細は、ポリシーの管理を参照してください。

ノート:

ベース・データベース・サービスのデータベースでIAMユーザーで使用するポリシーを作成するには、次が必要です。

  • ポリシーでは、テナンシ全体またはコンパートメント内のデータベース・インスタンスへのアクセスをIAMユーザーに許可したり、単一のデータベース・インスタンスにアクセスを制限したりできます。

  • インスタンス・プリンシパルまたはリソース・プリンシパルを使用してデータベース・トークンを取得し、アプリケーションからデータベース・インスタンスへの接続を確立できます。インスタンス・プリンシパルまたはリソース・プリンシパルを使用する場合は、動的グループをマップする必要があります。したがって、インスタンス・プリンシパルとリソース・プリンシパルを排他的にマップすることはできません。共有マッピングを使用して、インスタンスまたはリソース・インスタンスをIAM動的グループに入れることによってのみ、マッピングすることができます。

    動的グループを作成し、作成したポリシーで動的グループを参照してOCIにアクセスできます。

    詳細は、動的グループの管理を参照してください。

IAMユーザーの追加

IAMユーザーを追加してデータベースへのアクセスを許可するには、CREATE USERまたはALTER USER文(IDENTIFIED GLOBALLY AS句を使用)を使用して、データベース・グローバル・ユーザーをIAMグループまたはユーザーにマップします。

データベース・インスタンスに対するIAMユーザーの認可は、データベースのグローバル・ユーザー(スキーマ)をIAMユーザーにマップする(排他的マッピング)か、IAMグループにマップする(共有スキーマ・マッピング)ことで機能します。

データベース・インスタンスでのIAMユーザーの認可:

次のステップを実行して、データベース・インスタンスでIAMユーザーを認可します。

  1. IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要なCREATE USERおよびALTER USERシステム権限があります)。
  2. 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のユーザーは、IAM資格証明を使用してデータベースにログインできます(sales_groupグローバル・ユーザーの共有マッピングを使用)。

    次の例に、デフォルト以外のドメインsales_domainでこれを実現する方法を示します:

    CREATE USER shared_sales_schema IDENTIFIED GLOBALLY AS 
        'IAM_GROUP_NAME=sales_domain/db_sales_group';
  3. 他のIAMグループまたはユーザーの追加のグローバル・ユーザー・マッピングを作成する場合は、各IAMグループまたはユーザーについて次のステップに従います。

ノート:

IDENTIFIED GLOBALLYではないデータベース・ユーザーは、データベースがIAM認証に対して有効化されている場合でも、以前と同様にログインできます。

ローカルIAMユーザーのOracle Databaseグローバル・ユーザーへの排他的マップ:

次のステップを実行して、ローカルIAMユーザーをOracle Databaseグローバル・ユーザーに排他的にマップします。

  1. IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要なCREATE USERおよびALTER USERシステム権限があります)。
  2. 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グループにマップします。

  1. IAMの使用が有効になっているデータベースにADMINユーザーとしてログインします(ADMINユーザーには、このステップに必要なCREATE USERおよびALTER USERシステム権限があります)。
  2. 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で認可されます。

  3. GRANT文を使用して、必要な権限やその他のロールをグローバル・ロールに付与します。
    GRANT CREATE SESSION TO export_role;
    GRANT DWROLE TO export_role;
  4. 既存のデータベース・ロールを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つの方法のいずれかで使用できます。

  1. IAMユーザーは、データベースへのアクセス時にIAMユーザー名およびIAMデータベース・パスワードを入力できます。デフォルトでは、データベース・クライアントはデータベースとの通常のパスワード認証メカニズムに従い、データベースはIAMからIAMデータベース・パスワード・ベリファイアを取得します。
  2. データベース・クライアントは、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データベース・トークンを使用するには、Oracle Databaseクライアント19.16以上が必要です(21cではありません)。一部のOracle Databaseクライアント21.5以上では、IAMデータベース・トークン機能が制限されています(完全ではありません)。

ノート:

データベース・インスタンスが制限モードの場合、ADMINなどのRESTRICTED SESSION権限を持つユーザーのみがデータベースに接続できます。

IAMを使用したデータベース・インスタンスへの接続について

IAMユーザーは、IAMデータベース・パスワード・ベリファイアまたはIAMトークンを使用してデータベース・インスタンスに接続できます。

IAMデータベース・パスワード・ベリファイアの使用は、データベース・パスワード認証プロセスと似ています。ただし、パスワード・ベリファイア(パスワードの暗号化されたハッシュ)がデータベースに格納されるかわりに、ベリファイアはOCI IAMユーザー・プロファイルの一部として格納されます。

2つ目の接続方法は、データベースにIAMトークンを使用します。トークンベース・アクセスの使用は、ベース・データベース・サービスのOracle Databaseなどのクラウド・リソースに適しています。トークンは、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.oratnsnames.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のクライアント接続を構成します。

  1. IAMユーザー・アカウントがあることを確認します。
  2. IAM管理者およびデータベース管理者に問い合せて、コンパートメントまたはテナンシ内のデータベースへのアクセスを許可するポリシーがあり、データベース内のグローバル・スキーマにマップされていることを確認します。
  3. アプリケーションまたはツールが直接IAM統合をサポートしていない場合は、OCI CLIをダウンロード、インストールおよび構成します。OCI CLIのインストールおよび構成の詳細は、クイックスタートを参照してください。
  4. OCI CLI構成の一部としてAPIキーを設定し、デフォルト値を選択します。
    1. IAMユーザーのAPIキー・アクセスを設定します。
    2. db-tokenを取得します。たとえば次のようにします。
      • OCI CLIを使用して、API-keydb-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

    詳細は、必要なキーとOCIDを参照してください。

  5. この構成は、Oracle Database 19cクライアントでのみ機能します。このクライアントに最新リリース更新を使用していることを確認します。

    ノート:

    Oracle Databaseクライアント・リリース21cでは、IAMトークン機能が制限されています。
  6. 既存のプロセスに従ってデータベースからウォレットをダウンロードし、SQL*Plusで使用する構成手順に従います。
    1. sqlnet.oraSSL_SERVER_DN_MATCH=ONを検索して、DN一致が有効であることを確認します。
    2. TOKEN_AUTH=OCI_TOKENsqlnet.oraファイルに追加して、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_AUTHsqlnet.oraファイルまたは接続文字列のいずれかですでに設定されているため、データベース・クライアントはdb-tokenを取得するようにすでに構成されています。データベース・クライアントは、db-tokenを取得し、秘密キーを使用して署名してから、トークンをデータベースに送信します。スラッシュ(/)のかわりにIAMユーザー名とIAMデータベース・パスワードが指定されている場合、次のパラメータが指定されていないかぎり、データベース・クライアントはdb-tokenではなくパスワードを使用して接続します: PASSWORD_AUTH = OCI_TOKEN。これは、IAMユーザー名およびIAMデータベース・パスワードを使用して、IAMからトークンを取得するようにデータベース・クライアントに指示します。PASSWORD_AUTHの設定に加えて、OCI_IAM_URLOCI_TENANCYおよびオプションでOCI_COMPARTMENTおよびOCI_DATABASEも設定する必要があります。

インスタンス・プリンシパルを使用したIAM認証によるデータベースへのアクセス

ADMINユーザーがデータベースでOCI IAMを有効にすると、アプリケーションはインスタンス・プリンシパルを使用してOCI IAMデータベース・トークンを介してデータベースにアクセスできます。

詳細は、インスタンス・プリンシパルを使用したOracle Cloud Infrastructure APIへのアクセスを参照してください。

プロキシ認証の構成

プロキシ認証により、IAMユーザーは、アプリケーションのメンテナンスなどのタスクのためにデータベース・スキーマにプロキシできます。

プロキシ認証は、通常、実際のユーザーを認証し、アプリケーションを管理するためにスキーマ権限およびロールを持つデータベース・スキーマの使用を認可するために使用されます。アプリケーション・スキーマ・パスワードの共有などの代替方法は、安全性が低いと考えられ、実際にどのユーザーがアクションを実行したかを監査できません。

ユース・ケースとしては、アプリケーション・データベース管理者である名前付きIAMユーザーが資格証明を使用して認証し、データベース・スキーマ・ユーザー(hrappなど)にプロキシするような環境が考えられます。この認証により、IAM管理者は、アプリケーションのメンテナンスを実行するためにhrapp権限およびロールをユーザーhrappとして使用でき、認証にはIAM資格証明を使用できます。アプリケーション・データベース管理者は、データベースにサインインし、アプリケーション・スキーマにプロキシしてこのスキーマを管理できます。

パスワード認証とトークン認証の両方の方法にプロキシ認証を構成できます。

IAMユーザーのプロキシ認証の構成

IAMユーザーにプロキシ認証を構成するには、IAMユーザーにすでにグローバル・スキーマへのマッピング(排他的マッピングまたは共有マッピング)がある必要があります。IAMユーザーのプロキシ先の個別のデータベース・スキーマが使用可能である必要もあります。

このタイプのユーザーがあることを確認したら、IAMユーザーにプロキシを許可するようにデータベース・ユーザーを変更します。

  1. ALTER USERシステム権限を持つユーザーとしてデータベース・インスタンスにログインします。
  2. 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_string

IAMユーザー・プロキシ認証の検証

パスワード認証方法とトークン認証方法の両方についてIAMユーザー・プロキシ構成を検証できます。

  1. CREATE USERおよびALTER USERシステム権限を持つユーザーとして、データベース・インスタンスにログインします。
  2. 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認証済ユーザーでのデータベース・リンクの使用

データベース・リンクを使用して、あるデータベース・インスタンスから別のデータベース・インスタンスにOCI IAMユーザーとして接続できます。

接続ユーザーまたは固定ユーザーのデータベース・リンクを使用して、OCI IAMユーザーとしてデータベースに接続できます。

ノート:

現在のユーザー・データベース・リンクでは、OCI IAMユーザーとしてのベース・データベース・サービスのデータベースへの接続はサポートされていません。
  • 接続ユーザー・データベース・リンク: 接続ユーザー・データベース・リンクの場合、IAMユーザーは、データベース・リンクによって接続されたソース・データベースとターゲット・データベースの両方のスキーマにマップされている必要があります。データベース・パスワード・ベリファイアまたはIAMデータベース・トークンを使用して、接続ユーザー・データベース・リンクを使用できます。

  • 固定ユーザー・データベース・リンク: 固定ユーザー・データベース・リンクは、データベース・ユーザーまたはIAMユーザーを使用して作成できます。IAMユーザーを固定ユーザー・データベース・リンクとして使用する場合、IAMユーザーはターゲット・データベースにスキーマ・マッピングを持っている必要があります。データベース・リンクのIAMユーザーは、パスワード・ベリファイアでのみ構成できます。

IAM認証の無効化

次に示すように、ALTER SYSTEMコマンドを使用して、データベース・インスタンスでIAMユーザー・アクセスを無効にできます:

ALTER SYSTEM RESET IDENTITY_PROVIDER_TYPE SCOPE=BOTH;

リソースからIAMへのアクセスも更新する場合は、IAMグループおよびそれらのリソースからのIAMへのアクセスを許可するように設定したポリシーを削除または変更する必要があります。