本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
此頁面介紹用來在 IAM 中建立 JSON 政策語言的正式文法。我們展示此文法,以便您可以了解如何建構和驗證政策。
如需政策的範例,請參閱下列主題:
-
《Amazon EC2 使用者指南》中的適用於 Amazon EC2 主控台的範例政策和適用於 AWS CLI、Amazon EC2 CLI 或 AWS SDK 的政策範例。
如需用於其他 AWS 服務的政策範例,請移至那些服務的文件。
政策語言和 JSON
以 JSON 表達的政策。當您建立或編輯 JSON 政策時,IAM 可以執行政策驗證以協助您建立有效的政策。IAM 會識別 JSON 語法錯誤,而 IAM Access Analyzer 會提供額外的政策檢查及建議,協助您進一步改良政策。若要進一步了解政策驗證的資訊,請參閱 IAM 政策驗證。若要進一步了解 IAM Access Analyzer 政策檢查和可動作的建議,請參閱 IAM Access Analyzer 政策驗證。
在本文件中,我們不提供哪些資料構成有效 JSON 的完整說明。不過,以下是一些基本 JSON 規則:
-
個別實體間允許空格。
-
值以雙引號括住。雙引號對於數字和布林值為選用。
-
許多元素 (例如,
action_string_list
和resource_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-17
和 2012-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_block
、principal_block
、action_block
可以在陳述式內以任何順序顯示。 -
id_block
在以資源為基礎的政策中為選用。身分類型政策「不」得包含它。 -
以資源為基礎的政策和 IAM 角色的信任政策需要
principal_block
元素 (例如,在 Amazon S3 儲存貯體政策中)。身分類型政策「不」得包含它。 -
Amazon S3 儲存貯體政策中的
principal_map
元素可以包含CanonicalUser
ID。大多數以資源為基礎的政策不支援此映射。若要進一步了解有關在儲存貯體政策中使用正式使用者 ID,請參閱 Amazon Simple Storage Service 使用者指南中的在政策中指定主體。 -
每個字串值 (
policy_id_string
、sid_string
、principal_id_string
、action_string
、resource_string
、condition_type_string
、condition_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
值有其他要求。例如,有些服務需要此值在 AWS 帳戶 內為唯一的,而有些服務允許在Sid
值中使用其他字元 (例如空格)。"Sid":"1" "Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
principal_id_string
-
提供方式以使用 AWS 帳戶、IAM 使用者、IAM 角色、聯合身分使用者或擔任角色的使用者的 Amazon Resource Name (ARN) 指定主體。對於 AWS 帳戶,您也可以使用簡短格式的
AWS:
而不是完整的 ARN。如需包含 AWS 服務、擔任角色等等所有選項,請參閱如何指定主體。accountnumber
請注意,您只能使用 * 來指定「每個人/匿名」。您不能使用它來指定 ARN 的部分名稱。
resource_string
-
在大部分情況下,包含 Amazon Resource Name (ARN)。
"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
condition_type_string
-
識別要測試條件的類型,例如
StringEquals
、StringLike
、NumericLessThan
、DateGreaterThanEquals
、Bool
、BinaryEquals
、IpAddress
、ArnEquals
等。如需資料類型的完整清單,請參閱 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 全域條件內容索引鍵。如需服務特定的條件金鑰,請參閱該服務的文件,例如下列:
-
Amazon Simple Storage Service 使用者指南中的在政策中指定條件
-
《Amazon EC2 使用者指南》中的 Amazon EC2 的 IAM 政策。
"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
" ] } }