翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用して AWS Organizations の IAM アクセスキー管理を一元化する
作成者: Aarti Rajput (AWS)、Chintamani Aphale (AWS)、T.V.R.L.Phani Kumar Dadi (AWS)、Pradip kumar Pandey (AWS)、Mayurihinde (AWS)、Pratap Kumar Nanda (AWS)
概要
注意: AWS CodeCommit は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。詳細はこちら
キーとパスワードのセキュリティルールの適用は、すべての組織にとって 不可欠なタスクです。重要なルールの 1 つは、セキュリティを強化するために AWS Identity and Access Management (IAM) キーを定期的にローテーションすることです。通常、AWS アクセスキーは、チームが AWS コマンドラインインターフェイス (AWS CLI) または AWS 外のアプリケーションから AWS にアクセスするたびにローカルで作成および設定されます。組織全体で強力なセキュリティを維持するには、要件が満たされた後、または定期的に古いセキュリティキーを変更または削除する必要があります。組織内の複数のアカウント間でキーローテーションを管理するプロセスは、時間がかかり、面倒です。このパターンは、Account Factory for Terraform (AFT) と AWS のサービスを使用してローテーションプロセスを自動化するのに役立ちます。
このパターンには以下の利点があります。
アクセスキー IDs とシークレットアクセスキーを、組織内のすべてのアカウントで一元管理します。
AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
環境変数を自動的にローテーションします。ユーザー認証情報が侵害された場合は、更新を強制します。
このパターンでは、Terraform を使用して AWS Lambda 関数、Amazon EventBridge ルール、IAM ロールをデプロイします。EventBridge ルールは定期的に実行され、作成された日時に基づいてすべてのユーザーアクセスキーを一覧表示する Lambda 関数を呼び出します。前のキーが定義したローテーション期間 (45 日など) より古い場合、追加の Lambda 関数は新しいアクセスキー ID とシークレットアクセスキーを作成し、Amazon Simple Notification Service (Amazon SNS) と Amazon Simple Email Service (Amazon SES) を使用してセキュリティ管理者に通知します。シークレットはそのユーザーの AWS Secrets Manager で作成され、古いシークレットアクセスキーは Secrets Manager に保存され、古いキーにアクセスするためのアクセス許可が設定されます。古いアクセスキーが使用されないようにするには、非アクティブ期間 (例: 60 日、この例ではキーがローテーションされてから 15 日後) 後に無効になります。非アクティブなバッファ期間 (例: 90 日、またはこの例ではキーがローテーションされてから 45 日) 後、古いアクセスキーは AWS Secrets Manager から削除されます。詳細なアーキテクチャとワークフローについては、「アーキテクチャ」セクションを参照してください。
前提条件と制限
AWS Control Tower (バージョン 3.1 以降) を使用して構築された組織のランディングゾーン
Account Factory for Terraform (AFT)
は、次の 3 つのアカウントで設定されています。 組織管理アカウント
は、組織全体を一元管理します。 AFT 管理アカウント
は Terraform パイプラインをホストし、インフラストラクチャをデプロイアカウントにデプロイします。 デプロイアカウント
は、この完全なソリューションをデプロイし、IAM キーを一元管理します。
デプロイアカウントにインフラストラクチャをプロビジョニングするための Terraform バージョン 0.15.0 以降。
Amazon Simple Email Service (Amazon SES) で設定されている E
メールアドレス。 (推奨) セキュリティを強化するには、このソリューションを Virtual Private Cloud (VPC
) 内のプライベートサブネット (デプロイアカウント) 内にデプロイします。変数をカスタマイズするときに VPC とサブネットの詳細を指定できます (エピックセクションのコードパイプラインのパラメータをカスタマイズするセクションを参照)。
アーキテクチャ
AFT リポジトリ
このパターンでは、Account Factory for Terraform (AFT) を使用して、必要なすべての AWS リソースを作成し、コードパイプラインを使用してデプロイアカウントにリソースをデプロイします。コードパイプラインは 2 つのリポジトリで実行されます。
グローバルカスタマイズには、AFT に登録されているすべてのアカウントで実行される Terraform コードが含まれています。
アカウントのカスタマイズには、デプロイアカウントで実行される Terraform コードが含まれます。
リソースの詳細
AWS CodePipeline ジョブは、デプロイアカウントに次のリソースを作成します。
AWS EventBridge ルールと設定済みルール
account-inventory
Lambda 関数IAM-access-key-rotation
Lambda 関数Notification
Lambda 関数E メールテンプレートを含む Amazon Simple Storage Service (Amazon S3) バケット
必要な IAM ポリシー
アーキテクチャ
この図表は、以下を示すものです:

