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.

RDS for OracleとAWS Secrets managerの統合を試してみた

Posted at

はじめに

RDSの設定変更等を実施していたところ、新しく Manage master credentials in AWS Secrets Manager -new というチェックボックスがでてきました。
確認してみたところ、2022/12/22 に発表された Amazon RDS と AWS Secrets Manager の統合を発表 によるものだったようです。
今までユーザのクレデンシャルは統合することもできましたが、マスターユーザについては今回のアップデートで統合されるようになったようです。

ということで、マスターユーザのクレデンシャルのSecrets Managerとの統合を試してみました。

RDS for Oracleのマスターユーザのシークレットの作成

RDSの変更画面で以下のようなチェックボックスができてますので、チェックします。
image.png

変更の適用について確認されますので、「すぐに適用」で変更します。
なお、本変更は「すぐに適用」のみになります。
02-key-on-2.PNG

適用すると、以下のようなシークレットが作成されます。
image.png

シークレットの利用

EC2からSQL*PLUSでTESTDB02 というRDSにADMINユーザで接続します。
まずはシークレットの確認を実施すると、当然のことながら権限不足で確認できません。

シークレットの確認
$ aws secretsmanager get-secret-value --secret-id rds\!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --region ap-northeast-1 | jq .SecretString | jq fromjson

An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/CustomSSMRole/i-xxxxxxxxxxxxxxxxx is not authorized to perform: secretsmanager:GetSecretValue on resource:rds!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx because no identity-based policy allows the secretsmanager:GetSecretValue action

EC2にSecretへのアクセス権限を付けます(EC2にアタッチされているロールにSecretを参照できるポリシーを付与します)。
以下は例ですが、GetSecretValueとGetRandomPasswordがあれば大丈夫と思います。

付与するポリシー例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:rds!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxxxx"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "secretsmanager:GetRandomPassword",
            "Resource": "*"
        }
    ]
}

改めてシークレットの確認をすると、今度はアクセスできます。

シークレットの確認
$ aws secretsmanager get-secret-value --secret-id rds\!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --region ap-northeast-1 | jq .SecretString | jq fromjson
{
  "username": "admin",
  "password": "xxxxxxxxxxxxxxxxxxxxxxxxxx"
}

該当のシークレットを設定し、SQL*PLUSで改めて接続すると、無事接続できました。

SQL*PLUSからのシークレットを利用した接続
$ user=$(aws secretsmanager get-secret-value --secret-id rds\!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | jq .SecretString | jq fromjson | jq -r .username)
$ password=$(aws secretsmanager get-secret-value --secret-id rds\!db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | jq .SecretString | jq fromjson | jq -r .password)
$ sqlplus $user/$password@testdb02.xxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:1521/TESTDB02

SQL*Plus: Release 21.0.0.0.0 - Production on Sun Jan 29 04:57:13 2023
Version 21.8.0.0.0

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

Last Successful login time: Sat Dec 03 2022 09:58:14 +00:00

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

まとめ

このアップデートで、RDSへの接続情報を全てSecretsで管理することができるため、ユーザ/パスワード運用から脱して環境を利用することができるようになります。
ただ、ADMINユーザの接続自体はアプリから利用されることはないと思いますし、特定のEC2から(OS上の)どのユーザでもADMINで接続できることになるので、現行のセキュリティポリシーとの整合は確認して利用すべきと思います。(MFAつけるとか)

参考
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?