IAM JSON ポリシー言語の文法 - AWS Identity and Access Management

IAM JSON ポリシー言語の文法

このページでは、IAM で JSON ポリシーを作成する際に使用する言語の正式な文法を示します。ポリシーを構築および検証する方法を理解できるようにするために、この文法を示しています。

ポリシーの例については、以下のトピックを参照してください。

その他の AWS サービスで使用されるポリシーの例については、各サービスのドキュメントを参照してください。

ポリシー言語と JSON

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

このドキュメントでは、有効な JSON の構成内容については詳しく説明しません。ただし、基本的な JSON のルールをいくつか紹介します。

  • 個々のエンティティ間の空白文字は許可されています。

  • 値は引用符で囲みます。数値やブール値の場合、引用符は省略できます。

  • 多くの要素 (たとえば、action_string_listresource_string_list) で、値として JSON 配列を使用できます。配列では 1 つまたは複数の値を使用できます。複数の値が含まれている場合、配列は次の例のように、角括弧 ([]) で囲まれ、カンマで区切られます。

    "Action" : ["ec2:Describe*","ec2:List*"]

  • 基本的な JSON のデータ型 (ブール値、数値、文字列) は RFC 7159 で定義されています。

この文法で使用される表記規則

この文法では、以下の表記規則が使用されます。

  • 以下の文字は JSON のトークンであり、ポリシーに含まれます

    { } [ ] " , :

  • 以下の文字は文法の特殊文字であり、ポリシーには含まれません

    = < > ( ) |

  • 要素で複数の値を使用できる場合、繰り返し値、カンマ区切り文字、および省略符号 (...) で示されます。例:

    [<action_string>, <action_string>, ...]

    <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

    複数の値が許可されている場合、値が 1 つだけ含むことも有効です。値が 1 つだけである場合、末尾のカンマは省略する必要があります。要素で配列([ と ] で表される)を使用する場合、含まれている値が 1 つだけであるときは、角括弧を省略できます。例:

    "Action": [<action_string>]

    "Action": <action_string>

  • 要素に続く疑問符 (?) は、その要素が省略できることを示します。例:

    <version_block?>

    ただし、省略可能な要素の詳細については、文法の一覧の後に続く注意事項を参照してください。

  • 要素間の縦棒 (|) は選択肢を示します。この文法では、括弧は選択肢の範囲を定義します。例:

    ("Principal" | "NotPrincipal")

  • リテラル文字列にする必要がある要素は二重引用符 (") で囲まれます。例:

    <version_block> = "Version" : ("2008-10-17" | "2012-10-17")

その他の注意事項については、文法の一覧の後にある「ポリシーの文法に関する注意事項」を参照してください。

文法

以下の一覧では、ポリシー言語の文法について説明します。この一覧で使用されている表記規則については、前のセクションを参照してください。詳細については、後に示されている注意事項を参照してください。

注記

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

policy = { <version_block?> <id_block?> <statement_block> } <version_block> = "Version" : ("2008-10-17" | "2012-10-17") <id_block> = "Id" : <policy_id_string> <statement_block> = "Statement" : [ <statement>, <statement>, ... ] <statement> = { <sid_block?>, <principal_block?>, <effect_block>, <action_block>, <resource_block>, <condition_block?> } <sid_block> = "Sid" : <sid_string> <effect_block> = "Effect" : ("Allow" | "Deny") <principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>) <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... } <principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") : [<principal_id_string>, <principal_id_string>, ...] <action_block> = ("Action" | "NotAction") : ("*" | [<action_string>, <action_string>, ...]) <resource_block> = ("Resource" | "NotResource") : : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...]) <condition_block> = "Condition" : { <condition_map> } <condition_map> = { <condition_type_string> : { <condition_key_string> : <condition_value_list> }, <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ... } <condition_value_list> = [<condition_value>, <condition_value>, ...] <condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)

