IAM ポリシーのトラブルシューティング - AWS Identity and Access Management

IAM ポリシーのトラブルシューティング

ポリシーは、ID やリソースにアタッチされるとそれらのアクセス許可を定義する、AWS のエンティティです。AWS は、ユーザーなどのプリンシパルがリクエストを行うときに、これらのポリシーを評価します。ポリシーでの許可により、リクエストが許可されるか拒否されるかが決まります。ポリシーはアイデンティティベースのポリシーとしてプリンシパルにアタッチされるか、リソースベースのポリシーとしてリソースにアタッチされた JSON ドキュメントとして AWS に保存されます。IAM グループ、ユーザー、ロールなどのプリンシパル (またはアイデンティティ) に、アイデンティティベースのポリシーをアタッチできます。アイデンティティベースのポリシーには、AWS 管理ポリシー、カスタマー管理ポリシー、およびインラインポリシーがあります。AWS Management Console で、[Visual] および [JSON] エディタオプションの両方を使用してカスタマー管理ポリシーの作成と編集ができます。AWS Management Consoleでポリシーを表示すると、そのポリシーによって付与されたアクセス許可の概要を表示できます。ビジュアルエディタとポリシー概要を使用して、IAM ポリシーの管理中に発生した一般的なエラーの診断と修正に役立てることができます。

すべての IAM ポリシーは、JavaScript Object Notation (JSON) のルールで始まる構文を使用して保存されることに注意してください。ポリシーを作成または管理するために、この構文を理解する必要はありません。AWS Management Consoleのビジュアルエディタを使用してポリシーを作成または編集できます。IAM ポリシーでの JSON 構文の詳細については、「IAM JSON ポリシー言語の文法 」を参照してください。

IAM ポリシーのトラブルシューティングに関するトピック

ビジュアルエディタを使用したトラブルシューティング

カスタマー管理ポリシーを作成または編集するときには、[ビジュアル] エディタの情報を使用して、ポリシーのエラーのトラブルシューティングに役立てることができます。ビジュアルエディタを使用してポリシーを作成する方法の例については、「アイデンティティへのアクセスコントロール」を参照してください。

ポリシーの再構成

ポリシーを作成すると、AWS はポリシーを検証、処理、変換してから保存します。AWS がユーザークエリに対してポリシーを返すか、コンソールに表示するときに、AWS はポリシーによって付与されたアクセス許可を変更することなく、ポリシーを人間が読み取れる形式に変換し直します。その結果、ポリシーのビジュアルエディタまたは [JSON] タブで表示されるポリシーに違いが発生する場合があります。ビジュアルエディタのアクセス許可ブロックは追加、削除、または順序変更でき、ブロック内のコンテンツは最適化できます。[JSON] タブで、重要でない空白は削除でき、JSON マップ内の要素は順序を変更できます。さらに、プリンシパル要素内の AWS アカウント ID は AWS アカウントのルートユーザー の ARN に置き換えることができます。このような変更の可能性があるため、JSON ポリシードキュメントを文字列として比較しないでください。

AWS Management Console でカスタマー管理ポリシーを作成するときに、[JSON] エディタで操作が完結するように選択できます。[Visual] エディタで一切変更を加えることなく、JSON タブで [次へ] を選択すると、ポリシーが再構成される可能性が低くなります。ただし、ポリシーを作成し、[Visual] エディタを使用して変更を加えるか、[Visual] エディタから [次へ] を選択する場合、IAM はビジュアルエディタでの外観を最適化するために、ポリシーを再構成する可能性があります。

この再構成は編集セッション内のみに存在するものであり、自動的には保存されません。

編集セッションでポリシーが再構成された場合、IAM は次の状況に基づいて再構成を保存するかどうかを決定します。

このエディターオプションの使用 ポリシーを編集する場合 次に、このタブから [次へ] を選択します [変更の保存] を選択する場合
Visual 編集されます Visual ポリシーが再構成されます
Visual 編集されます JSON ポリシーが再構成されます
Visual 編集されません Visual ポリシーが再構成されます
JSON 編集されます Visual ポリシーが再構成されます
JSON 編集されます JSON ポリシー構造は変更されません
JSON 編集されません JSON ポリシー構造は変更されません

IAM は、複雑なポリシーや、複数のサービス、リソースタイプ、または条件キーを許可するアクセス許可ブロックまたはステートメントを持つポリシーを再構成する場合があります。

ビジュアルエディタでのリソース ARN の選択

