0
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?

個人的備忘録:Secrets Manager を活用した AWS のセキュアなインフラ構築と CLI を使った作成方法

Posted at

はじめに

AWS Secrets Manager は、データベースの認証情報や API キーを安全に管理し、自動的にローテーションできるサービスです。

本記事では、Secrets Manager の基本機能や実際の使い方をまとめました。

シークレット情報をコード内に直接書かずに管理できるため、セキュリティ向上 につながります。

AWS を活用した 安全な認証情報管理 に興味がある方の参考になれば幸いです。

書こうと思ったきっかけ

AWS を利用する際、認証情報の管理は非常に重要な課題 の一つです。

環境変数や設定ファイルで管理すると、漏えいや管理の手間が増えてしまいます

Secrets Manager を活用すれば、安全かつ簡単にシークレット情報を管理できる ことを知り、そのメリットを整理しようと思いました。

また、実際に使ってみることで、具体的な導入手順をまとめる価値がある と感じました。

AWS Secrets Managerについて

AWS Secrets Manager は、データベースの認証情報、API キー、その他のシークレット情報を安全に管理し、自動的にローテーションできるAWSのマネージドサービスです。

Screenshot 2025-02-07 at 11.40.58.png
引用画像:https://aws.amazon.com/jp/secrets-manager/

アプリケーションがコード内で直接シークレットを扱わないようにすることで、セキュリティを向上させることができます。

主な機能

1. シークレットの安全な保存

  • 暗号化: AWS Key Management Service (KMS) を利用して保存されるシークレットは自動的に暗号化。
  • IAM ポリシーによるアクセス制御: ユーザーやアプリケーションごとにアクセス権限を設定可能。

2. シークレットの自動ローテーション

  • RDS や Redshift などの AWS サービスと統合し、データベースの認証情報を自動更新。
  • Lambda を利用したカスタムローテーションも可能。

3. シークレットの取得

  • AWS SDK, CLI, API, CloudFormation などを通じてプログラム的に取得可能。
  • キャッシュを推奨: Secrets Manager への頻繁なアクセスはコストがかかるため、アプリ側でキャッシュを利用するのが一般的。

4. 監査とモニタリング

  • AWS CloudTrail と統合し、誰がどのシークレットにアクセスしたかを記録可能。

ユースケース

データベースの認証情報管理

  • RDS や Aurora などのデータベース認証情報を管理し、自動ローテーションを実施。

API キーやトークンの管理

  • 外部 API のアクセスキーや OAuth トークンを安全に保管し、アプリケーションから安全に取得。

認証情報を含む CI/CD のセキュリティ強化

  • GitHub Actions, CodePipeline などの CI/CD 環境で Secrets Manager を活用してシークレットを安全に取得。

実際に使ってみた

AWS Secrets Manager を使用してシークレットを作成・取得・更新・削除する基本的なコマンドを紹介します。

作成後の画面

Screenshot 2025-02-07 at 12.11.54.png

簡単にハンズオンできる形式となっているので、ぜひ参考にしてみてください。

1. シークレットの作成

指定した名前でシークレットを作成し、ユーザー名とパスワードを保存します。

aws secretsmanager create-secret \
    --name MyDatabaseSecret \
    --secret-string '{"username":"admin","password":"mypassword"}'

オプション説明

  • --name:シークレットの名前(例: MyDatabaseSecret)。
  • --secret-string:保存するシークレットデータ(JSON 形式)。

2. シークレットの取得

作成したシークレットの値を取得します。

aws secretsmanager get-secret-value \
    --secret-id MyDatabaseSecret

オプション説明

  • --secret-id:取得するシークレットの名前または ARN。

出力例

{
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:MyDatabaseSecret-abc123",
    "Name": "MyDatabaseSecret",
    "SecretString": "{\"username\":\"admin\",\"password\":\"mypassword\"}"
}

3. シークレットの更新

既存のシークレットを新しい値に更新します。

aws secretsmanager update-secret \
    --secret-id MyDatabaseSecret \
    --secret-string '{"username":"admin","password":"newpassword"}'

オプション説明

  • --secret-id:更新するシークレットの名前。
  • --secret-string:新しいシークレットデータ。

4. シークレットの削除

指定したシークレットを削除します。

aws secretsmanager delete-secret \
    --secret-id MyDatabaseSecret

オプション説明

  • --secret-id:削除するシークレットの名前。

ベストプラクティス

IAM ポリシーを適切に設定

  • アプリケーションごとに最小限の権限を付与(最小権限の原則)。
  • secretsmanager:GetSecretValue のアクセス権限を適切に制御。

シークレットのローテーションを自動化

  • AWS Lambda を使って、独自のローテーションロジックを実装可能。

CloudTrail で監査ログを有効化

  • どのユーザーがシークレットにアクセスしたかを監視し、不正アクセスを検知。

まとめ

AWS Secrets Manager は、データベース認証情報や API キーを安全に保存・管理できるサービス であり、自動ローテーションや監査機能 を備えています。

IAM ポリシーの適切な設定キャッシュの活用 などのベストプラクティスを実践することで、コストを抑えつつ安全な運用 が可能です。

今回の内容が、どなたかの技術の支えになれば幸いです。

0
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
0
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?