Azureサービス・プリンシパルを使用したAzureリソースへのアクセス

Autonomous DatabaseでAzureサービス・プリンシパルを使用すると、データベースに独自の資格証明オブジェクトを作成して格納することなく、Azureリソースにアクセスできます。

Azureサービス・プリンシパルの有効化

Azureサービス・プリンシパル認証を有効にして、Autonomous Databaseが長期的な資格証明を提供せずにAzureサービスにアクセスできるようにします。

ノート

Azureサービス・プリンシパル認証でAutonomous Databaseを使用するには、Microsoft Azureアカウントが必要です。詳細は、Microsoft Azureを参照してください。

Autonomous DatabaseでAzureサービス・プリンシパル認証を有効にするには:

  1. Microsoft Azure Active DirectoryテナントIDを取得します。

    詳細は、「Azure Active DirectoryテナントIDの検索方法」を参照してください。

  2. DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHを使用してAzureサービス・プリンシパルを有効にします。

    たとえば:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'AZURE',
            username => 'adb_user',
            params   => JSON_OBJECT('azure_tenantid' value 'azure_tenantID'));
    END;
    /

    これにより、Azureサービス・プリンシパル認証が有効になり、Autonomous DatabaseにAzureアプリケーションが作成されます。

    指定したユーザーに、他のユーザーのAzureサービス・プリンシパルを有効にする権限を与える場合は、paramsパラメータgrant_optionTRUEに設定します。

    たとえば:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'AZURE',
            username => 'adb_user',
            params   => JSON_OBJECT('grant_option' value TRUE, 
                                    'azure_tenantid' value 'azure_tenantID'));
    END;
    /

    このコマンドを実行すると、adb_userは別のユーザーのAzureサービス・プリンシパルを有効にできます。たとえば、adb_userとして接続する場合は、次のコマンドを実行できます。

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'AZURE',
            username => 'adb_user2');
    END;
    /

詳細は、ENABLE_PRINCIPAL_AUTHプロシージャを参照してください。

Azureアプリケーション同意の提供およびロールの割当て

Azureサービス・プリンシパル認証を使用してAutonomous DatabaseからAzureリソースにアクセスするには、Azureアプリケーションに同意し、Azureリソースへのアクセスを許可するロールを割り当てる必要があります。

Azureアプリケーションの同意を提供し、ロールを割り当てるには、次のステップを実行します。

  1. Autonomous Databaseで、CLOUD_INTEGRATIONSを問い合せます。

    たとえば:

    SELECT param_name, param_value FROM CLOUD_INTEGRATIONS;
    
    PARAM_NAME        PARAM_VALUE
    --------------- ------------------------------------------------------------------------------------------------------------------------------------------
    azure_tenantid    29981886-6fb3-44e3-82ab-d870b0e8e7eb
    azure_consent_url https://login.microsoftonline.com/f8cdef31-91255a/oauth2/v2.0/authorize?client_id=d66f1b5-1250d5445c0b&response_type=code&scope=User.read
    azure_app_name    ADBS_APP_OCID1.AUTONOMOUSDATABASE.REGION1.SEA.ANZWKLJSZLYNB3AAWLYL3JVC4ICEXLB3ZG6WTCX735JSSY2NRHOBU4DZOOVA

    ビューCLOUD_INTEGRATIONSは、ADMINユーザーまたはDWROLEロールを持つユーザーが使用可能です。

  2. ブラウザで、azure_consent_urlパラメータで指定されたAzure同意URLを開きます。

    たとえば、ブラウザでURLをコピーして入力します。

    https://login.microsoftonline.com/f8cdef31-91255a/oauth2/v2.0/authorize?client_id=d66f1b5-1250d5445c0b&response_type=code&scope=User.read

    「リクエストされた権限」ページが開き、次のような同意リクエストが表示されます:

    azure_consent.pngの説明が続きます
    図azure_consent.pngの説明
  3. 同意を得るには、「同意」をクリックします。
  4. Microsoft Azureコンソールで、指定したAzureリソースへのアクセスを許可するために付与するロールを割り当てます。

    たとえば、Autonomous DatabaseからAzure Blob Storageにアクセスする場合は、Azureアプリケーション(サービス・プリンシパル)がAzure Blob Storageにアクセスできるようにロールを割り当てます。

    ノート

    Azure Blob Storageを使用するには、Azureストレージ・アカウントが必要です。Azureストレージ・アカウントがない場合は、ストレージ・アカウントを作成します。詳細は、ストレージ・アカウントの作成を参照してください。
    1. Microsoft Azureコンソールの「Azureサービス」で、「ストレージ・アカウント」を選択します。
    2. 「ストレージ・アカウント」で、サービス・プリンシパル・アクセス権を付与するストレージ・アカウントをクリックします。
    3. 左側で、「アクセス制御(IAM)」をクリックします。
    4. 最上部の領域で、「+追加」→「ロール割当ての追加」をクリックします。
    5. 検索領域にテキストを入力して、表示されるロールのリストを絞り込みます。たとえば、「Storage Blob」と入力して、「Storage Blob」を含む使用可能なロールを表示します。
    6. 付与するアクセスに適した1つ以上のロールを選択します。たとえば、「ストレージBLOBデータ・コントリビュータ」を選択します。
    7. 「次へ」をクリックします。
    8. 「ロール割当ての追加」「メンバー」で、「+メンバーの選択」をクリックします。
    9. 「メンバーの選択」で、選択フィールドに、ステップ1にリストされているazure_app_name (CLOUD_INTEGRATIONSビューのparam_value列)を入力します。
    10. アプリケーションを選択します。

      たとえば、ADBS_APP_OCID1.AUTONOMOUSDATABASE.REGION1.SEA.ANZWKLJSZLYNB3AAWLYL3JVC4ICEXLB3ZG6WTCX735JSSY2NRHOBU4DZOOVAをクリックします。

    11. 「選択」をクリックします。
    12. 「確認と割当」をクリックします。
  5. 「確認+割当」を再度クリックします。

    ロールを割り当てた後は、Azureでの伝播に最大5分かかる可能性があるため、待機する必要があります。