ビジュアルエディタを使用してポリシーを作成または編集するときは、最初にサービスを選択し、そのサービスからアクションを選択する必要があります。選択したサービスとアクションが特定のリソースの選択をサポートしている場合、ビジュアルエディタに、サポートされるリソースタイプが一覧表示されます。次に、[Add ARN (ARN の追加)] を選択して、リソースの詳細を提供できます。リソースタイプの ARN を追加するために、以下のオプションから選択できます。

  • ARN ビルダーの使用 – リソースタイプに基づいて、ARN を構築するためのさまざまなフィールドが表示される場合があります。[Any (任意)] を選択して、指定した設定の任意の値に対するアクセス許可を付与することもできます。たとえば、Amazon EC2 の [Read (読み取り)] アクセスレベルグループを選択した場合、ポリシーのアクションは instance リソースタイプをサポートします。リソースの [Region (リージョン)]、[Account (アカウント)]、[インスタンス ID] の各値を指定する必要があります。アカウント ID を指定するが、リージョンとインスタンス ID に [Any (任意)] を選択する場合、ポリシーでアカウントの任意のインスタンスにアクセス許可が付与されます。

  • ARN の入力または貼り付けAmazon リソースネーム (ARN) によりリソースを指定できます。ワイルドカード文字 (*) を ARN の任意のフィールドに含めることができます (コロンの各ペアの間)。詳細については、「IAM JSON ポリシー要素Resource」を参照してください。

ビジュアルエディタでのアクセス許可の拒否

デフォルトでは、ビジュアルエディタを使用して作成するポリシーにより、選択したアクションが許可されます。その代わりに選択したアクションを拒否するには、[Switch to deny permissions (アクセス許可の拒否に切り替え)] を選択します。リクエストはデフォルトでは拒否されるため、ユーザーが必要とするアクションとリソースに対するアクセス許可のみを付与することを、セキュリティのベストプラクティスとしてお勧めします。別のステートメントまたはポリシーによって個別に許可されるアクセス許可を上書きする場合のみ、アクセス許可を拒否するステートメントを作成する必要があります。これにより、アクセス許可のトラブルシューティングがより困難になる可能性があるため、拒否ステートメントの数は最小限に制限することをお勧めします。IAM がポリシーのロジックを評価する方法の詳細については、「ポリシーの評価論理」を参照してください。

注記

デフォルトでは、AWS アカウントのルートユーザー のみが、そのアカウントのすべてのリソースにアクセスできます。ワイルドカード文字 () を ARN の任意のフィールドに含めることができます (コロンの各ペアの間)。

ビジュアルエディタで複数のサービスの指定

ビジュアルエディタを使用してポリシーを作成するときに、一度に 1 つのサービスのみを選択できます。これは、その後ビジュアルエディタではその 1 つのサービス用のアクションから選択できるため、ベストプラクティスとなります。次に、そのサービスと選択されたアクションでサポートされているリソースから選択できます。これにより、ポリシーの作成とトラブルシューティングが容易になります。

JSON 構文に精通している場合は、ワイルドカード文字 (*) を使用して複数のサービスを手動で指定することもできます。たとえば、「Code*」と入力すると、CodeBuildCodeCommit など、Code で始まるすべてのサービスに対するアクセス許可を付与できます。ただし、次にアクションとリソースの ARN を入力して、ポリシーを完了する必要があります。さらに、ポリシーを保存すると、各サービスが別のアクセス許可ブロックに含まれるように、ポリシーが再構成される場合があります。

または、JSON 構文 (ワイルドカードなど) をサービスに使用するには、[JSON] エディタオプションを使用してポリシーを作成、編集、保存します。

ビジュアルエディタでのポリシーサイズの縮小

ビジュアルエディタを使用してポリシーを作成する場合、IAM はポリシーを保存する JSON ドキュメントを作成します。このドキュメントを表示するには、[JSON] エディタオプションに切り替えます。この JSON ドキュメントがポリシーのサイズ制限を超える場合、ビジュアルエディタにはエラーメッセージが表示され、ポリシーを確認または保存することはできません。管理ポリシーのサイズの IAM 制限を表示する方法については、「IAM 文字制限および STS 文字制限」を参照してください。

ビジュアルエディタでポリシーのサイズを減らすには、ポリシーを編集するか、アクセス許可ブロックを別のポリシーに移動します。エラーメッセージには、ポリシードキュメントに含まれている文字数が含まれ、この情報を使用してポリシーのサイズを縮小することができます。

ビジュアルエディタでの認識されないサービス、アクション、またはリソースタイプの修正

ビジュアルエディタでポリシーを作成または編集すると、認識できないサービス、アクション、またはリソースタイプがポリシーに含まれているという警告が表示される場合があります。

注記

