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

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

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

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

ノート

Autonomous DatabaseをAzureサービス・プリンシパル認証で使用するには、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サービス・プリンシパル認証が有効になり、AzureアプリケーションがAutonomous Databaseに作成されます。

    指定したユーザーに、他のユーザーの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アプリケーションの同意の提供およびロールの割当て

Autonomous DatabaseからAzureリソースに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の説明が続きます
  3. 同意するには、「Accept」をクリックします。
  4. Microsoft Azureコンソールで、指定したAzureリソースへのアクセスを許可するために付与するロールを割り当てます。

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

    ノート

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

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

    11. 「選択」をクリックします
    12. 「Review + assign」をクリックします。
  5. 「レビューおよび割当」を再度クリックします。

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

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

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

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

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

Azureサービス・プリンシパルでDBMS_CLOUDプロシージャまたはファンクションを使用するには、資格証明名として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

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

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

Autonomous Database with Azureサービス・プリンシパルから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サービス・プリンシパルを有効にするステップを実行します。