1
1

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.

Autonomous Database:AWS Secrets Managerに保存されているシークレットを使用してクレデンシャルを作成してみた

Last updated at Posted at 2023-11-02

はじめに

Autonomous Databaseではマルチクラウド環境向けの様々な機能が実装されています。
先日の機能強化で、Azure Key Vault、AWS Secrets Manager、GCP Secret Managerといった各クラウドベンダーのシークレット管理サービスに格納されたシークレットを使用してクレデンシャルが作成できるようになりました。

そこで今回は、AWS Secrets Managerに格納されているシークレットを使用してクレデンシャルを作成してみました。

Azure Key Vaultに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。

Google Cloud Secret Managerに格納されているシークレットを使用してクレデンシャルを作成する手順の記事はこちら。

1. AWS Secrets Managerへのシークレットの保存

AWSのコンソールにサインインして「Secrets Manager」に移動し、「新しいシークレットを保存する」をクリックします。
スクリーンショット 2023-11-02 17.49.55.png

シークレットのタイプとして「その他のシークレットのタイプ」を選択し、Autonomous Databaseで作成するクレデンシャルのパスワードとして使用する文字列をプレーンテキストとして入力します。

ここでは、S3にアクセス可能なAWS IAMユーザのシークレット・アクセスキーをシークレットに保存しました。
スクリーンショット 2023-11-02 17.50.55.png

シークレットの名前を入力します。
ここではMySecretとしました。
スクリーンショット 2023-11-02 17.51.41.png

ローテーションの設定画面では、そのまま「次」をクリックします。
スクリーンショット 2023-11-02 17.52.12.png

設定内容に問題がないことを確認したら、「保存」をクリックしてシークレットを保存します。
スクリーンショット 2023-11-02 17.52.32.png

シークレットが作成できたら、シークレットのARNをコピーしてメモしておきます。
スクリーンショット 2023-11-02 18.00.57.png

2. AWS IAMロールの作成に必要な情報の確認

以下のSQLでARNを確認します。

SQL> SELECT param_value FROM cloud_integrations
  2* WHERE param_name = 'aws_user_arn';

PARAM_VALUE                                 
___________________________________________ 
arn:aws:iam::XXXXXXXXXXXX:user/oraclearn    

SQL>

以下のSQLでAutonomous DatabaseのOCIDを確認します。

SQL> SELECT JSON_VALUE(cloud_identity, '$.DATABASE_OCID') AS adb_ocid FROM v$pdbs;

ADB_OCID                                                                                                
_______________________________________________________________________________________________________ 
OCID1.AUTONOMOUSDATABASE.OC1.AP-TOKYO-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    

SQL> 

3. AWS IAMロールの作成

AWSのコンソールにサインインし、「IAM」の「ロール」に移動します。

「ロールを作成」をクリックします。
スクリーンショット 2023-11-02 17.22.42.png

「信頼されたエンティティタイプ」として「AWSアカウント」を選択します。
「AWSアカウント」は「このアカウント」を選択します。
「外部IDを要求する」のチェックをオンにし、外部IDとしてAutonomous DatabaseのOCIDを入力します。
スクリーンショット 2023-11-02 17.26.39.png

そのまま「次へ」をクリックします。
スクリーンショット 2023-11-02 17.27.05.png

作成するロールの名前を入力し、「ロールの作成」をクリックします。
ここではロール名を「ROLE_for_ADB_using_Secret_Manager」としました。

スクリーンショット 2023-11-02 17.27.38.png

ロールが作成できたら、許可ポリシーを設定します。
「許可を追加」をクリックし、「インラインポリシーを作成」を選択します。
スクリーンショット 2023-11-02 17.36.35.png

このポリシーでは、Autonomous DatabaseにSecrets Managerに保存されているシークレットへの読み取りアクセスを許可するので、サービスとして「Secrets Manager」を選択し、「すべての読み取りアクション」のチェックをオンにします。
スクリーンショット 2023-11-02 17.37.35.png

リソースとして、シークレットのARNを指定し、「次へ」をクリックします。
スクリーンショット 2023-11-02 17.39.43.png

ポリシー名を入力し、「ポリシーの作成」をクリックします。
ここではポリシー名を「Policy_for_ADB_using_Secret_Manager」としました。
スクリーンショット 2023-11-02 17.40.59.png

作成したロールの信頼ポリシーのPrincipalを以下のように編集します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXXX:user/oraclearn" (<-2.で確認したARNの値に変更)
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "OCID1.AUTONOMOUSDATABASE.OC1.AP-TOKYO-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                }
            }
        }
    ]
}

以上でロールの設定が完了しました。

4.プリンシパル認証の有効化

DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを使用して、プリンシパル認証を有効化します。
providerとしてAWSを指定し、paramsのaws_role_arnには、3.で作成したロールのARNを指定します。

SQL> BEGIN
  2      DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
  3          provider => 'AWS',
  4          params => JSON_OBJECT(
  5              'aws_role_arn' value 'arn:aws:iam::XXXXXXXXXXXX:role/ROLE_for_ADB_using_Secret_Manager')
  6      );
  7  END;
  8* /

PL/SQL procedure successfully completed.

SQL> 

5. Secrets Managerに格納されているシークレットを使用したクレデンシャルの作成

DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、クレデンシャルを作成します。
paramsのsecret_idには1.で作成したシークレットのARNを指定します。

SQL> BEGIN
  2      DBMS_CLOUD.CREATE_CREDENTIAL(
  3          credential_name      => 'AWS_SECRET_CRED',
  4          params               => JSON_OBJECT(
  5               'username'   value 'XXXXXXXXXXXXXXXXXX', -- AWS IAMユーザのアクセスキー
  6               'secret_id'  value 'arn:aws:secretsmanager:ap-northeast-1:XXXXXXXXXXXX:secret:MySecret-XXXXXX') -- シークレット・アクセスキーを保存したシークレットのARN
  7      );
  8  END;
  9* /

PL/SQL procedure successfully completed.

SQL> 

Secrets Managerに格納されているシークレットを使用して作成したクレデンシャルを使用して、S3バケットにアクセスしてみます。

SQL> SELECT object_name FROM 
  2  DBMS_CLOUD.LIST_OBJECTS(
  3       'AWS_SECRET_CRED', 
  4       'https://s3.ap-northeast-1.amazonaws.com/bucket_name/'
  5* );

OBJECT_NAME             
_______________________ 
employee1.csv           
employee1.csv.gz        
employee2.csv           
employee2.csv.gz        
employee20231031.csv    
employee20231101.csv    
employee3.csv           

7 rows selected. 

SQL> 

Secrets Managerに格納されているシークレットを使用して作成したクレデンシャルを使用して、S3バケットにアクセスできました。

なお、シークレットを使用して作成するクレデンシャルは、ユーザ名/パスワード形式の認証が必要なところで利用可能ですので、データベース・リンクを作成する際のクレデンシャル等でも利用可能です。

6. 参考情報

Use Vault Secret Credentials
ENABLE_PRINCIPAL_AUTH Procedure
CREATE_CREDENTIAL Procedure

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?