IAM によって、ポリシー概要をサポートするサービスの名前、アクション、リソースタイプが確認されます。ただし、ポリシー概要には、存在しないリソース値または条件が含まれる可能性があります。必ず Policy Simulator でポリシーをテストしてください。

ポリシーに認識されないサービス、アクション、またはリソースタイプが含まれている場合は、以下のいずれかのエラーが発生しています。

  • プレビューサービス – プレビュー中のサービスはビジュアルエディタをサポートしていません。プレビューに参加中の場合は、警告を無視して続行できます。ただし、ポリシーを完了するには、アクションとリソースの ARN を手動で入力する必要があります。または、[JSON] エディタオプションを選択して、JSON ポリシードキュメントを入力または貼り付けることができます。

  • カスタムサービス – カスタムサービスはビジュアルエディタをサポートしていません。カスタムサービスを使用中の場合は、警告を無視して続行できます。ただし、ポリシーを完了するには、アクションとリソースの ARN を手動で入力する必要があります。または、[JSON] エディタオプションを選択して、JSON ポリシードキュメントを入力または貼り付けることができます。

  • サービスがビジュアルエディタをサポートしていない – ポリシーに、ビジュアルエディタをサポートしていない一般公開された (GA) サービスが含まれている場合、警告を無視して続行できます。ただし、ポリシーを完了するには、アクションとリソースの ARN を手動で入力する必要があります。または、[JSON] エディタオプションを選択して、JSON ポリシードキュメントを入力または貼り付けることができます。

    一般公開されたサービスとは、プレビューやカスタムサービスではない、一般にリリースされたサービスです。認識されないサービスが一般公開されていて、名前のスペルが正しくない場合、そのサービスはビジュアルエディタをサポートしません。GA サービスに対するビジュアルエディタまたはポリシー概要のサポートをリクエストする方法については、「サービスが IAM ポリシー概要をサポートしていない」を参照してください。

  • アクションがビジュアルエディタをサポートしていない – ポリシーに含まれるサービスがサポートされていても、アクションがサポートされていない場合は、警告を無視して続行できます。ただし、ポリシーを完了するには、リソースの ARN を手動で入力する必要があります。または、[JSON] エディタオプションを選択して、JSON ポリシードキュメントを入力または貼り付けることができます。

    ポリシーに含まれるサービスがサポートされていても、アクションがサポートされていない場合、そのサービスはビジュアルエディタを一部サポートしません。GA サービスに対するビジュアルエディタまたはポリシー概要のサポートをリクエストする方法については、「サービスが IAM ポリシー概要をサポートしていない」を参照してください。

  • リソースタイプがビジュアルエディタをサポートしていない – ポリシーに含まれるアクションがサポートされていても、リソースタイプがサポートされていない場合は、警告を無視して続行できます。ただし、IAM は、選択したすべてのアクションのリソースを含めたことを確認できないため、追加の警告が表示されることがあります。

  • タイプミス – ビジュアルエディタでサービス、アクション、またはリソースを手動で入力するときに、タイプミスを含むポリシーを作成する可能性があります。これを避けるために、ビジュアルエディタを使用してサービスとアクションのリストから項目を選択し、プロンプトに従ってリソースセクションの操作を完了させることをお勧めします。ただし、サービスがビジュアルエディタを完全にサポートしていない場合は、ポリシーの一部を手動で入力しなければならないことがあります。

    ポリシーに、確実に上記のエラーが含まれていない場合は、ポリシーにタイプミスが含まれている可能性があります。サービス、アクション、およびリソースタイプの名前にタイプミスがないか確認してください。たとえば、s2 ではなく s3 を使用したり、ListMyBucketsではなく ListAllMyBuckets を使用する場合があります。アクションによくある別のタイプミスは、arn:aws:s3: : :* など、ARN に不要なテキストが含まれているものや、iam.CreateUser など、アクションにコロンがないものです。タイプミスを含む可能性のあるポリシーは、[次へ] を選択してポリシー概要を表示し、そのポリシーが意図したアクセス許可を付与するかどうかを確認することにより評価できます。

ポリシー概要を使用したトラブルシューティング

ポリシー概要に関連する問題を診断して解決できます。

欠落しているポリシーの概要

IAM コンソールには、ポリシー内の各サービスに対して許可または拒否されるアクセスレベル、リソース、条件を定義するポリシー概要テーブルが含まれます。ポリシーは、ポリシー概要サービス概要アクション概要の 3 つのテーブルにまとめられています。ポリシー概要テーブルには、選択したポリシーによって定義されているサービスとアクセス許可の概要のリストが含まれます。エンティティにアタッチされているポリシーのポリシーの概要は、そのポリシーの [ポリシーの詳細] ページで表示できます。[ポリシー] ページで、管理ポリシーのポリシー概要を表示できます。AWS がポリシー概要をレンダリングできない場合は、概要ではなく JSON ポリシードキュメントが表示され、次のエラーが表示されます。

