、IAMAccess Analyzer CodePipeline、および AWS CloudFormation マクロを使用して、 AWSアカウントにIAMポリシーとロールを自動的に検証してデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

、IAMAccess Analyzer CodePipeline、および AWS CloudFormation マクロを使用して、 AWSアカウントにIAMポリシーとロールを自動的に検証してデプロイする

作成者: Helton Calceeiro (AWS) と Guilherme Simoes (AWS)

コードリポジトリ: IAM ロールパイプライン

環境:PoC またはパイロット

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス DevOps

AWS サービス: AWS CloudFormation; AWS CodeBuild; AWS CodeCommit; AWS CodePipeline; AWS Lambda; AWS SAM

[概要]

このパターンでは、ステップを説明し、開発チームが Amazon Web Services (IAM) AWSアカウントで AWS Identity and Access Management () ポリシーとロールを作成できるようにするデプロイパイプラインを作成するためのコードを提供します。このアプローチは、運用チームの負担を減らし、デプロイプロセスをスピードアップするのに役立ちます。また、デベロッパーが既存のガバナンスとセキュリティコントロールと互換性のあるIAMロールとポリシーを作成するのにも役立ちます。

このパターンのアプローチでは、AWSIdentity and Access Management Access Analyzer を使用して、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) がインストールされ、設定されています。詳細については、 AWSCLIAWSCLIドキュメントの「 のインストール、更新、アンインストール」を参照してください。 

  • AWS サーバーレスアプリケーションモデル (AWS SAM)CLI、インストールおよび設定済み。詳細については、 AWSSAMAWSSAMドキュメントの「 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サービスに必要な変更を加えます。

アーキテクチャ

次の図は、、IAMAccess Analyzer CodePipeline、マクロを使用してIAMロールとポリシーを自動的に検証し、アカウントにデプロイする方法を示していますAWS CloudFormation 。

AWS アカウントでIAMポリシーとロールを検証してデプロイする手順。

この図表は、次のワークフローを示しています:

  1. 開発者は、IAMポリシーとロールの定義を含むJSONファイルを書き込みます。デベロッパーはコードを CodeCommit リポジトリにプッシュ CodePipeline し、RolesPipelineパイプラインを開始します。

  2. CodeBuild は、Access Analyzer IAM を使用してJSONファイルを検証します。セキュリティまたはエラー関連の検出結果がある場合、デプロイプロセスは停止されます。

  3. セキュリティまたはエラー関連の検出結果がない場合、JSONファイルは S3 RolesBucket バケットに送信されます。

  4. 次に、AWSLambda 関数として実装されたAWS CloudFormation マクロは、RolesBucketバケットからJSONファイルを読み取り、AWS CloudFormation IAMリソースタイプに変換します。

  5. 事前定義されたAWS CloudFormation スタックは、アカウント内のIAMポリシーとロールをインストール、更新、または削除します。 

自動化とスケール

AWS CloudFormation このパターンを自動的にデプロイする テンプレートは、 GitHub IAMロールパイプラインリポジトリで提供されます。

ツール

  • AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェルのコマンドを通じて AWSサービスとやり取りするのに役立つオープンソースツールです。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用を許可するかを制御することで、 AWSリソースへのアクセスを安全に管理するのに役立ちます。

  • IAM Access Analyzer は、外部エンティティと共有されている S3 バケットやIAMロールなど、組織やアカウント内のリソースを識別するのに役立ちます。これは、リソースやデータへの意図しないアクセスを特定するのに役立ちます。

  • AWS サーバーレスアプリケーションモデル (AWSSAM) は、 AWS クラウドでサーバーレスアプリケーションを構築するのに役立つオープンソースフレームワークです。

コード

このパターンのソースコードとテンプレートは、 GitHub IAMロールパイプラインリポジトリにあります。

エピック

タスク説明必要なスキル

サンプルリポジトリのクローンを作成します。

GitHub IAM ロールパイプラインリポジトリをローカルマシンにクローンします。

アプリ開発者、一般 AWS
タスク説明必要なスキル

パイプラインをデプロイします。

  1. クローン作成されたリポジトリが含まれるディレクトリに移動します。

  2. make deploy bucket=<bucket_name> コマンドを実行します。重要: 既存の S3 バケットのバケット名に <bucket_name> 置き換える必要があります。

  3. aws codepipeline get-pipeline –name RolesPipeline コマンドを実行して、デプロイが成功したかどうかを確認します。

アプリ開発者、一般 AWS

パイプラインのリポジトリをクローンします。

  1. RolesPipeline AWS CloudFormation スタックはroles-pipeline-repo CodeCommit リポジトリを作成します。

  2. AWS マネジメントコンソールにサインインし、AWS CodeCommit コンソールを開き、 CodeCommit リポジトリの をコピーURLしてローカルマシンにクローンします。詳細については、 AWS CodeCommit ドキュメントの「 AWS CodeCommit リポジトリに接続する」を参照してください。

アプリ開発者、一般 AWS
タスク説明必要なスキル

有効なIAMポリシーとロールを使用して RolesPipeline パイプラインをテストします。

  1. IAM ポリシーとロールのJSONファイルを作成します。リポジトリの role-example ディレクトリ GitHub IAM roles pipelineにあるサンプルを使用できます。

  2. 必要な設定でIAMポリシーとロールを定義します。重要: リポジトリの ReadMe GitHub IAM roles pipeline ファイルに記載されている形式に従ってください。

  3. 変更をroles-pipeline-repo CodeCommit リポジトリにプッシュします。

  4. RolesPipeline パイプラインの実装を検証します。

  5. IAM ポリシーとロールがアカウントに正しくデプロイされていることを確認します。

  6. IAM ポリシーまたはロールに関連付けられたアクセス許可の境界があるかどうかを検証します。詳細については、 IAMドキュメントのIAM「エンティティのアクセス許可の境界」を参照してください。

アプリ開発者、一般 AWS

無効なIAMポリシーとロールを使用して RolesPipeline パイプラインをテストします。

  1. roles-pipeline-repo CodeCommit リポジトリを変更し、無効なIAMロールまたはポリシーを含めます。例えば、存在しないアクションや無効なIAMポリシーバージョンを使用できます。

  2. パイプラインの実装を検証してください。IAM Access Analyzer は、無効なIAMポリシーまたはロールを検出した場合、検証段階でパイプラインを停止します。

アプリ開発者、一般 AWS
タスク説明必要なスキル

クリーンアップの準備をします。

S3 バケットを空にしてから、destroy コマンドを実行します。

アプリ開発者、一般 AWS

RolesStack スタックを削除します。

  1. RolesPipeline パイプラインは、IAMポリシーとロールをデプロイするRolesStackAWS CloudFormation スタックを作成します。RolesPipeline パイプラインを削除する前に、このスタックを削除する必要があります。

  2. AWS マネジメントコンソールにサインインし、AWS CloudFormation コンソールを開き、RolesStackスタックを選択し、削除を選択します

アプリ開発者、一般 AWS

RolesPipeline スタックを削除します。

RolesPipeline AWS CloudFormation スタックを削除するには、Github IAM roles pipelineリポジトリの ReadMe ファイルの指示に従います。

アプリ開発者、一般 AWS

関連リソース