EventBridge ルールは、24 時間ごとに
account-inventory
Lambda 関数を呼び出します。account-inventory
Lambda 関数は、すべての AWS アカウント ID、アカウント名、およびアカウント E メールのリストを AWS Organizations にクエリします。 IDsaccount-inventory
Lambda 関数は、AWS アカウントごとにIAM-access-key-auto-rotation
Lambda 関数を開始し、メタデータを渡して追加の処理を行います。IAM-access-key-auto-rotation
Lambda 関数は、引き受けた IAM ロールを使用して AWS アカウントにアクセスします。Lambda スクリプトは、アカウント内のすべてのユーザーとそのユーザーの IAM アクセスキーに対して監査を実行します。IAM キーローテーションしきい値 (ローテーション期間) は、
IAM-access-key-auto-rotation
Lambda 関数がデプロイされるときに環境変数として設定されます。ローテーション期間が変更されると、IAM-access-key-auto-rotation
Lambda 関数は更新された環境変数で再デプロイされます。パラメータを設定して、ローテーション期間、古いキーの非アクティブ期間、および古いキーが削除された後の非アクティブバッファを設定できます (エピックセクションのコードパイプラインのパラメータをカスタマイズするを参照)。IAM-access-key-auto-rotation
Lambda 関数は、設定に基づいてアクセスキーの経過時間を検証します。IAM アクセスキーの有効期間が定義したローテーション期間を超えていない場合、Lambda 関数はそれ以上アクションを実行しません。IAM アクセスキーの有効期間が定義したローテーション期間を超えた場合、
IAM-access-key-auto-rotation
Lambda 関数は新しいキーを作成し、既存のキーをローテーションします。Lambda 関数は、古いキーを Secrets Manager に保存し、アクセスキーがセキュリティ標準から逸脱したユーザーにアクセス許可を制限します。Lambda 関数は、指定された IAM プリンシパルのみがシークレットにアクセスして取得できるようにするリソースベースのポリシーも作成します。
IAM-access-key-rotation
Lambda 関数は LambdaNotification
関数を呼び出します。Notification
Lambda 関数は S3 バケットに E メールテンプレートをクエリし、関連するアクティビティメタデータを含む E メールメッセージを動的に生成します。Notification
Lambda 関数は、Amazon SES を呼び出してさらにアクションを実行します。Amazon SES は、アカウント所有者の E メールアドレスに関連情報を含む E メールを送信します。
ツール
AWS サービス
「AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。このパターンには IAM ロールとアクセス許可が必要です。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Secrets Manager は、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールに置き換えて、シークレットをプログラムで取得する上で役立ちます。
「Amazon Simple Email Service (Amazon SES)」はユーザー自身のメールアドレスとドメインを使用してメールを送受信する上で役立ちます。
その他のツール
「Terraform
」は、HashiCorpのinfrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。
コードリポジトリ
このパターンの手順とコードは、GitHub IAM アクセスキーローテーション
ベストプラクティス
IAM については、IAM ドキュメントの「セキュリティのベストプラクティス」を参照してください。
キーローテーションについては、IAM ドキュメントの「アクセスキーの更新に関するガイドライン」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリをクローン作成します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
ブートストラップアカウントを設定します。 | AFT ブートストラップ
| DevOps エンジニア |
グローバルカスタマイズを設定します。 | AFT フォルダ
| DevOps エンジニア |
アカウントのカスタマイズを設定します。 | AFT フォルダの設定
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
すべてのアカウントに対して非Terraform コードパイプラインパラメータをカスタマイズします。 |
| DevOps エンジニア |
デプロイアカウントのコードパイプラインパラメータをカスタマイズします。 |
以下を含む、組織の要件に基づいてパラメータの値を指定します (デフォルト値については、Github リポジトリの ファイル
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
ソリューションを更新する |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
E メール通知の日付をカスタマイズします。 | アクセスキーを無効にする前に特定の日に E メール通知を送信する場合は、これらの変更で
| DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
アカウントの一覧表示 | この問題が発生した場合は、アクセス許可を検証する必要があります。
|
関連リソース
Terraform の推奨プラクティス
(Terraform ドキュメント) IAM でのセキュリティのベストプラクティス (IAM ドキュメント)
キーローテーションのベストプラクティス (IAM ドキュメント)