1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OCI]Azure ADのサービス・プリンシパルを使用してAutonomous DatabaseからAzure Blob Storageにアクセスし、データを参照してみた

Last updated at Posted at 2022-10-17

1. Azure Active DirectoryのテナントIDの確認

Azureポータルにアクセスして、Azure Active DirectoryのテナントIDを確認し、メモしておきます。
スクリーンショット 2022-10-17 16.32.08.png

2. Azure Blob Storageの準備

Azureポータルで「ストレージアカウント」に移動します。
スクリーンショット 2022-10-17 17.44.05.png
左のメニューの「データストレージ」にある「コンテナー」をクリックします。
スクリーンショット 2022-10-17 17.44.53.png
「+コンテナー」をクリックします。
スクリーンショット 2022-10-17 17.48.16.png
作成するコンテナーの名前(ここでは「container-for-autonomous-database」)を入力し、「作成」をクリックします。
スクリーンショット 2022-10-17 17.50.49.png
作成されたコンテナー名をクリックします。
スクリーンショット 2022-10-17 17.53.14.png
「アップロード」をクリックします。
スクリーンショット 2022-10-17 17.54.32.png
以下のようなファイル「testdata.txt」を作成します。

testdata.txt
1,Paul
2,John
3,George
4,Ringo

ファイルを選択し、「アップロード」をクリックします。
スクリーンショット 2022-10-17 17.56.41.png
コンテナー「container-for-autonomous-database」にファイル「testdata.txt」がアップロードされました。
スクリーンショット 2022-10-17 18.10.11.png

3. Azure ADのサービス・プリンシパルを使用した認証の有効化

adminユーザとして、Autonomous Databaseに接続します。

[opc@swingbench ~]$ sqlplus admin/Demo#1Demo#1@atp1_medium

SQL*Plus: Release 21.0.0.0.0 - Production on 木 10月 13 10:26:57 2022
Version 21.7.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 水 10月 12 2022 14:38:22 +09:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0
に接続されました。
SQL> 

Autonomous DatabaseでAzureのサービスアカウントを有効化するには、providerに'AZURE'、paramsのazure_tenantidにAzure Active DirectoryのテナントIDを指定してDBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを実行します。

BEGIN
    DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
        provider => 'AZURE',
        params   => JSON_OBJECT('azure_tenantid' value 'Azure ADのテナントID'));
END;
/

paramsのazure_tenantidに1.で確認したAzure Active DirectoryのテナントIDをセットして、DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを実行します。

SQL> BEGIN
  2      DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
  3          provider => 'AZURE',
  4          params   => JSON_OBJECT('azure_tenantid' value 'a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX')
  5      );
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL>

cloud_integrationsビューを検索して、設定に必要なazure_app_name、azure_consent_urlの値を確認し、メモしておきます。

SQL> set pagesize 20
SQL> set linesize 200
SQL> col param_name for a20
SQL> SELECT param_name, param_value FROM cloud_integrations WHERE param_name LIKE 'azure%';

PARAM_NAME
--------------------
PARAM_VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
azure_app_name
ADBS_APP_OCID1.AUTONOMOUSDATABASE.OC1.AP-TOKYO-1.ANXHILJRSSL65IQAWFH2EIJ5VHOBLXXXXXXXXXXXXXXXXXXXXXXXXXX

azure_consent_url
https://login.microsoftonline.com/a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX/oauth2/v2.0/authorize?client_id=f21dXXXX-d3XX-41XX-85XX-597c3bedXXXX&response_type=code&scope=User.read

azure_tenantid
a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX


SQL>

4. Azure ADの同意ページへのアクセス

ブラウザから、3.でコピーしたazure_concent_urlのURLにアクセスします。
「組織の代理として同意する」のチェックをオンにし、「承諾」をクリックします。
スクリーンショット 2022-10-14 11.20.25.png
これにより、Autonomous DatabaseがAzure ADにアプリケーションとして登録され、サービス・プリンシパルが利用できるようになります。

5. サービス・プリンシパルを使用したAzure Blob Storageへのアクセス許可

