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

IAM ポリシー言語の文法

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

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

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

ポリシー言語と JSON

ポリシーは、JSON 形式で表されます。ポリシーが IAM に送信される場合、まず、JSON 構文が正しいことが確認されます。このドキュメントでは、有効な JSON の構成内容については詳しく説明しません。ただし、基本的な JSON のルールをいくつか紹介します。

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

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

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

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

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

JSON 検証ツールを使用してポリシーの構文をチェックできます。検証ツールはオンラインで見つけることができ、多くのコードエディターや XML 編集ツールにも JSON 検証機能が含まれています。

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

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

  • 以下の文字は 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 ポリシー要素の詳細については、「Version」を参照してください。ポリシーのバージョンの詳細については、「管理ポリシーのバージョニング」を参照してください。

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") :   
    [<principal_id_string>, <principal_id_string>, ...]

<action_block> = ("Action" | "NotAction") : 
    ("*" | [<action_string>, <action_string>, ...])

<resource_block> = ("Resource" | "NotResource") : 
    ("*" | [<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> = ("string" | "number" | "Boolean")

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

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

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

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

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

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

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

  • 各文字列値(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_string

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

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

resource_string

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

"Resource":"arn:aws:iam::123456789012:user/Bob"

"Resource":"arn:aws:s3:::examplebucket/*"
condition_type_string

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

"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:SecureTransport、および aws:userid)。

AWS の条件キーのリストについては、「使用できるグローバル条件キー」を参照してくださいサービスに固有の条件キーについては、各サービスのドキュメントを参照してください。たとえば、『Amazon Simple Storage Service 開発者ガイド』の「ポリシーでの条件の指定」や『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 の IAM ポリシー」を参照してください。

"Condition":{
  "Bool": {
      "aws:SecureTransport": "true"
   }
}

"Condition": {
  "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}

"Condition": {
  "StringEquals": {
    "ec2:ResourceTag/purpose": "test"
  }
}