[A summary for this policy cannot be generated.] (このポリシー概要を生成できません。) [You can still view or edit the JSON policy document.] (JSON ポリシードキュメントは引き続き表示または編集できます。)

ポリシーに要約が含まれていない場合は、次のいずれかのエラーが発生しています。

  • サポート対象外のポリシー要素 – IAM では、以下のポリシー要素のうちいずれかを含むポリシー概要の生成がサポートされていません。

    • Principal

    • NotPrincipal

    • NotResource

  • ポリシーのアクセス許可なし – ポリシーによって有効なアクセス許可が付与されない場合、ポリシー概要を生成できません。たとえば、ポリシーに含まれる 1 つのステートメントでエレメント "NotAction": "*" がある場合です。この場合、すべてのアクション (*) を除くすべてのアクションへのアクセスを許可しています。つまり、Deny または Allow のいずれにもアクセスを付与しません。

    注記

    NotPrincipalNotActionNotResource など、これらのポリシーエレメントは慎重に使用する必要があります。ポリシーエレメントの使用に関する詳細については、「IAM JSON ポリシー要素のリファレンス」を参照してください。

    作成したポリシーで、サービスとリソースが一致していないと、有効なアクセス権限が付与されないことがあります。たとえば、あるサービスのアクションを指定し、別のサービスのリソースを指定した場合です。この場合は、ポリシー概要が表示されます。概要のリソース列に別のサービスのリソースが含まれていることからしか、問題があることはわかりません。この列に不一致のリソースが含まれる場合は、ポリシーのエラーを確認する必要があります。ポリシーをより深く理解するために、必ず Policy Simulator でテストしてください。

ポリシー概要に認識されないサービス、アクション、リソースタイプが含まれる

IAM コンソールで、ポリシー概要に警告記号 ( ) が含まれる場合、ポリシーに認識されないサービス、アクション、またはリソースタイプが含まれている可能性があります。ポリシー概要内での警告については、「ポリシー概要 (サービスの一覧)」を参照してください。

注記

IAM によって、ポリシー概要をサポートするサービスの名前、アクション、リソースタイプが確認されます。ただし、ポリシー概要には、存在しないリソース値または条件が含まれる可能性があります。必ず Policy Simulator でポリシーをテストしてください。

ポリシーに認識されないサービス、アクション、またはリソースタイプが含まれている場合は、以下のいずれかのエラーが発生しています。

  • プレビューサービス – プレビュー中のサービスはポリシー概要をサポートしていません。

  • カスタムサービス – カスタムサービスはポリシー概要をサポートしていません。

  • サービスが概要をサポートしていない – Iポリシー概要をサポートしていない一般公開された (GA) サービスがポリシーに含まれる場合、そのサービスはポリシー概要テーブルの [Unrecognized services (認識されないサービス)] セクションに含まれます。一般公開されたサービスとは、プレビューやカスタムサービスではない、一般にリリースされたサービスです。認識されないサービスが一般公開されていて、名前のスペルが正しくない場合、そのサービスは IAM ポリシー概要をサポートしません。GA サービスに対するポリシー概要のサポートをリクエストする方法については、「サービスが IAM ポリシー概要をサポートしていない」を参照してください。

  • アクションが概要をサポートしていない – ポリシーに含まれるサービスがサポートされていても、アクションがサポートされていない場合、そのアクションはサービス概要テーブルの [Unrecognized actions (認識されないアクション)] セクションに含まれます。サービス概要内での警告については、「サービス概要 (アクションのリスト)」を参照してください。

  • リソースタイプが概要をサポートしていない – ポリシーに含まれるアクションがサポートされていても、リソースタイプがサポートされていない場合、そのリソースはサービス概要テーブルの [認識されないリソースタイプ] セクションに含まれます。サービス概要内での警告については、「サービス概要 (アクションのリスト)」を参照してください。

  • タイプミス – AWS は、JSON が構文的に正しいこと、およびポリシーにタイプミスやポリシーの検証の一部としてのその他のエラーが含まれていないことをチェックします。。

注記

ベストプラクティスとして、IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的なアクセス許可を確保することをお勧めします。既存のポリシーを開き、ポリシーの検証レコメンデーションを確認して解決することをお勧めします。

サービスが IAM ポリシー概要をサポートしていない

