本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排解服務控制原則 (SCPs) AWS Organizations
使用此處的資訊可協助您診斷及修正服務控制原則 (SCPs) 中發現的常見錯誤。
服務控制策略(SCPs) AWS Organizations 類似於IAM策略,並共用一個通用的語法。這個語法開始與對JavaScript 象符號
AWS Organizations 使用IAM語法和語法的子集。如需詳細資訊,請參閱 SCP 語法。
常見的政策錯誤
多個政策物件
一個SCP必須包含一個且只有一個JSON對象。可在兩旁放置 { } 括弧來表示物件。雖然您可以透過在外部配對內嵌其他 {} 大括號,將其他JSON物件嵌套在物件中,但政策只能包含一對最外層的 {} 大括號。下列範例不正確,因為它包含兩個位於頂層的物件 (呼叫於) red
):
{
"Version": "2012-10-17",
"Statement":
{
"Effect":"Allow",
"Action":"ec2:Describe*",
"Resource":"*"
}
}
{
"Statement": {
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
}
不過,您可以使用正確的政策語法來達成前述範例的意圖。可以將兩個資料塊合併到單個 Statement
元素中,而非包含兩個各自擁有 Statement
元素的完整政策物件。Statement
元素將兩個物件組成的陣列作為其值,如以下範例所示:
{ "Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource":" *" }, { "Effect": "Deny", "Action": "s3:*", "Resource": "*" }] }
此範例無法進一步的壓縮到具有一個元素的 Statement
,因為這兩個元素有不同的效果。一般而言,只有在每個陳述式中的 Effect
和 Resource
元素完全相同時,您才可以結合陳述式。
多個陳述式元素
此錯誤可能會先以上一章節中錯誤的變異顯示。但是,它在語法上是不同類型的錯誤。在以下範例中,頂層只有一個政策物件,由單一 { } 括弧組表示。但是,該物件包含兩個 Statement
元素。
一個SCP必須只包含一個Statement
元素,由顯示在冒號左側的 name (Statement
) 組成,後面跟著它在右邊的值。Statement
元素的值必須是物件,以 { } 括弧表示,其中包含一個 Effect
元素、一個 Action
元素和一個 Resource
元素。以下範例不正確,因為在政策物件中包含兩個 Statement
元素:
{
"Version": "2012-10-17",
"Statement
": {
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
"Statement
": {
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
}
由於值物件可以是多個值物件的陣列,您可以將兩個 Statement
元素結合到具有物件陣列的一個元素來解決這個問題,如以下範例所示:
{ "Version": "2012-10-17", "Statement":
[
{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource":"*" },
{ "Effect": "Deny", "Action": "s3:*", "Resource": "*" }]
}
Statement
元素的值是一種物件陣列。此範例中的陣列包含兩個物件,每個物件是 Statement
元素的正確值。陣列中的每個物件之間用逗號隔開。
政策文件大小超過上限
SCP文件的大小上限為 5,120 個字元。此大小上限包括所有字元 (包含空格)。若要減少您的大小SCP,您可以移除引號外的所有空格字元 (例如空格和換行符號)。
注意
如果您使用 AWS Management Console,JSON元素之間和引號之外的額外空格將被移除且不計算在內。如果您使用SDK作業或 AWS CLI,則會完全依照您提供的方式儲存原則,且不會自動移除字元。