この例では、Azure Blob Storageにアクセスするためのロールを付与するステップを示します。他のAzureサービスへのアクセスを提供する場合は、Azureアプリケーション(サービス・プリンシパル)がAzureサービスにアクセスできるように、追加のAzureサービスに対して同等のステップを実行する必要があります。

Azureサービス・プリンシパルとDBMS_CLOUDの使用

DBMS_CLOUDコールを実行してAzureリソースにアクセスし、資格証明名をAZURE$PAとして指定すると、Azure側の認証はAzureサービス・プリンシパルを使用して行われます。

まだ実行していない場合は、必要な前提条件ステップを実行します。

DBMS_CLOUDプロシージャまたはファンクションをAzureサービス・プリンシパルで使用するには、資格証明名としてAZURE$PAを指定します。たとえば、Azureサービス・プリンシパル資格証明を使用して、次のようにAzure Blob Storageにアクセスできます。

SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('AZURE$PA', 'https://treedata.blob.core.windows.net/treetypes/');

OBJECT_NAME BYTES CHECKSUM                 CREATED              LAST_MODIFIED        
----------- ----- ------------------------ -------------------- -------------------- 
trees.txt      58 aCB1qMOPVobDLCXG+2fcvg== 2022-04-07T23:03:01Z 2022-04-07T23:03:01Z

「資格証明の作成および既存の表へのデータのコピー」に示すように、オブジェクト・ストレージへのアクセスに必要なステップを比較する場合は、ステップ1では、AZURE$PAというAzureサービス・プリンシパルを使用しているため、資格証明の作成は必要ありません。

Azureサービス・プリンシパルの無効化

Azureサービス・プリンシパルを使用したAutonomous DatabaseからのAzureリソースへのアクセスを無効にするには、DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTHを使用します。

Autonomous DatabaseでAzureサービス・プリンシパルを無効にするには:

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'AZURE',
        username => 'adb_user');
END;
/

provider値がAZUREで、usernameADMINユーザー以外のユーザーである場合、プロシージャは指定したユーザーから権限を取り消します。この場合、ADMINユーザーおよび他のユーザーは引き続きADMIN.AZURE$PAを使用でき、Autonomous Databaseインスタンス用に作成されたアプリケーションはインスタンスに残ります。

provider値がAZUREで、usernameADMINの場合、このプロシージャはAzureサービス・プリンシパル・ベースの認証を無効にし、Autonomous Databaseインスタンス上のAzureサービス・プリンシパル・アプリケーションを削除します。この場合、Azureサービス・プリンシパルを有効にする場合は、次を含むAzureサービス・プリンシパルを再度使用するために必要なすべてのステップを実行する必要があります。

詳細は、DISABLE_PRINCIPAL_AUTHプロシージャを参照してください。

Azureサービス・プリンシパルに関するノート

Azureサービス・プリンシパルを使用するためのノート。

  • Azureサービス・プリンシパルを使用したAutonomous Databaseインスタンスのクローニング: Azureサービス・プリンシパルが有効になっているインスタンスをクローニングする場合、Azureサービス・プリンシパル構成はクローンに継承されません。クローニングされたインスタンスでAzureサービス・プリンシパルを有効にする場合は、クローンでAzureサービス・プリンシパルを有効にするステップを実行します。