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 陣列當作值。陣列可以使用一個或多個值。如果包含多個值,陣列會在方括號 ([]) 中並以逗號分隔,如以下範例所示:

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

  • 基本 JSON 資料類型 (布林值、數字及字串) 是在 RFC 7159 中定義。

此文法中使用的慣例

此文法中使用以下慣例:

  • 下列字元是 JSON 權杖,並且「包含」在政策中:

    { } [ ] " , :

  • 下列字元在文法中為特殊字元,並且「不」包含在政策中:

    = < > ( ) |

  • 如果某個元素允許多個值,它會使用重複值、逗號分隔符號和省略符號 (...) 來表示。範例:

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

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

    如果允許多個值,只包含一個值也屬有效。對於僅有一個值,必須省略尾端逗號。如果元素使用陣列 (以 [ 和 ] 標註),但只包含一個值,則括號為選用。範例:

    "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>)

政策文法備註

  • 單一政策可包含一系列的陳述式。

  • 政策大小上限為 2048 個字元和 10,240 個字元,取決於政策所連接的實體。如需詳細資訊,請參閱 IAM 和 AWS STS 配額。政策大小的計算不包含空格字元。

  • 個別元素不得包含相同索引鍵的多個執行個體。例如,您不能在同一個陳述式中包含兩次 Effect 區塊。

  • 區塊可以任何順序顯示。例如,政策中 version_block 可以在 id_block 之後。同樣地,effect_blockprincipal_blockaction_block 可以在陳述式內以任何順序顯示。

  • id_block 在以資源為基礎的政策中為選用。身分類型政策「不」得包含它。

  • 以資源為基礎的政策和 IAM 角色的信任政策需要 principal_block 元素 (例如,在 Amazon S3 儲存貯體政策中)。身分類型政策「不」得包含它。

  • 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 政策,Sid 值只允許使用基本英數字元 (A-Z、a-z、0-9)。支援資源政策的其他 AWS 服務可能對 Sid 值有其他要求。例如,某些服務要求此值在 a 中是唯一的 AWS 帳戶,而某些服務允許其他字元,例如Sid值中的空格。

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

提供使用 Amazon 資源名稱 (ARN)、IAM 使用者 AWS 帳戶、IAM 角色、聯合身分使用者或指定角色使用者來指定主體的方法。對於一個 AWS 帳戶,你也可以使用簡短的形式,AWS:accountnumber而不是完整的 ARN。如需包含 AWS 服務、擔任角色等等所有選項,請參閱指定主體

請注意,您只能使用 * 來指定「每個人/匿名」。您不能使用它來指定 ARN 的部分名稱。

resource_string

在大部分情況下,包含 Amazon Resource Name (ARN)

"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::examplebucket/*"
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:PrincipalType,包括aws:SecureTransport、和aws: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" ] } }