一般公開された (GA) サービスまたはアクションが IAM のポリシー概要またはビジュアルエディタで認識されない場合、サービスがこれらの機能をサポートしていない可能性があります。一般公開されたサービスとは、プレビューやカスタムサービスではない、一般にリリースされたサービスです。認識されないサービスが一般公開されていて、名前のスペルが正しくない場合、そのサービスはこれらの機能をサポートしません。ポリシーに含まれるサービスがサポートされていても、アクションがサポートされていない場合、そのサービスは IAM ポリシー概要を一部サポートしません。

IAM ポリシー概要またはビジュアルエディタのサポートがサービスに追加されるようにリクエストするには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. サポートされていないサービスを含むポリシーを特定する

    • ポリシーが管理ポリシーの場合は、ナビゲーションペインの [ポリシー] を選択します。ポリシーの一覧で、表示するポリシーの名前を選択します。

    • ポリシーが、ユーザーにアタッチされているインラインポリシーの場合は、ナビゲーションペインの [ユーザー] を選択します。ユーザーのリストから、ポリシーを表示するユーザーを選択します。ユーザーのポリシーのテーブルで、表示するポリシー概要のヘッダーを展開します。

  3. AWS Management Console のフッターの左側にある [Feedback (フィードバック)] を選択します。[IAM へのフィードバック] ボックスに、I request that the <ServiceName> service add support for IAM policy summaries and the visual editor と入力します。複数のサービスで概要をサポートする場合は、「I request that the <ServiceName1>, <ServiceName2>, and <ServiceName3> services add support for IAM policy summaries and the visual editor」と入力します。

サービスの欠落したアクション向けに IAM ポリシー概要のサポートが適用されるようにリクエストするには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. サポートされていないサービスを含むポリシーを特定する

    • ポリシーが管理ポリシーの場合は、ナビゲーションペインの [ポリシー] を選択します。ポリシーの一覧で、表示するポリシーの名前を選択します。

    • ポリシーが、ユーザーにアタッチされているインラインポリシーの場合は、ナビゲーションペインの [ユーザー] を選択します。ユーザーのリストから、ポリシーを表示するユーザーを選択します。ユーザーのポリシーのテーブルで、ポリシー概要を展開するために表示するポリシー名を選択します。

  3. ポリシー概要で、サポートされていないアクションを含むサービスの名前を選択します。

  4. AWS Management Console のフッターの左側にある [Feedback (フィードバック)] を選択します。[IAM へのフィードバック] ボックスに、I request that the <ServiceName> service add IAM policy summary and the visual editor support for the <ActionName> action と入力します。サポートされていない複数のアクションをレポートする場合は、「I request that the <ServiceName> service add IAM policy summary and the visual editor support for the <ActionName1>, <ActionName2>, and <ActionName3> actions」と入力します。

不足しているアクションを別のサービスに含めるようにリクエストするには、最後の 3 つの手順を繰り返します。

使用するポリシーが予期するアクセス許可を付与しない

ユーザー、グループ、ロール、リソースにアクセス許可を割り当てるには、ポリシーを作成します。このポリシーは、アクセス許可を定義したドキュメントです。ポリシードキュメントには以下の要素が含まれます。

  • Effect – ポリシーがアクセスを許可または拒否するかどうか

  • Action – ポリシーによって許可または拒否されるアクションのリスト

  • Resource – アクションを起こすことができるリソースのリスト

  • Condition (オプション) ポリシーがアクセス許可を付与する状況

これらのポリシーのエレメントの詳細または他のエレメントについては「IAM JSON ポリシー要素のリファレンス」を参照してください。

アクセスを許可するには、サポートされたリソースでポリシーにアクションを定義する必要があります。ポリシーに条件も含まれている場合は、条件にグローバル条件キーが含まれている必要があります。または、条件をアクションに適用する必要があります。アクションでサポートされているリソースを確認するには、サービスの AWS ドキュメントを参照してください。アクションでサポートされている条件については、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。

アクセス許可を付与しないアクション、リソース、条件がポリシーで定義されていないかは、IAM コンソール () でポリシー概要を表示すると確認できます。ポリシー概要を使用すると、ポリシーの問題を特定して解決することができます。

次のような理由により、IAM ポリシーで定義されているにもかかわらず、要素がアクセス許可を付与しない場合があります。

警告を含むポリシー概要の例を表示するには、「ポリシー概要 (サービスの一覧)」を参照してください。

該当するリソースのないアクションが定義されている

