はじめに
Autonomous Databaseではマルチクラウド環境向けの様々な機能が実装されています。
先日の機能強化で、Azure Key Vault、AWS Secrets Manager、GCP Secret Managerといった各クラウドベンダーのシークレット管理サービスに格納されたシークレットを使用してクレデンシャルが作成できるようになりました。
そこで今回は、Google Cloud Secret Managerに格納されているシークレットを使用してクレデンシャルを作成し、そのクレデンシャルを用いてAutonomous DatabaseからAmazon S3にアクセスしてみました。
AWS Secrets Managerに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。
Azure Key Vaultに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。
1. Googleサービスアカウントを使用した認証の有効化
Autonomous Databaseにadminユーザとしてアクセスします。
[opc@tools ~]$ sql admin/Demo#1Demo#1@adb
SQLcl: Release 23.2 Production on Mon Nov 06 09:58:33 2023
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Last Successful login time: Mon Nov 06 2023 09:58:34 +09:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL>
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを使用して、Googleサービスアカウントを使用した認証を有効化します。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
3 provider => 'GCP');
4 END;
5* /
PL/SQLプロシージャが正常に完了しました。
SQL>
Autonomous DatabaseのGoogleサービスアカウントを確認します。
SQL> SELECT * FROM CLOUD_INTEGRATIONS WHERE param_name = 'gcp_service_account';
PARAM_NAME PARAM_VALUE
______________________ _____________________________________________________________
gcp_service_account GCP-SA-XXXXX-XXXXX@gcp-pa-project1.iam.gserviceaccount.com
SQL>
2. GCP SecretManagerのシークレットの作成とAutonomous Databaseへのアクセス権の付与
GCPのコンソールにアクセスして、Secret Managerに移動し、「シークレットを作成」をクリックします。
シークレットの名前とシークレットの値を入力して、シークレットを作成します。
ここではシークレットの名前を「MyGCPSecret」とし、シークレットの値としてS3バケットにアクセス可能なAWS IAMユーザのシークレット・アクセスキーを入力します。
「プリンシパルの追加」の欄の新しいプリンシパルに1.で確認したAutonomous DatabaseのGoogleサービスアカウントの値を入力します。
「ロールを割り当てる」の欄のロールには「Secret Managerのシークレットアクセサー」を選択して入力します。
入力が完了したら、「保存」をクリックします。
3. GCP Secret Managerに保存されているシークレットを使用したクレデンシャルの作成
BEGIN DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、GCP Secret Managerに保存されているシークレットを用いてクレデンシャルを作成します。
今回は、AWS S3にアクセスするためのクレデンシャルS3_CRED_USING_GCP_SECRETを作成するので、
paramsのusernameに、S3バケットにアクセス可能なAWS IAMユーザのアクセスキー、
paramsのsecret_idに、AWS IAMユーザのシークレット・アクセスキーを格納したGCP Secret Managerのシークレット名、
paramsのgcp_project_idに、GCPのプロジェクトID
を指定しました。
SQL> BEGIN DBMS_CLOUD.CREATE_CREDENTIAL(
2 credential_name => 'S3_CRED_USING_GCP_SECRET',
3 params => JSON_OBJECT(
4 'username' value 'XXXXXXXXXXXXXXXXXXXX', -- AWS IAMユーザのAccess Key
5 'secret_id' value 'MyGCPSecret', -- GCP Secret Managerのシークレット名
6 'gcp_project_id' value 'xxxxx-xxx-XXXXXX' )); -- GCPのプロジェクトID
7 END;
8* /
PL/SQLプロシージャが正常に完了しました。
SQL>
クレデンシャルS3_CRED_USING_GCP_SECRETが作成できました。
4. クレデンシャルを使用したS3へのアクセス
GCP Secret Managerに保存されているシークレットを使用して作成したクレデンシャルを使って、S3バケットにアクセスしてみます。
SQL> SELECT object_name
2 FROM DBMS_CLOUD.LIST_OBJECTS(
3 credential_name => 'S3_CRED_USING_GCP_SECRET',
4 location_uri => 'https://s3.ap-northeast-1.amazonaws.com/bucketname/foldername/'
5* );
OBJECT_NAME
_______________________
employee1.csv
employee1.csv.gz
employee2.csv
employee2.csv.gz
employee20231031.csv
employee20231101.csv
employee3.csv
7行が選択されました。
SQL>
GCP Secret Managerに保存されているシークレットを使用して作成したクレデンシャルを使って、S3バケットにアクセスできました。
参考情報
・Use Vault Secret Credential with GCP Secret Manager
・DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH Procedure
・DBMS_CLOUD.CREATE_CREDENTIAL Procedure