翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Organizations and AWS Secrets Manager を使用してIAMユーザーアクセスキーを大規模に自動的にローテーションする
作成者: Tracy Hickey (AWS)、Gaurav Verma (AWS)、Laura Seletos (AWS)、Michael Davie (AWS)、Arvind Patel (AWS)
環境:PoC またはパイロット | テクノロジー: セキュリティ、アイデンティティ、コンプライアンス | AWS サービス: AWS CloudFormation、Amazon CloudWatch Events、AWSアイデンティティとアクセス管理、AWSLambda、AWSOrganizations、Amazon S3、Amazon SES、AWSSecrets Manager |
[概要]
重要: ベストプラクティスとして、 では、アクセスキーなどの長期的な認証情報を持つIAMユーザーの代わりに AWS Identity and Access Management (IAM) ロールを使用するAWSことをお勧めします。このパターンで説明されているアプローチは、長期間のAWSAPI認証情報を必要とするレガシー実装のみを対象としています。これらの実装では、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスプロファイルや IAM Roles Anywhere を使用するなど、短期認証情報を使用するオプションを検討することをお勧めします。この記事のアプローチは、短期認証情報の使用にすぐには変更できず、長期認証情報をスケジュールに従ってローテーションする必要がある場合のみを対象としています。このアプローチでは、ローテーションされたAPI認証情報を使用するようにレガシーアプリケーションコードまたは設定を定期的に更新する責任があります。 |
アクセスキーは、IAMユーザーの長期的な認証情報です。IAM 認証情報を定期的にローテーションすると、侵害された一連のIAMアクセスキーがAWSアカウント内のコンポーネントにアクセスできなくなります。IAM 認証情報のローテーションは、 のセキュリティのベストプラクティスIAMの重要な部分でもあります。
このパターンは、キーローテーションリポジトリで提供されている AWS CloudFormation テンプレートを使用して、IAMアクセス GitHub IAMキーを自動的にローテーション
このパターンは、1 つのアカウントまたは複数のアカウントでのデプロイをサポートします。AWS Organizations を使用している場合、このソリューションは組織IDs内のすべてのAWSアカウントを識別し、アカウントが削除されたり、新しいアカウントが作成されたりすると動的にスケーリングします。一元化された AWS Lambda 関数は、引き受けたIAMロールを使用して、選択した複数のアカウントでローテーション関数をローカルで実行します。
既存のIAMアクセスキーが 90 日経過すると、新しいアクセスキーが生成されます。
新しいアクセスキーは Secrets Manager にシーAWSクレットとして保存されます。リソースベースのポリシーでは、指定されたIAMプリンシパルのみがシークレットにアクセスして取得できます。管理アカウントにキーを保存すると、すべてのアカウントのキーが管理アカウントに保存されます。
新しいアクセスキーが作成されたAWSアカウントの所有者に割り当てられた E メールアドレスに通知が送信されます。
以前のアクセスキーは 100 日後に非アクティブ化され、110 日後に削除されます。
一元化された E メール通知がAWSアカウント所有者に送信されます。
Lambda 関数と Amazon は、これらのアクション CloudWatch を自動的に実行します。その後、新しいアクセスキーペアを取得して、コードまたはアプリケーション内で置き換えることができます。ローテーション、削除、非アクティブ化の期間はカスタマイズできます。
前提条件と制限
少なくとも 1 つのアクティブなAWSアカウント。
AWS 組織、設定およびセットアップ (チュートリアル を参照)。
管理アカウントから AWS Organizations をクエリするアクセス許可。詳細については、AWS「Organizations ドキュメント」の「Organizations」と「サービスにリンクされたロール」を参照してください。 AWS
AWS CloudFormation テンプレートと関連リソースを起動するアクセス許可を持つIAMプリンシパル。詳細については、 AWS CloudFormation ドキュメントの「セルフマネージドアクセス許可を付与する」を参照してください。
リソースをデプロイするための既存の Amazon Simple Storage Service (Amazon S3) バケット。
Amazon Simple Email Service (Amazon SES) がサンドボックスから移動しました。詳細については、Amazon ドキュメントの「Amazon SESサンドボックスからの移動」を参照してください。 SES
仮想プライベートクラウド (VPC) で Lambda を実行する場合は、メイン CloudFormation テンプレートを実行する前に次のリソースを作成する必要があります。
VPC。
サブネット。
Amazon SES、AWSSystems Manager、AWSSecurity Token Service (AWS STS)、Amazon S3、AWSSecrets Manager のエンドポイント。( GitHub IAMキーローテーション
リポジトリで提供されているエンドポイントテンプレートを実行して、これらのエンドポイントを作成できます。)
AWS Systems Manager パラメータ ( パラメータSMTP) に保存されている Simple Mail Transfer Protocol (SSM) ユーザーとパスワード。パラメータはメイン CloudFormation テンプレートパラメータと一致する必要があります。
アーキテクチャ
テクノロジースタック
Amazon CloudWatch
Amazon EventBridge
IAM
AWS Lambda
AWS 組織
Amazon S3
アーキテクチャ
次の図は、このパターンのコンポーネントとワークフローを示しています。このソリューションでは、認証情報をメンバーアカウントと管理アカウントに保存する 2 つのシナリオがサポートされています。
オプション 1: 認証情報をメンバーアカウントに保存する
オプション 2: 認証情報を管理アカウントに保存する
図は次のワークフローを示しています。
EventBridge イベントは 24 時間ごとに
account_inventory
Lambda 関数を開始します。この Lambda 関数は、すべてのAWSアカウント IDs、アカウント名、およびアカウント E メールのリストを AWS Organizations にクエリします。
account_inventory
Lambda 関数は、AWSアカウント ID ごとにaccess_key_auto_rotation
Lambda 関数を開始し、メタデータを渡して追加の処理を行います。access_key_auto_rotation
Lambda 関数は、引き受けたIAMロールを使用してAWSアカウント ID にアクセスします。Lambda スクリプトは、アカウント内のすべてのユーザーとそのIAMアクセスキーに対して監査を実行します。IAM アクセスキーの経過時間がベストプラクティスのしきい値を超えない場合、Lambda 関数はそれ以上のアクションを実行しません。
IAM アクセスキーの経過時間がベストプラクティスのしきい値を超えた場合、
access_key_auto_rotation
Lambda 関数は実行するローテーションアクションを決定します。アクションが必要な場合、
access_key_auto_rotation
Lambda 関数は新しいキーが生成されると AWS Secrets Manager でシークレットを作成して更新します。リソースベースのポリシーも作成され、指定されたIAMプリンシパルのみがシークレットにアクセスして取得できます。オプション 1 の場合、認証情報はそれぞれのアカウントの Secrets Manager に保存されます。オプション 2 の場合 (StoreSecretsInCentralAccount
フラグが True に設定されている場合)、認証情報は管理アカウントの Secrets Manager に保存されます。notifier
Lambda 関数が開始され、アカウントの所有者にローテーションアクティビティが通知されます。この関数は、AWSアカウント ID、アカウント名、アカウント E メール、および実行されたローテーションアクションを受け取ります。notifier
Lambda 関数はデプロイメント S3 バケットにメールテンプレートをクエリし、関連するアクティビティメタデータを使用して動的に更新します。その後、E メールはアカウントオーナーの E メールアドレスに送信されます。
注意:
このソリューションは、複数のアベイラビリティゾーンでの耐障害性をサポートします。ただし、複数の AWS リージョンでは回復性をサポートしていません。複数のリージョンでサポートを受けるには、ソリューションを 2 番目のリージョンにデプロイし、キーローテーション EventBridge ルールを無効にしたままにできます。その後、2 つ目のリージョンでソリューションを実行したいときにルールを有効にできます。
このソリューションは監査モードで実行できます。監査モードでは、IAMアクセスキーは変更されませんが、ユーザーに通知するための E メールが送信されます。ソリューションを監査モードで実行するには、キーローテーションテンプレートを実行するとき、または
access_key_auto_rotation
Lambda 関数の環境変数でDryRunFlag
フラグを True に設定します。
自動化とスケール
このソリューションを自動化する CloudFormation テンプレートは、 GitHub IAMキーローテーションASA-iam-key-auto-rotation-iam-assumed-roles.yaml
CloudFormation テンプレートをデプロイできます。
ツール
AWS サービス
Amazon CloudWatch は、AWSリソースのメトリクスと、実行するアプリケーションのAWSメトリクスをリアルタイムでモニタリングするのに役立ちます。
AWS Identity and Access Management (IAM) は、誰が認証され、誰に使用を許可されているかを制御することで、AWSリソースへのアクセスを安全に管理するのに役立ちます。
AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Organizations は、複数のアカウントを作成および一元管理する組織に集約するのに役立つAWSアカウント管理サービスです。
AWS Secrets Manager は、パスワードを含むコード内のハードコードされた認証情報を Secrets Manager へのAPI呼び出しに置き換えて、プログラムでシークレットを取得するのに役立ちます。
Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。
Amazon Simple Email Service (Amazon SES) は、独自の E メールアドレスとドメインを使用して E メールを送受信するのに役立ちます。
Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ交換の調整と管理に役立ちます。
Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークにAWSリソースを起動するのに役立ちます。この仮想ネットワークは、独自のデータセンターで運用する従来のネットワークに似ており、 のスケーラブルなインフラストラクチャを使用する利点がありますAWS。
Amazon VPCエンドポイントは、多くのサービスを含むAWS PrivateLink、 が提供するAWSサービスに接続するためのインターフェイスを提供します。から指定するサブネットごとにVPC、エンドポイントネットワークインターフェイスがサブネットに作成され、サブネットアドレス範囲からプライベート IP アドレスが割り当てられます。
コード
必要なAWS CloudFormation テンプレート、Python スクリプト、ランブックドキュメントは、 GitHub IAMキーローテーション
テンプレート | デプロイ先 | Notes (メモ) |
| デプロイアカウント | これはソリューションのメインテンプレートです。 |
| 認証情報をローテーションしたい単一または複数のメンバーアカウント | CloudFormation スタックセットを使用して、このテンプレートを複数のアカウントにデプロイできます。 |
| セントラル/管理アカウント | このテンプレートを使用して、AWSOrganizations のアカウントのインベントリを保持します。 |
| デプロイアカウント | このテンプレートを使用してエンドポイントの作成を自動化するには、 VPC で Lambda 関数を実行する (メインテンプレートで |
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
デプロイする S3 バケットを選択します。 | アカウントのAWSマネジメントコンソールにサインインし、Amazon S3 コンソール | クラウドアーキテクト |
リポジトリをクローン作成します。 | GitHub IAM キーローテーション | クラウドアーキテクト |
ファイルを S3 バケットにアップロードします。 | クローンファイルを S3 バケットにアップロードします。以下のデフォルトフォルダ構造を使用して、クローンされたファイルとディレクトリをすべてコピーして貼り付けます。 注: CloudFormation テンプレートでこのフォルダ構造をカスタマイズできます。 | クラウドアーキテクト |
E メールテンプレートを変更します。 |
| クラウドアーキテクト |
タスク | 説明 | 必要なスキル |
---|---|---|
キーローテーションの CloudFormation テンプレートを起動します。 |
| クラウドアーキテクト |
引き受けたロールの CloudFormation テンプレートを起動します。 |
| クラウドアーキテクト |
アカウントインベントリの CloudFormation テンプレートを起動します。 |
| クラウドアーキテクト |
VPC エンドポイントの CloudFormation テンプレートを起動します。 | このタスクはオプションです。
| クラウドアーキテクト |
関連リソース
( IAMドキュメント) のセキュリティのベストプラクティス IAM
AWS 組織とサービスにリンクされたロール (AWS組織ドキュメント)
スタックテンプレートの選択 (CloudFormation ドキュメント)
の使用 AWS CloudFormation StackSets (CloudFormation ドキュメント)