助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 30648
問題を開く
ある企業では、内部的にAmazon Redshiftへアクセスするアプリケーションを検討している。アプリケーションがRedshiftへアクセスするためのIDおよびパスワードはアプリケーション内にハードコーディングせず、また、定期的に変更されるようにしたい。
適切なサービスはどれか。

正解

AWS Secrets Manager

解説

AWS Secrets Managerは、データベースなどにアクセスする際のシークレット(ログイン時の認証情報など)を管理するサービスです。アプリケーションなどからAWSリソースへアクセスする際にSecrets Managerからシークレットを取得することにより、ログイン情報をアプリケーションにハードコーディングしたり平文で入力しておく必要がありません。認証情報をハードコーディング(埋め込み)すると、例えばアプリケーションのソースコードから認証情報を参照できてしまったり、認証情報を更新した際にアプリケーション側の更新漏れが発生するなどのリスクがありました。管理者はSecrets Managerを利用することにより、アプリケーションの安全な認証を実現できるようになります。


Secrets Managerには、シークレットを安全に管理するために、定期的にシークレットを更新する「ローテーション」機能があります。スケジュールに従って、Secrets Managerはローテーション用のLambda関数を自動的に呼び出します。アプリケーションは、更新されたシークレットでその後の認証を行います。
なお、Amazon RDS、Amazon Redshiftなど一部のサービスはSecrets Managerがローテーション用のテンプレートを用意しています。これら以外のサービス向けには、独自でローテーション関数を作成する必要があります。

以上より正解は
・AWS Secrets Manager
です。

ローテーションのタイミングは、日・週・月など任意に選択できます。


また、パラメータストア(Parameter Store)はAWS Systems Managerの機能で、複数のサービスのパスワードや運用データを一元管理します。Secrets Managerと同様に、シークレットを外部で管理する用途に利用できます。ただし、パラメータストアにはシークレットの自動ローテーション機能は存在しないため、セキュリティポリシーやシークレットを運用する際の要件に応じて使い分ける必要があります。

その他の選択肢については以下の通りです。

・AWS Systems Managerのパラメータストア
上述の通り、パラメータストアでは「定期的に認証情報が変更されるようにしたい」という要件を満たせませんので誤りです。

・AWS Key Management Service(KMS)
暗号化を行うサービス(S3やEBSなど)を安全に利用するための鍵を作成・管理するサービスですので誤りです。

・Amazon Cognito
モバイルアプリケーションやWebアプリケーション向けのユーザー認証機能を提供するサービスですので誤りです。

参考

【AWS Secrets Manager】
通常、AWSリソースへアクセスするアプリケーションは、認証のために「アクセスキーとシークレットアクセスキー」を利用します。アクセスキーはAWSによって作成されるアクセスキーID(例:AKIA3MQXZYKOAYRZ33OR)で、シークレットアクセスキーはアクセスキーと対になるものです。AWS CLIやAWS APIからAWSリソースにアクセスする際に使用します。
※詳細は、分野「IAM」を参照してください。

しかし、アプリケーションにアクセスキーやシークレットアクセスキーを書き込むのはセキュリティリスクが高くなります。認証情報をハードコーディング(埋め込み)することは、例えばアプリケーションのソースコードから認証情報を参照できてしまったり、認証情報を更新した際にアプリケーション側の更新漏れが発生するなどのリスクがあります。

AWS Secrets Managerは、データベースなどにアクセスする際のシークレット(ログイン時の認証情報など)を管理するサービスです。アプリケーションなどからAWSリソースへアクセスする際にSecrets Managerからシークレットを取得することにより、ログイン情報をアプリケーションにハードコーディングしたり平文で入力しておく必要がありません。
管理者はSecrets Managerを利用することにより、アプリケーションの安全な認証を実現できるようになります。


アプリケーションはSecrets ManagerのAPIを利用して、Secrets Managerに保存されたデータベースのシークレットを取得します。このとき、アプリケーション側にはIAMポリシー「secretsmanager:GetSecretValue」権限を付与する必要があります。


なお、Secrets Managerに管理されているシークレットは、KMS(Key Management Service)と連携することにより暗号化して保存することができます。

■シークレットのローテーション
Secrets Managerには、シークレットを安全に保存するための「ローテーション」機能があります。
ローテーションを有効にすると、Secrets Managerはスケジュールに基づいてLambda関数を内部的に呼び出し、シークレットを定期的に更新します。これにより、万一シークレットが漏洩してしまった際の被害を低減することができます。

シークレットが更新された後は、アプリケーションは更新されたシークレットでその後の認証を行います。
なお、Amazon RDS、Amazon Redshiftなど一部のサービスはSecrets Managerがローテーション用のテンプレートを用意しています。これら以外のサービス向けには、独自でローテーション関数を作成する必要があります。

上に戻る

キーローテーションについて(ACM/KMS)

公開日 2022/11/10

ACMとKMSでのキーローテの違いがわかりません。
この問題含めいくつかの問題でキーローテについて問われているかと思います。(他:30482,30484)
私の今の認識は、両方のサービスでユーザー作成のカギを定期的に自動でローテーションしているイメージです。

Ping-tの問題だと、
30482では「Secrets Managerは自動的に鍵の更新を行う機能はありませんので誤りです。
なお、Secrets Managerとはシークレット(ログイン時の認証情報など)を管理するサービスです。KMSと連携することで、認証情報をより堅固に管理できるようになります。」
しかし30648の問題文を読むとACMがIDおよびパスワードをローテート出来ると読めてしまいました。
私自身実際にAWSのサービスを触ったことがないのでなかなか二つの差異をイメージできません。

初歩的な質問かもしれませんが、調べてもよくわからなかったので
ご教授宜しくお願いいたします。

2022/11/11 20:09

ACM はAWS Certificate Manager の略称ですが、おそらくここでのACM はAWS Secrets Manager のことと推察します。なお、AWS Secrets Manager の略称はわかりませんでした(ASM と略している例は見つけられませんでした)。

私の今の認識は、両方のサービスでユーザー作成のカギを定期的に自動でローテーションしているイメージです。

私の認識では、AWS Secrets Manager はシークレット(ログイン時の認証情報など)の管理・ローテートができますが、ここでいうシークレットの中にカギは含まれません。KMS はシークレット(ログイン時の認証情報など)は扱えませんが、カギの管理・ローテートができます。


コメント

y ysatoag

2022/11/15 14:35

誤字申し訳ありません、、、 解説ありがとうございます! 認証情報と鍵は別物なのですね

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?