ポリシーの文法に関する注意事項

  • 1 つのポリシーにステートメントの配列を含めることができます。

  • ポリシーの最大サイズは 2,048 ~ 10,240 文字で、ポリシーがアタッチされるエンティティによって異なります。詳細については、「IAM と AWS STSクォータ」を参照してください。ポリシーのサイズの計算には、空白文字は含まれません。

  • 個々の要素に、同じキーの複数のインスタンスを含めることはできません。たとえば、同じステートメントに Effect ブロックを 2 回含めることはできません。

  • ブロックは任意の順序で記述できます。たとえば、ポリシー内で version_blockid_block の後にあってもかまいません。同様に、ステートメント内で effect_blockprincipal_blockaction_block は任意の順序で記述できます。

  • リソースベースのポリシーでは、id_block はオプションです。アイデンティティベースのポリシーに含めることはできません

  • principal_block 要素は、リソースベースのポリシー (Amazon S3 のバケットポリシーなど) および IAM ロールの信頼ポリシーでは必須です。アイデンティティベースのポリシーに含めることはできません

  • Amazon S3 バケットポリシーの principal_map 要素には、CanonicalUser ID を含めることができます。ほとんどのリソースベースのポリシーは、このマッピングをサポートしていません。バケットポリシーでの正規ユーザー ID の使用の詳細については、Amazon Simple Storage Service ユーザーガイドの「ポリシーでのプリンシパルの指定の」を参照してください。

  • 各文字列値(policy_id_stringsid_stringprincipal_id_stringaction_stringresource_stringcondition_type_stringcondition_key_string、および文字列バージョンの condition_value)では、それぞれの最小長と最大長の制限、特定の許容値、または必要な内部形式が決まっている場合があります。

文字列値に関する注意事項

このセクションでは、ポリシー内の複数の要素で使用される文字列値に関する追加情報を示します。

action_string

サービス名前空間、コロン、およびアクション名で構成されます。アクション名にはワイルドカードを含めることができます。例:

"Action":"ec2:StartInstances" "Action":[ "ec2:StartInstances", "ec2:StopInstances" ] "Action":"cloudformation:*" "Action":"*" "Action":[ "s3:Get*", "s3:List*" ]
policy_id_string

ポリシーに関する情報をまとめて含める方法を提供します。Amazon SQS や Amazon SNS などの一部のサービスでは、Id 要素は予約された方法で使用されます。個々のサービスで制限されていない限り、policy_id_string には空白文字を含めることができます。一部のサービスでは、この値が AWS アカウント内で一意である必要があります。

注記

id_block は、リソースベースのポリシーでは使用できますが、アイデンティティベースのポリシーでは使用できません。

長さに制限はありません。ただし、この文字列はポリシー全体の長さにカウントされ、全体の長さは制限されます。

"Id":"Admin_Policy" "Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
sid_string

個々のステートメントに関する情報含める方法を提供します。IAM ポリシーでは、基本的な英数字 (A~Z、a~z、0~9) のみを Sid 値に使用できます。リソースポリシーをサポートするその他の AWS サービスでは、Sid 値に関して他の要件がある場合があります。例えば、一部のサービスには AWS アカウント 内でこの値が一意であること、スペースなどの追加の文字を Sid 値で使用できることです。

"Sid":"1" "Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
principal_id_string

AWS アカウント の Amazon リソースネーム (ARN)、IAM ユーザー、IAM ロール、フェデレーションユーザー、または引き受けたロールユーザーを使用してプリンシパルを指定する方法を提供します。AWS アカウント では、完全な ARN の代わりに短縮形 AWS:accountnumber を使用できます。AWS のサービス、割り当てられたロールなどを含むすべてのオプションについては、「プリンシパルを指定する方法」を参照してください。

"すべてのユーザー/匿名ユーザー" を指定するには、* のみを使用できることに注意してください。これを使用して名前または ARN の一部を指定することはできません。

resource_string

多くの場合、Amazon リソースネーム (ARN) で構成されます。

"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
condition_type_string

StringEqualsStringLikeNumericLessThanDateGreaterThanEqualsBoolBinaryEqualsIpAddressArnEquals など、テストされる条件のタイプを指定します。条件タイプの詳細なリストについては、「IAM JSON ポリシー要素: 条件演算子」を参照してください。

"Condition": { "NumericLessThanEquals": { "s3:max-keys": "10" } } "Condition": { "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "AES256" } }
condition_key_string

条件が満たされているかどうかを判断するために値がテストされる条件キーを識別します。AWS は、AWS、aws:PrincipalTypeaws:SecureTransportaws:userid を含むすべてのサービスで使用できる条件キーのセットを定義します。

AWS の条件キーのリストについては、「AWS グローバル条件コンテキストキー」を参照してください サービスに固有の条件キーについては、以下のようなそのサービスのドキュメントを参照してください。

"Condition":{ "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } }
condition_value_string

条件が満たされているかどうかを判断する condition_key_string の値を識別します。条件タイプの有効な値の一覧については、「IAM JSON ポリシー要素: 条件演算子」を参照してください。

"Condition":{ "ForAnyValue:StringEquals": { "dynamodb:Attributes": [ "ID", "PostDateTime" ] } }