IAM Access Analyzer ポリシーの生成
管理者またはデベロッパーは、IAM エンティティ (ユーザーまたはロール) に必要な権限を超えるアクセス許可を付与することがあります。IAM には、付与するアクセス許可を絞り込むのに役立つオプションがいくつか用意されています。1 つのオプションは、エンティティのアクセスアクティビティに基づく IAM ポリシーを生成することです。IAM Access Analyzer は AWS CloudTrail ログを確認し、指定した日付範囲内のロールが使用したアクセス許可を含むポリシーテンプレートを生成します。テンプレートを使用して、特定のユースケースをサポートするために必要なアクセス許可のみを付与する、きめ細かなアクセス許可を持つポリシーを作成できます。
トピック
ポリシー生成の仕組み
IAM Access Analyzer は CloudTrail イベントを分析して、IAM エンティティ (ユーザーまたはロール) が使用しているアクションとサービスを特定します。次に、そのアクティビティに基づく IAM ポリシーを生成します。エンティティにアタッチされていた広範なアクセス許可ポリシーを生成されたポリシーに置き換えると、エンティティのアクセス許可を絞り込むことができます。次に、ポリシー生成プロセスの概要を示します。
-
ポリシーテンプレート生成のための設定 – IAM Access Analyzer で AWS CloudTrail イベントの履歴を分析するために 、最大 90 日間の期間を指定します。既存のサービスロールを指定するか、新しいサービスロールを作成する必要があります。サービスロールは、IAM Access Analyzer が CloudTrail 証跡とサービスの最終アクセス情報にアクセスして、使用されたサービスとアクションを識別できるようにします。ポリシーを生成する前に、アカウントのイベントをログに記録する CloudTrail 証跡を指定する必要があります。CloudTrail データの IAM Access Analyzer クォータの詳細については、「IAM Access Analyzer クォータ」を参照してください。
-
ポリシーの生成 – IAM Access Analyzer は CloudTrail イベントのアクセスアクティビティに基づいてポリシーを生成します。
-
ポリシーの確認とカスタマイズ – ポリシーが生成された後、指定した日付範囲内にエンティティが使用したサービスとアクションを確認できます。ポリシーをさらにカスタマイズするには、アクセス許可を追加または削除し、リソースを指定し、ポリシーテンプレートに条件を追加します。
-
ポリシーの作成とアタッチ – マネージドポリシーを作成して 、生成されたポリシーを保存するオプションがあります。作成したポリシーは、ポリシーの生成に使用されたアクティビティを実行したユーザーまたはロールにアタッチできます。
サービスレベルとアクションレベルの情報
IAM Access Analyzer が IAM ポリシーを生成したとき、ポリシーをさらにカスタマイズするための情報を返します。ポリシーが生成されたとき、次の 2 つのカテゴリの情報を返すことができます。
-
アクションレベルの情報を持つポリシー – Amazon EC2 など一部の AWS サービスでは、IAM Access Analyzer によって、CloudTrail イベント内のアクションを識別し、生成されたポリシーで使用されるアクションを一覧表示することができます。サポートされているサービスのリストについては、「IAM Access Analyzer のポリシー生成サービス」を参照してください。一部のサービスでは、IAM Access Analyzer によって、生成されたポリシーにサービスのアクションを追加するように求められます。
-
サービスレベル情報を持つポリシー– IAM Access Analyzer は最終アクセス情報を使用して、最近使用したすべてのサービスを含むポリシーテンプレートを作成します。AWS Management Console を使用する場合、サービスを確認し、ポリシーを完了するためのアクションを追加するよう求められます。
各サービスのアクションのリストについては、「サービス認可リファレンス」の「AWS サービスのアクション、リソース、条件キー」を参照してください。
ポリシーの生成について知っておくべきこと
ポリシーを生成する前に、以下に示す重要な点を確認します。
-
CloudTrail 証跡を有効にする – アクセスアクティビティに基づいてポリシーを生成するには、自分のアカウントで CloudTrail 証跡を有効にする必要があります。CloudTrail 証跡を作成すると、CloudTrail は証跡に関連するイベントを、指定した Amazon S3 バケットに送信します。CloudTrail 証跡の作成方法については、「AWS CloudTrail ユーザーガイド」の「AWS アカウントの証跡の作成」を参照してください。
-
データイベントを使用できません — IAM Access Analyzer は、生成されたポリシーで、Amazon S3 データイベントなどのデータイベントのアクションレベルのアクティビティを識別しません。
-
PassRole –
iam:PassRole
アクションは CloudTrail によって追跡されず、生成されたポリシーには含まれません。 -
ポリシー生成時間を短縮する – ポリシーをより速く生成するには 、ポリシー生成の設定時に指定する日付範囲を短くします。
-
監査に CloudTrail を使用する – 監査の目的には、ポリシー生成を使用せず、CloudTrail を使用してください。CloudTrail の使用に関する詳細については、「AWS STS による IAM および AWS CloudTrail の API コールのログ記録」を参照してください。
-
拒否されたアクション - ポリシー生成により、拒否されたアクションを含むすべての CloudTrail イベントが確認されます。
-
IAM コンソールには 1 つのポリシー – IAM コンソールには 、一度に 1 つのポリシーを生成できます。
-
IAM コンソールに生成されたポリシーの可用性 – 生成されたポリシーは、生成後最大 7 日間 IAM コンソールで確認できます。7 日後に、新しいポリシーを生成する必要があります。
-
ポリシー生成クォータ – IAM Access Analyzer ポリシー生成クォータの詳細については、「IAM Access Analyzer クウォータ」を参照してください。
-
Amazon S3 の標準料金が適用されます — ポリシー生成機能を使用する場合、IAM Access Analyzer は S3 バケット内の CloudTrail ログを確認します。ポリシー生成のために CloudTrail ログにアクセスするための追加ストレージ料金はかかりません。AWS は S3 バケットに保存されている CloudTrail ログのリクエストとデータ転送に対して、Amazon S3 の標準料金を課金します。
-
AWS Control Tower サポート - ポリシー生成はポリシーを生成するための AWS Control Tower をサポートしていません。
ポリシーの生成に必要なアクセス許可
初めてポリシーを生成するために必要なアクセス許可は、その後の使用のためにポリシーを生成するために必要なアクセス許可とは異なります。
初回の設定
ポリシーを初めて生成するときは、既存の適切なサービスロールをアカウントで選択するか、新しいサービスロールを作成する必要があります。サービスロールは、IAM Access Analyzer が CloudTrail とアカウント内で最後にアクセスされたサービスの情報にアクセスできるようにします。ロールの作成と設定に必要なアクセス許可は管理者のみに付与されていることが望ましい状態です。したがって、管理者が最初のセットアップ時にサービスロールを作成することをお勧めします。サービスロールの作成に必要なアクセス許可の詳細については、「AWS サービスにアクセス許可を委任するためのロールの作成」を参照してください。
サービスロールを作成するときは、ロールに対して 2 つのポリシーを設定します。ロールが実行できる操作を指定する IAM アクセス許可ポリシーをロールにアタッチします。また、ロールを使用できるプリンシパルを指定するロール信頼ポリシーをロールにアタッチします。
最初のポリシーの例は、ポリシーを生成するために必要なサービスロールのアクセス許可ポリシーを示しています。2 番目のポリシーの例は、サービスロールに必要なロール信頼ポリシーを示しています。これらのポリシーを使用すると、ポリシーを生成するために AWS API や AWS CLI を使用してサービスロールを作成できます。IAM コンソールを使用してポリシー生成プロセスの一部としてサービスロールを作成すると、これらのポリシーが生成されます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudtrail:GetTrail", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetServiceLastAccessedDetails", "iam:GenerateServiceLastAccessedDetails" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }
次のポリシーの例は、IAM Access Analyzer がロールを担うことができるアクセス許可を与えるロール信頼ポリシーを示しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "access-analyzer.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
その後の使用について
AWS Management Console でポリシーを生成するには、ポリシー生成に使用されるサービスロールを IAM Access Analyzer に渡すことができるアクセス許可ポリシーが IAM ユーザーに必要です。iam:PassRole
には通常 iam:GetRole
が付随します。これにより、ユーザーは渡されるロールの詳細を取得できます。この例でユーザーが渡すことができるのは、指定されたアカウントに存在し、AccessAnalyzerMonitorServiceRole*
で始まる名前を持つロールに限ります。IAM ロールの AWS サービスへの受け渡しの詳細については、「AWS サービスにロールを渡すアクセス許可をユーザーに許可する」を参照してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUserToPassRole", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::
123456789012
:role/service-role/AccessAnalyzerMonitorServiceRole*" } ] }
AWS、AWS Management Console API、または AWS CLI でポリシーを生成するには、次のポリシーステートメントに示すように、次の IAM Access Analyzer のアクセス許可も必要です。
{ "Sid": "AllowUserToGeneratePolicy", "Effect": "Allow", "Action": [ "access-analyzer:CancelPolicyGeneration", "access-analyzer:GetGeneratedPolicy", "access-analyzer:ListPolicyGenerations", "access-analyzer:StartPolicyGeneration" ], "Resource": "*" }
初回およびその後の使用の両方について
AWS Management Console を使用してポリシーを生成する場合、次のポリシーステートメントに示すように、アカウント内の CloudTrail 証跡を一覧表示する cloudtrail:ListTrails
アクセス許可が必要です。
{ "Sid": "AllowUserToListTrails", "Effect": "Allow", "Action": [ "CloudTrail:ListTrails" ], "Resource": "*" }
CloudTrail アクティビティに基づくポリシーの生成 (コンソール)
IAM ユーザーまたはロールのポリシーを生成できます。
ステップ 1: CloudTrail アクティビティに基づいてポリシーを生成する
次の手順で、AWS Management Console を使用してロールのポリシーを生成します。
IAM ロールのポリシーを生成する
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
左側のナビゲーションペインで、[Roles] を選択します。
注記
IAM ユーザーのアクティビティに基づいてポリシーを生成する手順は、ほぼ同じです。そのためには、[ロール] ではなく [ユーザー] を選択します。
-
アカウントのロールのリストで、ポリシーの生成に使用するアクティビティを行なったロールの名前を選択します。
-
[アクセス許可] タブの [CloudTrail イベントに基づいてポリシーを生成] セクションで、[ポリシーの生成] を選択します。
-
[ポリシーの生成] ページで、ロールで実行されたアクションについて IAM Access Analyzer が CloudTrail イベントを分析する期間を指定します。最大 90 日の範囲を選択できます。ポリシー生成時間を短縮するために、可能な限り最短の期間を選択することをお勧めします。
-
CloudTrail アクセスセクションで、適切な既存のロールを選択するか、適切なロールが存在しない場合は新しいロールを作成します。このロールは、ユーザーの代わりに CloudTrail データにアクセスするためのアクセス許可を IAM Access Analyzer に与え、アクセスを確認し、使用されているサービスとアクションを特定します。このロールに必要なアクセス許可の詳細については、「ポリシーの生成に必要なアクセス許可」を参照してください。
-
[分析対象の CloudTrail 証跡] セクションで、アカウントのイベントをログに記録する CloudTrail 証跡を指定します。
別のアカウントにログを保存する CloudTrail 証跡を選択すると、クロスアカウントアクセスに関する情報ボックスが表示されます。クロスアカウントアクセスでは、追加の設定が必要です。詳細については、このトピックの後半の「Choose a role for cross-account access」を参照してください。
-
[ポリシーの生成] を選択します。
-
ポリシー生成中は、[アクセス許可] タブの [ロール] [概要] ページに戻ります。[ポリシー要求の詳細] セクションの状態に [成功] が表示されるまで待ち、[生成されたポリシーを表示] を選択します。生成されたポリシーは、最大 7 日間表示できます。別のポリシーを生成すると、既存のポリシーは生成した新しいポリシーに置き換えられます。
ステップ 2: アクセス許可を確認し、使用するサービスのアクションを追加する
ロールによって使用されたことを IAM Access Analyzer が特定したサービスとアクションを確認します。生成されたポリシーテンプレートに使用されたすべてのサービスに対するアクションを追加できます。
-
以下のセクションを確認します。
-
[権限の確認] ページで、[生成されたポリシーに含まれるアクション] のリストを確認します。リストには、指定した日付範囲内でロールによって使用されたと IAM Access Analyzer が特定したサービスおよびアクションが表示されます 。
-
[使用されたサービス] セクションには、指定された日付範囲内のロールによって使用されたと IAM Access Analyzer が特定した追加のサービスが表示されます。このセクションのサービスのリストからは、どのアクションが使用されたかの情報が得られない場合があります。リストされた各サービスのメニューを使用して、ポリシーに含めるアクションを手動で選択します。
-
-
アクションの追加が完了したら、[次へ] をクリックします。
ステップ 3: 生成されたポリシーをさらにカスタマイズする
アクセス許可を追加または削除したり、リソースを指定したりして、ポリシーをさらにカスタマイズできます。
生成されたポリシーをカスタマイズするには
-
ポリシーテンプレートを更新します。次の図に示すように、ポリシーテンプレートには、リソースレベルのアクセス許可をサポートするアクション用のリソース ARN プレースホルダーが含まれています。リソースレベルのアクセス許可とは、ユーザーがアクションを実行できるリソースを指定できる機能を意味します。リソースレベルのアクセス許可をサポートするアクションについては、ARN を使用して、ポリシーで個々のリソースを指定することをお勧めします。プレースホルダーリソース ARN は、ユースケース用の有効なリソース ARN に置き換えることができます。
アクションがリソースレベルのアクセス許可をサポートしていない場合は、ワイルドカード (
*
) を使用して、すべてのリソースがアクションの影響を受ける可能性があることを指定する必要があります。どの AWS サービスがリソースレベルのアクセス許可をサポートしているかを確認するには、「IAM と連携するAWS サービス」を参照してください。各サービスのアクションの一覧と、どのアクションがリソースレベルのアクセス許可をサポートしているかについては、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。 -
(オプション) テンプレートの JSON ポリシーステートメントを追加、変更、または削除します。JSON ポリシーの記述の詳細については、「IAM ポリシーの作成(コンソール)」を参照してください。
-
ポリシーテンプレートのカスタマイズ完了後、以下のオプションがあります。
-
(オプション) テンプレート内の JSON をコピーして、[生成されたポリシー] ページの外部で別途使用できます。たとえば、JSON を使用して別のアカウントでポリシーを作成する場合などです。テンプレート内のポリシーが JSON ポリシーの 6,144 文字の制限を超える場合、ポリシーは複数のポリシーに分割されます。
-
[次へ] をクリックして、同じアカウントでマネージドポリシーを確認して作成します。
-
ステップ 4: マネージドポリシーを確認して作成する
IAM ポリシーを作成してアタッチするアクセス許可がある場合は、生成されたポリシーからマネージドポリシーを作成できます。その後、アカウントのユーザーまたはロールにポリシーをアタッチできます。
ポリシーを確認して作成するには
-
[マネージドポリシーの確認と作成] ページに作成するポリシーの [名前] と [説明] (オプション) を入力します。
-
(オプション) [概要] セクションでは、ポリシーに含まれるアクセス許可を確認できます。
-
(オプション) タグをキー - 値のペアとしてアタッチして、メタデータをポリシーに追加します。IAM でのタグの使用の詳細については、「IAM リソースのタグ付け」を参照してください。
-
完了したら、次のいずれかの操作を行います。
-
新しいポリシーは、ポリシーの生成に使用されたロールに直接アタッチできます。これを行うには、ページ下部の [ポリシーを
YourRoleName
にアタッチする] の横にあるチェックボックスをオンにします。次に、[ポリシーを作成してアタッチ] を選択します。 -
あるいは、[ポリシーの作成] を選択します。作成したポリシーは、IAM コンソールの [ポリシー] ナビゲーションペインのポリシーの一覧に表示されます 。
-
-
作成したポリシーは、アカウントのエンティティにアタッチできます。ポリシーをアタッチした後、エンティティにアタッチされている可能性がある他の広範囲過ぎるポリシーを削除できます。マネージドポリシーをユーザーにアタッチする方法については、「IAM ID アクセス許可の追加(コンソール)」を参照してください。
別のアカウントの AWS CloudTrail データを使用してポリシーを生成する
セントラルアカウントにデータを保存する CloudTrail トレイルを作成して、管理活動を合理化できます。たとえば、AWS Organizations を使用して、その組織内のすべての AWS アカウント の全イベントをログに記録する証跡を作成できます。証跡はセントラルアカウントに属します。CloudTrail ログデータが格納されているアカウントとは異なるアカウントでユーザーまたはロールのポリシーを生成する場合は、クロスアカウントアクセスを許可する必要があります。これを行うには、CloudTrail ログに対する IAM Access Analyzer のアクセス許可を付与するロールとバケットポリシーの両方が必要です。組織の証跡の作成についての詳細は、 ユーザーガイドの「組織の証跡の作成」を参照してください。
この例では、アカウント A のユーザーまたはロールのポリシーを生成するとします。アカウント A の CloudTrail トレイルは、アカウント B のバケットに CloudTrail ログを格納します。ポリシーを生成する前に、次の更新を行う必要があります。
-
既存のロールを選択するか、アカウント B(CloudTrail ログが格納されている)のバケットへの IAM Access Analyzer アクセスを許可する新しいサービスロールを作成します。
-
アカウント B で Amazon S3 バケットオブジェクトの所有権およびバケットのアクセス許可ポリシーを確認して、IAM Access Analyzer がバケット内のオブジェクトにアクセスできるようにします。
ステップ 1: クロスアカウントアクセス用のロールを選択または作成する
-
リポジトリの [ポリシーを生成する] 画面では、既存のロールを使用するは、必要な権限を持つロールがアカウントに存在する場合、事前に選択されています。それ以外の場合は [新しいサービスロールの作成と使用] を選択します。新しいロールは、アカウント B の CloudTrail ログへの IAM アクセスアナライザのアクセス権限を付与するために使用されます。
ステップ 2: アカウント B で Amazon S3 バケットの設定を確認または更新します
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
バケットリストで、CloudTrail トレイルログが保存されるバケットの名前を選択します。
-
[アクセス許可] タブを選択し、[オブジェクトの所有権] セクションに移動します。
Amazon S3 オブジェクトの所有権のバケット設定を使用して、バケットにアップロードするオブジェクトの所有権を制御します。デフォルトでは、他の AWS アカウント がバケットにオブジェクトをアップロードした場合、アップロードしたアカウントがそのオブジェクトを所有します。ポリシーを生成するには、バケットの所有者がバケット内のすべてのオブジェクトを所有している必要があります。ご利用の ACL ユースケースによっては、バケットの [オブジェクトの所有権] の設定を変更する必要があるかもしれません。[オブジェクトの所有権] を次のオプションのいずれかに設定します。
-
[バケット所有者の強制] (推奨)
-
[バケット所有者優先]
重要
ポリシーを正常に生成するには、バケット内のオブジェクトをバケット所有者が所有している必要があります。[バケット所有者優先] を選択した場合、オブジェクトの所有権が変更された後の期間のみポリシーを生成することができます。
Amazon S3 におけるオブジェクトの所有権の詳細については、「Amazon S3 ユーザーガイド」の「オブジェクトの所有権の制御およびバケットに対する ACL の無効化」を参照してください。
-
-
アカウント B の Amazon S3 バケットポリシーにアクセス許可を追加して、アカウント A のロールへのアクセスを許可します。
次のポリシー例では、
ListBucket
という名前のバケットに対してGetObject
とamzn-s3-demo-bucket
を許可しています。バケットにアクセスするロールが組織内のアカウントに属し、名前がAccessAnalyzerMonitorServiceRole
で始まる場合にアクセスを許可します。Resource
要素でaws:PrincipalArn
をCondition
として使用すると、ロールがアカウント A に属している場合にのみ、アカウントのアクティビティにアクセスできるようになります。amzn-s3-demo-bucket
をバケット名に、optional-prefix
をバケットのオプション プレフィックスに、organization-id
を組織 ID に置き換えることができます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyGenerationBucketPolicy", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/optional-prefix
/AWSLogs/organization-id
/${aws:PrincipalAccount}/*" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "organization-id
" }, "StringLike": { "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole*" } } } ] } -
AWS KMS を使用してログを暗号化する場合は、次のポリシーの例に示すように、CloudTrail ログを保存するアカウントで AWS KMS キーポリシーを更新して、IAM AccessAnalyzer にキーを使用するためのアクセスを許可します。
CROSS_ACCOUNT_ORG_TRAIL_FULL_ARN
を証跡のARNに置き換え、organization-id
を組織 ID に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudtrail:arn": "
CROSS_ACCOUNT_ORG_TRAIL_FULL_ARN
", "aws:PrincipalOrgID": "organization-id
" }, "StringLike": { "kms:ViaService": [ "access-analyzer.*.amazonaws.com", "s3.*.amazonaws.com" ], "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole*" } } } ] }
CloudTrail アクティビティに基づくポリシーの生成 (AWS CLI)
次のコマンドを使用して、AWS CLI を使用したポリシーを生成できます。
ポリシーを生成するには
生成されたポリシーを表示するには
ポリシー生成要求を取り消すには
ポリシー生成要求のリストを表示するには
CloudTrail アクティビティに基づいたポリシーの生成 (AWS API)
以下のオペレーションを使用して、AWS API を使用したポリシーの生成ができます。