はじめに
Autonomous Databaseではマルチクラウド環境向けの様々な機能が実装されています。
先日の機能強化で、Azure Key Vault、AWS Secrets Manager、GCP Secret Managerといった各クラウドベンダーのシークレット管理サービスに格納されたシークレットを使用してクレデンシャルが作成できるようになりました。
そこで今回は、Azure Key Vaultに格納されているシークレットを使用してクレデンシャルを作成し、そのクレデンシャルを用いてAutonomous DatabaseからAzure Blob Storageにアクセスしてみました。
AWS Secrets Managerに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。
Google Cloud Secret Managerに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。
1. Azure Key Vaultとシークレットの作成
Azureポータルにアクセスし、Key vaults(日本語環境では「キーコンテナー」)に移動します。
「Create」をクリックし、Key Vaultを作成します。
ここでは「MyAzureKeyVault777」という名前のKey Vaultを作成しました。
作成したKey Vault内にシークレットを作成します。
ここでは「StorageAccountAccessKey」という名前のシークレットを作成し、シークレットの値としてストレージアカウントのアクセスキーを設定しました。
Key Vault「MyAzureKeyVault777」内にシークレット「StorageAccountAccessKey」が作成できました。
2. Azureサービス・プリンシパルによる認証の有効化
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを使用して、Azureサービス・プリンシパルによる認証を有効化します。
providerにAZUREを指定します。
paramsのazure_tenantidにはAzureのテナントIDを指定します。
AzureのテナントIDはMicrosoft Entra IDのOverviewの画面で確認できます。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
3 provider => 'AZURE',
4 username => 'admin',
5 params => JSON_OBJECT('azure_tenantid' value 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'));
6 END;
7* /
PL/SQLプロシージャが正常に完了しました。
SQL>
以下のSQLで、Azureサービス・プリンシパルの設定に必要な情報を確認し、それぞれの値をメモしておきます。
SQL> SELECT param_name, param_value FROM CLOUD_INTEGRATIONS
2* WHERE param_name LIKE 'azure%';
PARAM_NAME PARAM_VALUE
____________________ _________________________________________________________________________________________________________________________________________________________________________________
azure_app_name ADBS_APP_OCID1.AUTONOMOUSDATABASE.OC1.AP-TOKYO-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
azure_consent_url https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/v2.0/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&response_type=code&scope=User.read
azure_tenantid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SQL>
ブラウザからazure_consent_urlのURLにアクセスし、「承諾」をクリックします。
Azureポータルで、Key vaultsに移動します。
作成したKey Vaultのアクセスポリシーの画面に移動し、「Create」をクリックします。
シークレットパーミッションのGetにチェックを入れ、「Next」をクリックします。
プリンシパルにAutonomous Databaseのプリンシパルを設定します。
ADBSと入力して検索し、2.で確認したazure_app_nameの値と同じ名前のプリンシパルを設定します。
設定内容を確認し、問題がなければ「Create」をクリックしてアクセス・ポリシーを作成します。
Autonomous DatabaseにKey Vault「MyAzureKeyVault777」からシークレットを取得することを可能にするポリシーが作成されました。
3. Azure Key Vaultに保存されているシークレットを使用したクレデンシャルの作成
Azure Key Vaultに保存されているシークレットを使用したクレデンシャルを作成します。
ここではAzure Blob Storageにアクセスするためのクレデンシャル「AZURE_SECRET_CRED」を作成します。
usernameにストレージ・アカウント名、secret_idにストレージ・アカウントのアクセスキーを保存しているAzure Key Vault内のシークレットの名前、azure_vault_nameにシークレットを保存しているKey Vaultの名前を指定します。
SQL> BEGIN DBMS_CLOUD.CREATE_CREDENTIAL(
2 credential_name => 'AZURE_SECRET_CRED',
3 params => JSON_OBJECT(
4 'username' value 'myblobstorageaccount777', -- ストレージ・アカウント名
5 'secret_id' value 'StorageAccountAccessKey', -- シークレットの名前
6 'azure_vault_name' value 'MyAzureKeyVault777' )); -- Azure Key Vaultの名前
7 END;
8* /
PL/SQLプロシージャが正常に完了しました。
SQL>
3. Azure Key Vaultに保存されているシークレットを使用したクレデンシャルの使用
Azure Key Vaultに保存されているシークレットを使用して作成したクレデンシャルで、Azure Blob Storageにアクセスしてみます。
SQL> SELECT object_name FROM
2 DBMS_CLOUD.LIST_OBJECTS(
3 'AZURE_SECRET_CRED',
4 'https://myblobstorageaccount777.blob.core.windows.net/mycontainer/'
5* );
OBJECT_NAME
______________
zaiko.csv
SQL>
Azure Key Vaultに保存されているシークレットを使用して作成したクレデンシャルでAzure Blob Storageにアクセスできました。
参考情報
・Use Vault Secret Credential with Azure Key Vault
・ENABLE_PRINCIPAL_AUTH Procedure
・CREATE_CREDENTIAL Procedure