Azureポータルでストレージアカウントの概要画面に移動します。
スクリーンショット 2022-10-17 16.57.38.png
左のメニューから「アクセス制御(IAM)」に移動します。
スクリーンショット 2022-10-17 16.57.38のコピー.png
「追加」をクリックし、「ロールの割り当ての追加」をクリックします。
スクリーンショット 2022-10-17 17.16.56.png
検索窓に「ストレージ」と入力し、表示された「ストレージ BLOB データ共同作成者」を選択して、「次へ」をクリックします。
スクリーンショット 2022-10-17 17.02.11.png
「メンバーを選択する」をクリックします。
スクリーンショット 2022-10-17 17.05.53.png
「選択」欄に3.でコピーしたazure_app_nameの値を入力し、表示されたアプリケーションをクリックして選択します。
スクリーンショット 2022-10-17 17.08.23.png
「選択」をクリックします。
スクリーンショット 2022-10-17 17.10.11.png
ウインドウ下部の「レビューと割り当て」をクリックします。
スクリーンショット 2022-10-17 17.11.10.png
設定内容を確認し、問題がなければウインドウ下部の「レビューと割り当て」をクリックして、ロールの割り当てを追加します。
スクリーンショット 2022-10-17 17.12.54.png

6. サービス・プリンシパルを用いたAzure Blob Storageへのアクセス

準備が整ったので、サービス・プリンシパルを使用して、Autonomous DatabaseからAzure Blob Storageのコンテナーにアクセスし、バケット内のオブジェクト一覧を取得してみます。

Azure Blob Storageのコンテナー内のオブジェクト一覧を取得するには、以下のような構文でDBMS_CLOUD.LIST_OBJECTSファンクションを使用します。
クレデンシャルには、「AZURE$PA」を指定します。
location_uriには、以下のような形式でAzure Blob Storageのコンテナーを指定します。
https://ストレージアカウント名.blob.core.windows.net/コンテナー名/

SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
           credential_name => 'AZURE$PA',
           location_uri    => 'https://ストレージアカウント名.blob.core.windows.net/コンテナー名/');

コンテナーのURIを指定して実行してみます。

SQL> SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
  2      credential_name => 'AZURE$PA',
  3      location_uri    => 'https://storageaccountofmine.blob.core.windows.net/container-for-autonomous-database/'
  4  );

OBJECT_NAME
--------------------------------------------------------------------------------
testdata.txt

SQL>

サービス・プリンシパルを使用してAzure Blob Storageのコンテナーにアクセスし、先ほどアップロードしたtestdata.txtが格納されていることが確認できました。

次に、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャでAzure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表を作成し、testdata.txt内のデータをAutonomous Databaseから参照してみます。

file_uri_listには、以下のような形式でバケット内のオブジェクト(ファイル)を指定します。
https://ストレージアカウント名.blob.core.windows.net/コンテナー名/ファイル名

BEGIN
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'作成するテーブル名',
        credential_name =>'AZURE$PA',
        file_uri_list =>'https://ストレージアカウント名.blob.core.windows.net/コンテナー名/ファイル名',
        format => json_object('delimiter' value ','), -- ファイル内の列のデリミタを指定
        column_list => 'ID NUMBER, name VARCHAR2(20)' -- 表の列定義を指定
    );
END;
/

テーブル名をmember_azureとし、オブジェクト(ファイル)のURIを指定して、上記のSQLを実行してみます。

SQL> BEGIN
  2      DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
  3          table_name =>'member_azure',
  4          credential_name =>'AZURE$PA',
  5          file_uri_list =>'https://storageaccountofmine.blob.core.windows.net/container-for-autonomous-database/testdata.txt',
  6          format => json_object('delimiter' value ','),
  7          column_list => 'ID NUMBER, name VARCHAR2(20)'
  8      );
  9  END;
 10  /

PL/SQLプロシージャが正常に完了しました。

SQL>

サービス・プリンシパルを使用して、Azure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表「member_azure」が作成できました。

外部表「member_azure」の内容を確認してみます。

SQL> SELECT * FROM member_azure;

	    ID NAME
---------- --------------------
	     1 Paul
	     2 John
	     3 George
	     4 Ringo

SQL>

Azure ADのサービス・プリンシパルを使用して作成した外部表「member_azure」経由で、Azure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」の内容を参照できることが確認できました。

7. Autonomous DatabaseでAzureのサービスプリンシパルを無効化

Autonomous DatabaseでAzureのサービスアカウントを無効にするには、providerに'AZURE'を指定してDBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTHプロシージャを実行します。

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

参考資料

Use Azure Service Principal to Access Azure Resources

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?