Step Functions を使用して IAM アクセスアナライザーで IAM ポリシーを動的に生成 - AWS 規範ガイダンス

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

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 クラウド環境全体のセキュリティが強化されます。

前提条件と制限

前提条件

制約事項

  • このパターンでは、新しい IAM ポリシーはロールには適用されません。このソリューションの最後に、新しい IAM ポリシーが CodeCommit リポジトリに保存されます。CI/CD パイプラインを使用して、アカウント内のロールにポリシーを適用できます。

アーキテクチャ

ターゲット アーキテクチャ

Step Functions ワークフローは、新しいポリシーを生成し、 に保存します CodeCommit。
  1. 定期的にスケジュールされた Amazon EventBridge イベントルールは、Step Functions ワークフローを開始します。この再生スケジュールは、このソリューションの設定の一環として定義します。

  2. Step Functions ワークフローでは、Lambda 関数は CloudTrail ログ内のアカウントアクティビティを分析するときに使用する日付範囲を生成します。

  3. 次のワークフローステップでは IAM アクセスアナライザー API を呼び出し、ポリシーの生成を開始します。

  4. セットアップ時に指定したロールの Amazon リソースネーム (ARN) を使用して、IAM Access Analyzer は指定された日付レート内のアクティビティの CloudTrail ログを分析します。アクティビティに基づいて、IAM Access Analyzer は、指定された日付範囲にロールが使用するアクションとサービスのみを許可する IAM ポリシーを生成します。このステップが完了すると、ジョブ ID が生成されます。

  5. 次のワークフローステップでは、30 秒ごとにジョブ ID がチェックされます。ジョブ ID が検出されると、このステップではジョブ ID を使用して IAM Access Analyzer API を呼び出し、新しい IAM ポリシーを取得します。IAM アクセスアナライザーはポリシーを JSON ファイルとして返します。

  6. 次のワークフローステップでは、<IAM ロール name>/policy.json ファイルを Amazon Simple Storage Service (Amazon S3) バケットに配置します。この S3 バケットは、このソリューションの設定の一環として定義します。

  7. Amazon S3 イベント通知は Lambda 関数を開始します。

  8. 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 アクセス分析ロールポリシージェネレーター (GitHub) リポジトリをクローンします。

git clone https://github.com/aws-samples/automated-iam-access-analyzer.git
アプリ開発者

Lerna をインストールします。

以下のコマンドで Lerna をインストールします。

npm i -g lerna
アプリ開発者

依存関係を設定します。

次のコマンドでリポジトリの依存関係をインストールします。

cd automated-iam-access-advisor/ npm install && npm run bootstrap
アプリ開発者

コードをビルドします。

次のコマンドは、Lambda 関数の zip パッケージをテスト、ビルド、準備します。

npm run test:code npm run build:code npm run pack:code
アプリ開発者

コンストラクトをビルドします。

次のコマンドは、AWS CDK と CDKTF の両方のアプリケーションを合成するインフラストラクチャを構築します。

npm run build:infra

任意のカスタム権限を設定します。

複製したリポジトリの repo フォルダーで allow.json ファイルと deny.json ファイルを編集して、ロールのカスタム権限を定義します。allow.json ファイルと deny.json ファイルに同じ権限が含まれている場合は、拒否権限が適用されます。

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

AWS CDK スタックをデプロイします。

次のコマンドは、AWS を介してインフラストラクチャをデプロイします CloudFormation。以下のパラメータを指定します。

  • <NAME_OF_ROLE> — 新しいポリシーを作成している IAM ロールの ARN。

  • <TRAIL_ARN> – ロールアクティビティが保存されている CloudTrail 証跡の ARN。

  • <CRON_EXPRESSION_TO_RUN_SOLUTION> — ポリシーの再生スケジュールを定義する Cron 式。Step Functions ワークフローはこのスケジュールで実行されます。

  • <TRAIL_LOOKBACK> — ロールの権限を評価する際に履歴を振り返る期間(日単位)。

cd infra/cdk cdk deploy —-parameters roleArn=<NAME_OF_ROLE> \ —-parameters trailArn=<TRAIL_ARN> \ --parameters schedule=<CRON_EXPRESSION_TO_RUN_SOLUTION> \ [ --parameters trailLookBack=<TRAIL_LOOKBACK> ]

注 — 角括弧はオプションパラメータを表します。

アプリ開発者

(オプション) 新しいポリシーが適用されるまでお待ちください。

トレイルにそのロールの履歴アクティビティが妥当な量含まれていない場合は、IAM Access Analyzer が正確なポリシーを生成するのに十分なアクティビティがログされていることを確認するまでお待ちください。ロールがアカウント内で一定期間アクティブになっていれば、この待機期間は必要ない可能性があります。

AWS 管理者

生成されたポリシーを手動で確認します。

CodeCommit リポジトリで、生成された <ROLE_ARN>.json ファイルを確認し、許可および拒否のアクセス許可がロールに適していることを確認します。

AWS 管理者
タスク説明必要なスキル

Terraform テンプレートを合成します。

以下のコマンドは Terraform テンプレートを合成します。

lerna exec cdktf synth --scope @aiaa/tfm
アプリ開発者

Terraform テンプレートをデプロイします。

次のコマンドは、CDKTF で定義されているインフラストラクチャが格納されているディレクトリに移動します。

cd infra/cdktf

次のコマンドは、ターゲット AWS アカウントにインフラストラクチャをデプロイします。以下のパラメータを指定します。

  • <account_ID> — ターゲットアカウントの ID。

  • <region> -ターゲット AWS リージョン。

  • <selected_role_ARN> — 新しいポリシーを作成している IAM ロールの ARN。

  • <trail_ARN> – ロールアクティビティが保存されている CloudTrail 証跡の ARN。

  • <schedule_expression> — ポリシーの再生スケジュールを定義する Cron 式。Step Functions ワークフローはこのスケジュールで実行されます。

  • <trail_look_back> — ロールの権限を評価する際に履歴を振り返る期間(日単位)。

TF_VAR_accountId=<account_ID> \ TF_VAR_region=<region> \ TF_VAR_roleArns=<selected_role_ARN> \ TF_VAR_trailArn=<trail_ARN> \ TF_VAR_schedule=<schedule_expression> \ [ TF_VAR_trailLookBack=<trail_look_back> ] \ cdktf deploy

注 — 角括弧はオプションパラメータを表します。

アプリ開発者

(オプション) 新しいポリシーが適用されるまでお待ちください。

トレイルにそのロールの履歴アクティビティが妥当な量含まれていない場合は、IAM Access Analyzer が正確なポリシーを生成するのに十分なアクティビティがログされていることを確認するまでお待ちください。ロールがアカウント内で一定期間アクティブになっていれば、この待機期間は必要ない可能性があります。

AWS 管理者

生成されたポリシーを手動で確認します。

CodeCommit リポジトリで、生成された <ROLE_ARN>.json ファイルを確認し、許可および拒否のアクセス許可がロールに適していることを確認します。

AWS 管理者

関連リソース

AWS リソース

その他のリソース