👌

AWS Secrets Managerを使って本気でAWSアカウントを守る

2023/12/25に公開

はじめに

この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら

この記事ではAWS Secrets Managerに関連する内容を超詳細にまとめています。

具体的には以下流れで説明します。

  • AWS Secrets Managerとは
  • AWS Secrets Managerの仕組み
  • AWS Secrets Managerの活用
  • AWS Secrets Managerのベストプラクティス

AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

この記事を読んでほしい人

  • AWS Secrets Managerがどういうサービスか説明できるようになりたい人
  • AWS Secrets Managerを採用するときのベストプラクティスを説明できるようになりたい人
  • AWS Certified DevOps Engineer Professionalを目指している人

AWS Secrets Managerとは

AWS Secrets Managerは、AWSのサービスの一つで、機密情報(シークレット)を安全に管理するためのツールです。
シークレットとは、データベースやAPIなどにアクセスするためのパスワードやトークンなどの情報のことです。
AWS Secrets Managerを使うと、シークレットを暗号化して保存し、アクセスポリシーを設定したり、自動的にローテーションしたりすることができます。

AWS Secrets Managerの仕組み

AWS Secrets Managerは、以下のような仕組みでシークレットを管理します。

シークレットの保存

シークレットを作成するときに、シークレットの名前や値、説明、タグなどのメタデータを指定します。シークレットの値は、KMS(キーマネジメントサービス)で暗号化されて保存されます。

また、シークレットには、アクセスポリシーを設定することができます。
アクセスポリシーは、IAMのロールやユーザーなど、どのような主体がシークレットにアクセスできるかを定義するものです。
アクセスポリシーを設定することで、よりセキュアにシークレットを保存できるようになるので適切な設定をすることが大切です。

自動ローテーション

シークレットには、ローテーションルールを設定することができます。
ローテーションルールは、シークレットの値をどのくらいの頻度で変更するかを定義するものです。
ローテーションは、AWS Lambda関数を使って実行されます。
実際の挙動としてはシークレットの値を新しいものに変更し、それに合わせて関連するサービスやアプリケーションの設定も更新します。

シークレットの呼び出し

シークレットにアクセスするには、AWS SDKやCLIなどを使って、AWS Secrets ManagerのAPIを呼び出します。
APIでは、シークレットの名前やバージョンなどを指定して、シークレットの値を取得できます。
取得したシークレットの値は、メモリ上で一時的に保持されます。ディスクやログなどに書き込まれることはありません。

AWS Secrets ManagerとSSM Parameter Storeの比較

AWS Secrets ManagerとSSM Parameter Storeは、どちらもAWSのサービスで、構成データや機密情報を管理するためのツールです。
しかし、両者には以下のような違いがあります。

項目 AWS Secrets Manager SSM Parameter Store
暗号化 KMSで暗号化される KMSで暗号化される(オプション)
アクセスポリシー シークレットごとに設定可能 パラメータごとに設定可能
ローテーション 自動的に実行可能 手動で実行する必要がある
API呼び出し回数制限 700回/秒 40回/秒
コスト 有料 スタンダードは無料

試験対策でいうと、シークレットを自動ローテーション、ときたらSecrets Managerです。

AWS Secrets Managerの活用

AWS Secrets Managerは、以下のような場面で活用できます。

シークレットを安全に保存したい場合

AWS Secrets Managerは、シークレットを暗号化して保存し、アクセスポリシーで制限することで、シークレットの漏洩や不正利用を防ぐことができます。

シークレットを自動的にローテーションしたい場合

AWS Secrets Managerは、ローテーションルールを設定することで、シークレットの値を定期的に変更することができます。これにより、シークレットが古くなったり、盗まれたりするリスクを低減することができます。

シークレットを簡単に管理したい場合

AWS Secrets Managerは、シークレットの作成や更新や削除などをGUIやCLIなどで行うことができます。また、シークレットにタグや説明などを付けることで、シークレットの分類や検索も容易になります。

AWS Secrets Managerのベストプラクティス

AWS Secrets Managerを使うときには、以下のようなベストプラクティスに従うとよいでしょう。

ベストプラクティス 説明
シークレットの最小権限原則 シークレットにアクセスできる主体は、必要最小限に限定すること。不要な主体にアクセス権を与えないこと。
シークレットのローテーション シークレットの値は、定期的にローテーションすること。ローテーションの頻度は、シークレットの重要度やリスクに応じて調整すること。
シークレットの命名規則 シークレットの名前は、一意でわかりやすくすること。シークレットの種類や用途や環境などを表す接頭辞や接尾辞を使うこと。
シークレットのメタデータ シークレットには、タグや説明などのメタデータを付けること。メタデータは、シークレットの管理や監査やコスト割り当てなどに役立つこと。

まとめ

この記事ではAWS Secrets Managerに関連する内容を超詳細にまとめました。

  • AWS Secrets Managerとは
  • AWS Secrets Managerの仕組み
  • AWS Secrets Managerの活用
  • AWS Secrets Managerのベストプラクティス

以上でDevOps大全 on AWSは連載終了です。
2か月にわたり読んでくださった皆様ありがとうございました。

次回予告

DevOps実践編 on AWSと題してDevOpsエンジニアが実プロジェクトでどのような思考を経てアーキテクチャを決めているのかを解き明かしていく内容で連載をスタート予定です。

Discussion