資格勉強では内容を知っているだけで、実際に触ったことがなかったため、今回は初めてAWS Secrets Managerの設定を行います。RDSの認証情報を管理するために利用します。
AWS SecretsManagerとは
AWS Secrets Managerは、データベースのユーザー名やパスワード、APIキー、OAuthトークンなどの機密情報を安全に保管・管理するサービスです。AWSリソース(例えばECSやLambda)は、適切なIAMロールを使ってSecrets Managerから認証情報を取得することができます。これにより、開発者がパスワードなどを手動で管理する必要がなく、セキュリティが向上します。
また、Secrets ManagerはLambdaと組み合わせることで、パスワードの定期ローテーションが可能です。
CloudFormationを使えば、シークレットの作成や管理を自動化でき、パスワードのランダム生成も行われるため、手動で入力する必要がないのはすごく便利ですね!
CloudFormationで作成する場合の注意点
RDSインスタンスなどのAWSリソースとSecrets Managerを統合する場合は、SecretTargetAttachmentの設定が必要です。これは、シークレットとリソースを関連付けるためのものなので忘れずに
AWSマネジメントコンソールを使う場合は、これらの設定がバックエンドで自動的に処理されるため、ユーザーが明示的に設定する必要がないとのこと
CloudFormationで作成されたシークレットの確認方法
AWS Secrets Managerのコンソール画面にアクセスし、確認したいシークレットを選択します。
Secret valueの項目のRetrieve secret valueを押すと確認できます。(権限がある方のみ閲覧可能です!)
リソースの例(一部)
{
"Resources": {
"CloudFormationCreatedSecret": {
"Type": "AWS::SecretsManager::Secret",
"Properties": {
"Description": "Simple secret created by AWS CloudFormation.",
"GenerateSecretString": {
"SecretStringTemplate": "{\"username\": \"saanvi\"}", # ユーザ名をテンプレートとして指定
"GenerateStringKey": "password", # パスワードを自動生成
"PasswordLength": 32 #パスワードの長さを指定
}
}
}
## Secrets Manager: Secret Target Attachment
SecretTargetAttachment:
Type: AWS::SecretsManager::SecretTargetAttachment
Properties:
SecretId: !Ref SecretForRDS # 作成したシークレットのIDを参照
TargetId: !Ref MyRDSInstance # 対象となるRDSインスタンスのID
TargetType: "AWS::RDS::DBInstance" # 対象リソースのタイプを指定
今回はCloudFormation(CFn)を使ってシークレットを作成したので、とっても楽でした!
CFnのリソースについてはAWS公式ドキュメントに詳細が載っているので、それを参考にしながら作成しました。まだまだ理解できていない部分もありますが、少しずつ頑張っていきたいと思います!