以下のポリシーは、すべての ec2:Describe* アクションを定義し、特定のリソースを定義します。すべての ec2:Describeアクションにはサポートされるリソースレベルのアクセス許可がないため、アクセスが付与されません。リソースレベルのアクセス許可とは、ポリシーの Resource 要素で ARN を使用するリソースをアクションがサポートしていることを意味します。アクションがリソースレベルのアクセス許可をサポートしない場合、ポリシーのステートメントは * エレメントでワイルドカード (Resource) を使用する必要があります。リソースレベルのアクセス許可をサポートするサービスを確認するには、「IAM と連携する AWS のサービス」を参照してください。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "arn:aws:ec2:us-east-2:ACCOUNT-ID:instance/*" }] }

このポリシーはアクセス許可を指定せず、ポリシー概要には次のエラーが表示されます。

This policy does not grant any permissions. To grant access, policies must have an action that has an applicable resource or condition.

このポリシーを修正するには、* エレメントに Resource を使用する必要があります。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }] }

該当するアクションのないリソースが定義されている

以下のポリシーは Amazon S3 バケットリソースを定義していますが、そのリソースで実行可能な S3 アクションは含まれていません。このポリシーはすべての Amazon CloudFront アクションに対するフルアクセスも供与しています。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "cloudfront:*", "Resource": [ "arn:aws:cloudfront:*", "arn:aws:s3:::examplebucket" ] }] }

このポリシーではすべての CloudFront アクションに対するアクセス許可が与えられています。しかし、ポリシーが S3 アクションを定義せずに S3 examplebucket リソースを定義しているために、ポリシー概要では次のように警告されます。

This policy defines some actions, resources, or conditions that do not provide permissions. To grant access, policies must have an action that has an applicable resource or condition.

このポリシーを修正して S3 バケットのアクセス許可を与えるために、バケットリソースで実行可能な S3 アクションを定義する必要があります。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudfront:*", "s3:CreateBucket", "s3:ListBucket*", "s3:PutBucket*", "s3:GetBucket*" ], "Resource": [ "arn:aws:cloudfront:*", "arn:aws:s3:::examplebucket" ] }] }

あるいは、CloudFront アクセス許可のみが提供されるように、S3 リソースを削除してこのポリシーを修正してください。

該当するアクションのない条件が定義されている

以下のポリシーは、S3 プレフィックスが custom でバージョン ID が 1234 の場合に、すべての S3 リソースに対して 2 つの Amazon S3 アクションを定義しています。しかし、s3:VersionId 条件キーは、オブジェクトバージョンのタグ付けに使用され、定義済みのバケットアクションではサポートされていません。アクションでサポートされている条件については、「AWS のサービスのアクション、リソース、および条件キー」を参照して、条件キーのサービスドキュメントのリンクをクリックしてください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": [ "custom" ], "s3:VersionId": [ "1234" ] } } } ] }

このポリシーでは s3:ListBucketVersions アクションに対するアクセス許可が与えられ、さらに、バケット名に s3:ListBucket プレフィックスが含まれている場合、custom アクションに対するアクセス許可が与えられています。しかし、定義済みのアクションでは s3:VersionId 条件がサポートされていないために、ポリシー概要には次のエラーが表示されます。

This policy does not grant any permissions. To grant access, policies must have an action that has an applicable resource or condition.

S3 オブジェクトのバージョンをタグ付けできるようにこのポリシーを修正するには、s3:VersionId 条件キーをサポートする S3 アクションを定義する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket", "s3:GetObjectVersion" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": [ "custom" ], "s3:VersionId": [ "1234" ] } } } ] }

このポリシーでは、ポリシー内のすべてのアクションと条件に対するアクセス許可が提供されています。それにもかかわらず、ポリシーからはどのアクセス許可もいまだに指定されていません。これは、1 つのアクションで両方の条件に一致しているケースがないためです。この場合は、適用する条件付きの専用アクションが含まれている、個別のステートメントを 2 つ作成する必要があります。

このポリシーを修正するには、次のようにステートメントを 2 つ作成します。最初のステートメントには s3:prefix 条件をサポートするアクションが含まれるようにし、2 番目のステートメントには s3:VersionId 条件をサポートするアクションが含まれるようにします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": "custom" } } }, { "Effect": "Allow", "Action": "s3:GetObjectVersion", "Resource": "*", "Condition": { "StringEquals": { "s3:VersionId": "1234" } } } ] }

ポリシー管理のトラブルシューティング

ポリシー管理に関連する問題を診断して解決できます。

IAM アカウントでのポリシーのアタッチまたはデタッチ

