翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CodePipeline、IAM アクセスアナライザー、AWS CloudFormation マクロを使用して、AWS アカウントの IAM ポリシーとロールを自動的に検証してデプロイする
作成者: Helton ™eiro (AWS) と Guilherme Simoes (AWS)
概要
注意: AWS CodeCommit は、新規のお客様には利用できなくなりました。AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
このパターンでは、開発チームが Amazon Web Services (AWS)アカウントで AWS Identity and Access Management (IAM) のポリシーとロールを作成できるようにするデプロイパイプラインを作成するための手順を説明し、コードを提供します。このアプローチは、運用チームの負担を減らし、デプロイプロセスをスピードアップするのに役立ちます。また、デベロッパーが既存のガバナンスやセキュリティ統制と両立する IAM ロールやポリシーを作成するのにも役立ちます。
このパターンのアプローチでは、AWS Identity and Access Management アクセスアナライザーを使用して IAM ロールにアタッチしたい IAM ポリシーを検証し、AWS CloudFormation を使用して IAM ロールをデプロイします。ただし、開発チームは AWS CloudFormation テンプレートファイルを直接編集する代わりに、JSON 形式の IAM ポリシーとロールを作成します。AWS CloudFormation マクロは、デプロイを開始する前に、これらの JSON 形式のポリシーファイルを AWS CloudFormation IAM リソースタイプに変換します。
デプロイパイプライン (RolesPipeline
) には、ソース、検証、デプロイの各段階があります。ソースステージでは、開発チームが IAM ロールとポリシーの定義を含む JSON ファイルを AWS CodeCommit リポジトリにプッシュします。次に、AWS CodeBuild はスクリプトを実行してそれらのファイルを検証し、Amazon Simple Storage Service (Amazon S3) バケットにコピーします。開発チームは別の S3 バケットに保存されている AWS CloudFormation テンプレートファイルに直接アクセスできないため、JSON ファイルの作成と検証のプロセスに従う必要があります。
最後に、デプロイフェーズ中に、AWS CodeDeploy は AWS CloudFormation スタックを使用して、アカウント内の IAM ポリシーとロールを更新または削除します。
重要
このパターンのワークフローは概念実証 (POC) であり、テスト環境でのみ使用することをお勧めします。このパターンのアプローチを本番環境で使用する場合は、IAM ドキュメントの「IAM でのセキュリティのベストプラクティス」を参照し、IAM ロールと AWS サービスに必要な変更を加えます。
前提条件と制限
前提条件
アクティブなAWS アカウント
RolesPipeline
パイプライン用の新規または既存の S3 バケット。使用しているアクセス認証情報に、このバケットにオブジェクトをアップロードする権限があることを確認してください。インストールおよび設定済みの AWS コマンドラインインターフェイス (AWS CLI)。詳細については、AWS CLI ドキュメントの「AWS CLI の最新バージョンを使用してインストールまたは更新を行う」を参照してください。
インストールおよび設定済みの AWS サーバーレスアプリケーションモデル (AWS SAM) CLI。詳細については、AWS SAM ドキュメントの「AWS SAM CLI のインストール」を参照してください。
ローカルマシンで Python 3 をインストールします。詳細については、Python のドキュメント
を参照してください。 インストールおよび設定済みの Git クライアント。
ローカルマシンにクローンされた GitHub
IAM roles pipeline
リポジトリ。JSON 形式の既存の IAM ポリシーとロール。詳細については、Github
IAM roles pipeline
リポジトリの ReadMeファイルを参照してください。 開発チームには、このソリューションの AWS CodePipeline、CodeBuild、および CodeDeploy リソースを編集する権限があってはなりません。
制限
このパターンのワークフローは概念実証 (POC) であり、テスト環境でのみ使用することをお勧めします。このパターンのアプローチを本番環境で使用する場合は、IAM ドキュメントの「IAM でのセキュリティのベストプラクティス」を参照し、IAM ロールと AWS サービスに必要な変更を加えます。
アーキテクチャ
次の図は、CodePipeline、IAM アクセスアナライザー、および AWS CloudFormation マクロを使用して IAM ロールとポリシーを自動的に検証してアカウントにデプロイする方法を示しています。

この図表は、次のワークフローを示しています:
デベロッパーは IAM ポリシーとロールの定義を含む JSON ファイルを作成します。デベロッパーがコードを CodeCommit リポジトリにプッシュし、CodePipeline が
RolesPipeline
パイプラインを開始します。CodeBuild は IAM Access Analyzer を使用して JSON ファイルを検証します。セキュリティまたはエラー関連の検出結果がある場合、デプロイプロセスは停止されます。
セキュリティまたはエラー関連の検出結果がない場合、JSON ファイルは
RolesBucket
S3 バケットに送信されます。次に、AWS Lambda 関数として実装された AWS CloudFormation マクロが
RolesBucket
バケットから JSON ファイルを読み取り、それらを AWS CloudFormation IAM リソースタイプに変換します。定義済みの AWS CloudFormation スタックは、アカウント内の IAM ポリシーとロールをインストール、更新、または削除します。
自動化とスケール
このパターンを自動的にデプロイする AWS CloudFormation テンプレートは、GitHub IAM
ツール
「AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
「AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
IAM Access Analyzer は、外部エンティティと共有されている組織およびアカウント (S3 バケットや IAM ロールなど) 内のリソースを識別するのに役立ちます。これは、リソースやデータへの意図しないアクセスを特定するのに役立ちます。
AWS サーバーレスアプリケーションモデル (AWS SAM) は、AWS クラウドでサーバーレスアプリケーションを構築するのに役立つオープンソースフレームワークです。
コード
このパターンのソースコードとテンプレートは、GitHub IAM roles pipeline
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
サンプルリポジトリのクローンを作成します。 | GitHub IAM roles pipeline | アプリ開発者、AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
パイプラインをデプロイします。 |
| アプリ開発者、AWS 全般 |
パイプラインのリポジトリをクローンします。 |
| アプリ開発者、AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
有効な IAM ポリシーとロールを使用して RoleSipeline パイプラインをテストします。 |
| アプリ開発者、AWS 全般 |
無効な IAM ポリシーとロールを使用して RoleSpipeline パイプラインをテストします。 |
| アプリ開発者、AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
クリーンアップの準備をします。 | S3 バケットを空にしてから、 | アプリ開発者、AWS 全般 |
RolesStack スタックを削除します。 |
| アプリ開発者、AWS 全般 |
RoleSipeline スタックを削除します。 |
| アプリ開発者、AWS 全般 |
関連リソース
IAM Access Analyzer - Policy validation
(AWS ニュースブログ) AWS CloudFormation マクロを使用したテンプレートのカスタム処理の実行 (AWS CloudFormation ドキュメント)
Python による Lambda 関数の構築 (AWS Lambda ドキュメント)