メニュー
AWS Identity and Access Management
ユーザーガイド

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

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

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

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

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

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

ポリシーの再構成

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

AWS マネジメントコンソールでカスタマー管理ポリシーを作成するときに、[JSON] タブ内で完全に操作を実行する選択ができます。[Visual editor] タブで一切変更を加えることなく、[JSON] タブで [Review policy] を選択すると、ポリシーが再構成される可能性が低くなります。ただし、ポリシーを作成し、[Visual editor] タブを使用して変更を加えるか、[Visual editor] タブから [Review policy] を選択する場合、IAM はビジュアルエディタでの外観を最適化するために、ポリシーを再構成する可能性があります。

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

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

このタブで行う操作 ポリシーを編集する場合 次にこのタブの [Review policy] を選択する場合 [Save changes] を選択する場合
ビジュアルエディタ 編集されます ビジュアルエディタ ポリシーが再構成されます
ビジュアルエディタ 編集されます JSON ポリシーが再構成されます
ビジュアルエディタ 編集されません ビジュアルエディタ ポリシーが再構成されます
JSON 編集されます ビジュアルエディタ ポリシーが再構成されます
JSON 編集されます JSON ポリシー構造は変更されません
JSON 編集されません JSON ポリシー構造は変更されません

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

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

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

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

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

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

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

注記

デフォルトでは、AWS アカウントのルートユーザー のみが、そのアカウントのすべてのリソースにアクセスできます。したがって、ルートユーザー としてサインインしていない場合は、ポリシーによって付与されたアクセス許可が必要です。

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

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

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

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

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

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

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

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

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

注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このポリシーの概要を生成できません。JSON ポリシードキュメントは引き続き表示または編集できます。

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

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

    • Principal

    • NotPrincipal

    • NotResource

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

    注記

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

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

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

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

注記

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

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

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

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

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

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

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

  • タイプミス – AWS の Policy Validator は JSON が構文上正しいことのみをチェックするため、タイプミスを含むポリシーが作成される可能性があります。ポリシーに、確実に上記のエラーが含まれていない場合は、ポリシーにタイプミスが含まれている可能性があります。サービス、アクション、およびリソースタイプの名前にタイプミスがないか確認してください。たとえば、s3 ではなく s2 を使用したり、ListAllMyBucketsではなく ListMyBuckets を使用する場合があります。アクションによくある別のタイプミスは、arn:aws:s3: : :* など、ARN に不要なテキストが含まれているものや、AWSAuthRuntimeService.AuthenticatePassword など、アクションにコロンがないものです。ポリシーシュミレーターを使用して、タイプミスを含む可能性のあるポリシーを評価し、そのポリシーが意図したアクセス許可を付与するかどうかを確認できます。

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

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

IAM ポリシー概要またはビジュアルエディタのサポートがサービスに追加されるようにリクエストするには

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

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

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

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

  3. AWS マネジメントコンソール のフッターの左側にある [Feedback] を選択します。[Tell us about your experience:] ボックスに、I request that the <ServiceName> service add support for IAM policy summaries and the visual editor と入力します。2 つ以上のサービスで概要をサポートする場合は、I request that the <ServiceName1>, <ServiceName2>, and <ServiceName3> services add support for IAM policy summaries and the visual editor と入力します。

サービスの欠落したアクション向けに IAM ポリシー概要のサポートが適用されるようにリクエストするには

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

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

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

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

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

  4. AWS マネジメントコンソール のフッターの左側にある [Feedback] を選択します。[Tell us about your experience:] ボックスに、I request that the <ServiceName> service add IAM policy summary and the visual editor support for the <ActionName> action と入力します。サポートされていないアクションを 2 つ以上レポートする場合は、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 のサービスのアクション、リソース、および条件キー」を参照してください。

アクセス許可を付与しないアクション、リソース、条件がポリシーで定義されていないか確認するには、https://console.aws.amazon.com/iam/ で 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:ListBucket アクションに対するアクセス許可が与えられ、さらに、バケット名に custom プレフィックスが含まれている場合、s3:ListBucket アクションに対するアクセス許可が与えられています。しかし、定義済みのアクションでは 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 コンソールでは、ポリシーの [Summary] ページを表示すると、そのポリシーがサービスにリンクされていることを示すバナーが、そのページに表示されます。このポリシーは IAM 内でユーザー、グループ、またはロールにアタッチできます。サービスにリンクされたロールをサービス用に作成すると、このポリシーは新しいロールに自動的にアタッチされます。ポリシーは必須であるため、サービスにリンクされたロールからポリシーをデタッチすることはできません。

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

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

複数の 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 要素のみで構成する必要があります。次のポリシーは、Statement の値オブジェクトに 2 つの Effect 要素が含まれているので誤りです。

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

注記

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

  • 複数の Effect 要素: 最後の Effect 要素のみが確認され、それ以外は無視されます。

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

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

ポリシーエンジンでは、構文エラーのあるポリシーを保存することはできません。保存する前にポリシーのエラーを修正する必要があります。Policy Validator ツールは、すべての旧ポリシーのエラーの検出に役立ち、修正に関する推奨を提示します。

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

{ "Version": "2012-10-17", "Statement": { "Efect": "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}" } }