一部の AWS 管理ポリシーはサービスにリンクされています。これらのポリシーは、そのサービス用に作成したサービスにリンクされたロールでのみ使用されます。IAM コンソールでは、ポリシーの [ポリシー詳細] ページを表示すると、そのポリシーがサービスにリンクされていることを示すバナーが、そのページに表示されます。このポリシーは IAM 内でユーザー、グループ、またはロールにアタッチできます。サービスにリンクされたロールをサービス用に作成すると、このポリシーは新しいロールに自動的にアタッチされます。ポリシーは必須であるため、サービスにリンクされたロールからポリシーをデタッチすることはできません。

アクティビティに基づいて IAM アイデンティティのポリシーを変更する

IAM アイデンティティ (ユーザー、グループ、ロール) のポリシーは、アクティビティに基づいて更新することができます。これを行うには、CloudTrail イベント履歴でアカウントのイベントを表示します。CloudTrail イベントログには、ポリシーのアクセス許可の変更に使用できる詳細なイベント情報が含まれます。ユーザーまたはロールが AWS でアクションを実行しようとして、そのリクエストが拒否される場合があります。この場合、ユーザーまたはロールにアクションを実行するためのアクセス許可が必要かどうかを検討します。その場合、アクションだけでなく、ポリシーにアクセスしようとしたリソースの ARN を追加することができます。または、使用していないアクセス許可がユーザーまたはロールにある場合は、ポリシーからそのようなアクセス許可を削除することも検討してください。ポリシーにより、必要なアクションのみの実行に必要な最小限の権限が付与されていることを確認します。CloudTrail の使用の詳細については、AWS CloudTrail ユーザーガイドの「 CloudTrail コンソールでの CloudTrail イベントの表示の」を参照してください。

JSON ポリシードキュメントのトラブルシューティング

JSON ポリシードキュメントに関連する問題を診断して解決できます。

ポリシーの検証

JSON ポリシーを作成または編集するときに、IAM はポリシー検証を実行し、効果的なポリシーを作成するのに役立ちます。IAM は JSON 構文エラーを識別します。一方、IAM Access Analyzer は、ポリシーをさらに絞り込むのに役立つ推奨事項を含む追加のポリシーチェックを提供します。ポリシーの検証の詳細については、「IAM ポリシーの検証」を参照してください。。IAM Access Analyzer のポリシーチェックと実用的な推奨事項の詳細については、「IAM Access Analyzer ポリシーの検証」を参照してください。

JSON エディタでポリシー検証のアクセス許可がありません

AWS Management Console で、IAM Access Analyzer ポリシーの検証結果を表示するアクセス許可がない場合、次のエラーが表示されることがあります。

You need permissions. You do not have the permissions required to perform this operation. Ask your administrator to add permissions.

このエラーを解決するには、自分に access-analyzer:ValidatePolicy アクセス許可を追加するよう管理者に依頼します。

複数の JSON ポリシーオブジェクト

IAM ポリシーは、1 つの JSON オブジェクトのみで構成する必要があります。オブジェクトは括弧({ })で囲んで示します。外側の { } のペア内に追加の { } を埋め込むことによって JSON オブジェクト内で他のオブジェクトをネストすることができますが、ポリシーに含めることができるのは一番外側の { } のペアのみです。以下の例は、最上位に 2 つのオブジェクト (で示した箇所) が含まれているので誤りです。

{ "Version": "2012-10-17", "Statement": { "Effect":"Allow", "Action":"ec2:Describe*", "Resource":"*" } } { "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } }

ただし、正しいポリシーの文法を使用して、前述の例の目的を果たすことができます。それぞれに独自の Statement エレメントを含む 2 つのポリシーオブジェクトを含める代わりに、1 つの Statement エレメントに 2 つのブロックを組み合わせて使用することができます。Statement 要素には、以下の例 (太字で示した箇所) に示すように 2 つのオブジェクトの配列を値として指定します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":" *" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } ] }

複数の JSON Statement 要素

このエラーは、一見、前のセクションのバリエーションのように見えますが、構文上はエラーの種類が異なります。次の例には、最上位の 1 ペアの { } で示された 1 つのポリシーオブジェクトのみが存在します。そのオブジェクト内に 2 つの Statement 要素が含まれています。

IAM ポリシーには、名前 (Statement) の後にコロン、その後に値という形式で構成される 1 つの Statement 要素のみを指定する必要があります。Statement 要素の値は、{} で示され、1 つの Effect 要素、1 つの Action 要素、および 1 つの Resource 要素を含むオブジェクトである必要があります。以下の例は、ポリシーオブジェクト ( で示した箇所) に 2 つの Statement 要素が含まれているので誤りです。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } }

