翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions を使用して IAM アクセスアナライザーで IAM ポリシーを動的に生成
作成者:Thomas Scott (AWS), Adil El Kanabi (AWS), Koen van Blijderveen (AWS), and Rafal Pawlaszek (AWS)
コードリポジトリ: 自動 IAM Access Analyzer ロールポリシージェネレーター | 環境:PoC またはパイロット | テクノロジー:セキュリティ、アイデンティティ、コンプライアンス、サーバーレス、分析 |
AWS サービス:AWS IAM Access Analyzer、AWS Lambda、AWS Step Functions、AWS Identity and Access Management |
[概要]
最小特権は、タスクを実行するために最低限必要な権限を付与する際の、セキュリティのベストプラクティスです。すでにアクティブな Amazon Web Services (AWS) アカウントに最小特権アクセスを実装するのは難しい場合があります。なぜなら、権限を変更してユーザーが職務を遂行することを意図せずにブロックしたくないからです。AWS Identity and Access Management (IAM) ポリシーの変更を実装する前に、アカウントユーザーが実行しているアクションとリソースを理解する必要があります。
このパターンは、チームの生産性を妨げたり低下させたりすることなく、最小特権アクセスの原則を適用できるように設計されています。IAM Access Analyzer と AWS Step Functions を使用して、アカウントで現在実行されているアクションに基づいて、ロールの up-to-date IAM ポリシーを動的に生成する方法について説明します。新しいポリシーは、現在のアクティビティを許可する一方で、不必要で昇格された権限は削除するように設計されています。生成されたポリシーは、許可ルールと拒否ルールを定義することでカスタマイズでき、ソリューションはカスタムルールを統合します。
このパターンには、AWS Cloud Development Kit (AWS CDK) または HashiCorp CDK for Terraform (CDKTF) を使用してソリューションを実装するためのオプションが含まれています。その後、継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインを使用して、新しいポリシーをロールに関連付けることができます。マルチアカウントアーキテクチャを使用している場合は、ロールの更新された IAM ポリシーを生成したい任意のアカウントにこのソリューションをデプロイできるため、AWS クラウド環境全体のセキュリティが強化されます。
前提条件と制限
前提条件
CloudTrail 証跡が有効になっているアクティブな AWS アカウント。
以下に対する IAM 権限:
Step Functions ワークフローを作成してデプロイします。詳細については、「AWS Step Functions のアクション、リソース、および条件キー」 (Step Functions ドキュメント)を参照してください。
AWS Lambda 関数を作成します。詳細については、「実行ロールおよびユーザーアクセス許可」 (Lambda ドキュメント)を参照してください。
IAM ロールを作成します。詳細については、「ロールを作成して、IAM ユーザーにアクセス許可を委任する」 (IAM ドキュメント)を参照してください。
npm がインストールされています。詳細については、「Node.js と npm のダウンロードとインストール
」 (npm ドキュメント) を参照してください。 このソリューションを AWS CDK でデプロイする場合 (オプション 1):
AWS CDK ツールキット、インストールおよび設定 詳細については、「AWS CDK をインストールする」 (AWS CDK ドキュメント) を参照してください。
このソリューションを CDKTF でデプロイ (オプション 2):
CDKTF がインストールされ、設定されています。詳細については、「Terraform 用 CDK のインストール
」 (CDKTF ドキュメント)」を参照してください。 Terraform がインストールされ、設定されています。詳細については、「使用の開始
」 (Terraform ドキュメント)を参照してください。
AWS アカウントにインストールおよび設定された AWS コマンドラインインターフェイス (AWS CLI)。詳細については、「AWS CLI の最新バージョンをインストールまたはアップデート」 (AWS CLIのドキュメント) を参照してください。
制約事項
このパターンでは、新しい IAM ポリシーはロールには適用されません。このソリューションの最後に、新しい IAM ポリシーが CodeCommit リポジトリに保存されます。CI/CD パイプラインを使用して、アカウント内のロールにポリシーを適用できます。
アーキテクチャ
ターゲット アーキテクチャ
定期的にスケジュールされた Amazon EventBridge イベントルールは、Step Functions ワークフローを開始します。この再生スケジュールは、このソリューションの設定の一環として定義します。
Step Functions ワークフローでは、Lambda 関数は CloudTrail ログ内のアカウントアクティビティを分析するときに使用する日付範囲を生成します。
次のワークフローステップでは IAM アクセスアナライザー API を呼び出し、ポリシーの生成を開始します。
セットアップ時に指定したロールの Amazon リソースネーム (ARN) を使用して、IAM Access Analyzer は指定された日付レート内のアクティビティの CloudTrail ログを分析します。アクティビティに基づいて、IAM Access Analyzer は、指定された日付範囲にロールが使用するアクションとサービスのみを許可する IAM ポリシーを生成します。このステップが完了すると、ジョブ ID が生成されます。
次のワークフローステップでは、30 秒ごとにジョブ ID がチェックされます。ジョブ ID が検出されると、このステップではジョブ ID を使用して IAM Access Analyzer API を呼び出し、新しい IAM ポリシーを取得します。IAM アクセスアナライザーはポリシーを JSON ファイルとして返します。
次のワークフローステップでは、<IAM ロール name>/policy.json ファイルを Amazon Simple Storage Service (Amazon S3) バケットに配置します。この S3 バケットは、このソリューションの設定の一環として定義します。
Amazon S3 イベント通知は Lambda 関数を開始します。
Lambda 関数は S3 バケットからポリシーを取得し、allow.json ファイルと deny.json ファイルで定義したカスタムルールを統合し、更新されたポリシーを にプッシュします CodeCommit。このソリューションの設定の一環として、 CodeCommit リポジトリ、ブランチ、フォルダパスを定義します。
ツール
AWS サービス
AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS CDK Toolkit は、AWS Cloud Development Kit (AWS CDK) アプリケーションの操作に役立つコマンドラインクラウド開発キットです。
AWS CloudTrail は、AWS アカウントのガバナンス、コンプライアンス、運用リスクを監査するのに役立ちます。
AWS CodeCommit は、独自のソース管理システムを管理することなく、Git リポジトリをプライベートに保存および管理できるバージョン管理サービスです。
「AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
「AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。このパターンでは、IAM の機能である IAM Access Analyzer を使用して CloudTrail ログを分析し、IAM エンティティ (ユーザーまたはロール) によって使用されたアクションとサービスを特定し、そのアクティビティに基づく IAM ポリシーを生成します。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
Amazon Simple Storage Service (Amazon S3) は、量にかかわらず、データを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
AWS Step Functionsは、AWS Lambda関数と他のAWS サービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。このパターンでは、Step Functions の 「AWS SDK サービス統合」 を使用して、ワークフローからサービス API アクションを呼び出します。
その他のツール
「CDK for Terraform (CDKTF)
」 は、Python や Typescript などの一般的なプログラミング言語を使用して、Infrastructure as Code (IaC) として定義するのに役立ちます。 Lerna
は、同じリポジトリから複数の JavaScript または TypeScript パッケージを管理および公開するためのビルドシステムです。 Node.js
は、スケーラブルなネットワークアプリケーションを構築するために設計されたイベント駆動型の JavaScript ランタイム環境です。 「npm
」 は Node.js 環境で動作するソフトウェアレジストリで、パッケージの共有や借用、プライベートパッケージのデプロイ管理に使用されます。
コードリポジトリ
このパターンのコードは、 GitHub 「自動 IAM アクセスアナライザーロールポリシージェネレーター
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリを複製します。 | 次のコマンドは、自動 IAM アクセス分析ロールポリシージェネレーター
| アプリ開発者 |
Lerna をインストールします。 | 以下のコマンドで Lerna をインストールします。
| アプリ開発者 |
依存関係を設定します。 | 次のコマンドでリポジトリの依存関係をインストールします。
| アプリ開発者 |
コードをビルドします。 | 次のコマンドは、Lambda 関数の zip パッケージをテスト、ビルド、準備します。
| アプリ開発者 |
コンストラクトをビルドします。 | 次のコマンドは、AWS CDK と CDKTF の両方のアプリケーションを合成するインフラストラクチャを構築します。
| |
任意のカスタム権限を設定します。 | 複製したリポジトリの repo フォルダーで allow.json ファイルと deny.json ファイルを編集して、ロールのカスタム権限を定義します。allow.json ファイルと deny.json ファイルに同じ権限が含まれている場合は、拒否権限が適用されます。 | AWS 管理者、アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK スタックをデプロイします。 | 次のコマンドは、AWS を介してインフラストラクチャをデプロイします CloudFormation。以下のパラメータを指定します。
注 — 角括弧はオプションパラメータを表します。 | アプリ開発者 |
(オプション) 新しいポリシーが適用されるまでお待ちください。 | トレイルにそのロールの履歴アクティビティが妥当な量含まれていない場合は、IAM Access Analyzer が正確なポリシーを生成するのに十分なアクティビティがログされていることを確認するまでお待ちください。ロールがアカウント内で一定期間アクティブになっていれば、この待機期間は必要ない可能性があります。 | AWS 管理者 |
生成されたポリシーを手動で確認します。 | CodeCommit リポジトリで、生成された <ROLE_ARN>.json ファイルを確認し、許可および拒否のアクセス許可がロールに適していることを確認します。 | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Terraform テンプレートを合成します。 | 以下のコマンドは Terraform テンプレートを合成します。
| アプリ開発者 |
Terraform テンプレートをデプロイします。 | 次のコマンドは、CDKTF で定義されているインフラストラクチャが格納されているディレクトリに移動します。
次のコマンドは、ターゲット AWS アカウントにインフラストラクチャをデプロイします。以下のパラメータを指定します。
注 — 角括弧はオプションパラメータを表します。 | アプリ開発者 |
(オプション) 新しいポリシーが適用されるまでお待ちください。 | トレイルにそのロールの履歴アクティビティが妥当な量含まれていない場合は、IAM Access Analyzer が正確なポリシーを生成するのに十分なアクティビティがログされていることを確認するまでお待ちください。ロールがアカウント内で一定期間アクティブになっていれば、この待機期間は必要ない可能性があります。 | AWS 管理者 |
生成されたポリシーを手動で確認します。 | CodeCommit リポジトリで、生成された <ROLE_ARN>.json ファイルを確認し、許可および拒否のアクセス許可がロールに適していることを確認します。 | AWS 管理者 |
関連リソース
「AWS リソース」
その他のリソース
「Terraform 用 CDK
」 (Terraform ウェブサイト)