値のオブジェクトは複数の値がオブジェクトの配列でもかまいません。この問題を解決するには、以下の例 (太字で示した箇所) に示すように、2 つの Statement 要素を 1 つの要素に合わせます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":"*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } ] }

Statement 要素の値はオブジェクト配列です。この例の配列は 2 つのオブジェクトで構成され、各オブジェクトに Statement エレメントの正しい値が指定されています。配列内の各オブジェクトはカンマで区切ります。

JSON Statement 要素内の複数の Effect、Action、Resource 要素

Statement の名前と値のペアの値側のオブジェクトは 1 つの Effect エレメント、1 つの Action エレメント、1 つの Resource エレメントのみで構成する必要があります。次のポリシーは、Effect の値オブジェクトに 2 つの Statement エレメントが含まれているので誤りです。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Effect": "Allow", "Action": "ec2:* ", "Resource": "*" } }
注記

ポリシーエンジンでは、新規ポリシーまたは編集済みのポリシーでそのようなエラーを許可することはできません。ただし、ポリシーエンジンは、エンジンが更新される前に保存されたポリシーを引き続き許可します。エラーが存在する既存のポリシーの動作は次のとおりです。

  • 複数の Effect エレメント: 最後の Effect エレメントのみが確認され、それ以外は無視されます。

  • 複数の Action エレメント: すべての Action エレメントが内部的に結合され、単一のリストとして処理されます。

  • 複数の Resource エレメント: すべての Resource エレメントが内部的に結合され、単一のリストとして処理されます。

ポリシーエンジンでは、構文 エラーのあるポリシーを保存することはできません。保存する前にポリシーのエラーを修正する必要があります。ポリシーの正しいポリシー検証のレコメンデーションを確認することを推奨します。

いずれの場合も、解決策は誤って追加した要素を削除することです。Effect 要素の場合は簡単です。前述の例で Amazon EC2 インスタンスへのアクセス許可を拒否するには、以下のように、ポリシーから "Effect": "Allow", の行を削除する必要があります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:* ", "Resource": "*" } }

重複しているエレメントが Action または Resource の場合、解決法はより複雑になることがあります。アクセス権限を許可(または拒否)するアクションが複数存在したり、複数のリソースへのアクセスを制御したりすることが必要な場合があります。たとえば、以下の例 (で示した箇所) は、複数の Resource 要素が含まれているので誤りです。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket", "Resource": "arn:aws:s3:::my-bucket/*" } }

Statement エレメントの値オブジェクトに必要なエレメントは、それぞれ 1 つだけ含めることができます。この問題を解決するには、各値を配列に指定します。以下の例は、値オブジェクト形式の配列 (太字で示した箇所) を使用して 2 つの異なるリソース要素を 1 つの Resource 要素として扱う方法を示しています。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } }

JSON Version 要素の欠落

Version ポリシー要素は、ポリシーバージョンとは異なります。Version ポリシー要素は、ポリシー内で使用され、ポリシー言語のバージョンを定義します。一方で、ポリシーバージョンは、IAM でカスタマー管理ポリシーを変更すると作成されます。変更されたポリシーによって既存のポリシーが上書きされることはありません。代わりに、IAM は管理ポリシーの新しいバージョンを作成します。Version ポリシー要素の詳細については、「IAM JSON ポリシー要素Version」を参照してください。ポリシーのバージョンの詳細については、「IAM ポリシーのバージョニング」を参照してください。

AWS 機能の拡張にともない、この機能をサポートする新しい機能が IAM ポリシーに追加されました。ポリシー構文を更新すると、新しいバージョン番号が含まれている場合があります。ポリシーでポリシー文法の新しい機能を使用する場合は、使用しているバージョンをポリシー解析エンジンに通知する必要があります。デフォルトのポリシーのバージョンは "2008-10-17" です。後から導入されたポリシー機能を使用する場合は、使用する機能をサポートするバージョン番号を指定する必要があります。必ず最新のポリシー構文のバージョン番号 (現時点では "Version": "2012-10-17") を指定することをお勧めします。たとえば、次のポリシーは、リソースの ARN でポリシー変数 ${...} を使用しているので誤りです。ただし、ポリシー変数をサポートするポリシー構文のバージョンが指定されていません (で表示されています)。

{ "Statement": { "Action": "iam:*AccessKey*", "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/${aws:username}" } }

ポリシーの先頭に Version エレメントとその値 2012-10-17 (ポリシー変数をサポートする IAM API の最初のバージョン) を追加することで、この問題 (太字で示した箇所) を解決します。

{ "Version": "2012-10-17", "Statement": { "Action": "iam:*AccessKey*", "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/${aws:username}" } }