SCP 語法 - AWS Organizations

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SCP 語法

服務控制政策 (SCP) 使用的語法與 (IAM) 許可政策和以資源為基礎的政策 AWS Identity and Access Management (例如 Amazon S3 儲存貯體政策) 所使用的語法類似。如需 IAM 政策及其語法的詳細資訊,請參閱 IAM 使用者指南中的 https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html指南中的 IAM 政策概觀。

SCP 是根據 JSON 規則進行結構化的純文字檔。本主題描述它使用的元素。

注意

您 SCP 中所有的字元都會計入其大小上限。本指南中範例顯示的 SCP 格式具有額外的空格,以改善其可讀性。不過,若您的政策大小接近大小上限,為了節省空間,您可以刪除引號外部的任何空格,例如空格字元和換行字元。

如需 SCP 的一般資訊,請參閱服務控制政策 (SCP)

元素摘要

下表摘要說明您可以在 SCP 中使用的政策元素。有些政策元素僅能在拒絕動作的 SCP 中使用。Supported effects (支援效果) 欄會列出您在 SCP 中可搭配每個政策元素使用的效果類型。

Element 用途 支援效果
版本 指定用於處理政策的語言語法規則。

Allow, Deny

Statement 做為政策元素的容器。SCP 中可包含多個陳述式。 Allow, Deny
Statement ID (Sid) (選用) 提供陳述式的易記名稱。 Allow, Deny
效果 定義 SCP 陳述式是要允許還是拒絕存取帳戶中的 IAM 使用者和角色。 Allow, Deny

Action

指定 SCP 允許或拒絕的 AWS 服務和動作。

Allow, Deny

NotAction

指定從 SCP 排除的 AWS 服務和動作。使用此項目以取代 Action 元素。

Deny

Resource 指定 SCP 套用至的 AWS 資源。 Deny
Condition 指定決定陳述式生效時機的條件。 Deny

下列各節提供如何在 SCP 中使用政策元素的更多資訊及範例。

Version 元素

每個 SCP 必須包含具有值 "2012-10-17"Version 元素。這是與 IAM 許可政策的最新版本相同的版本值。

"Version": "2012-10-17",

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰版本

Statement 元素

SCP 包含一或多個 Statement 元素。您在政策中只能有一個 Statement 關鍵字,但其值可以是 JSON 陣列的陳述式 (加上 [ ] 字元)。

以下範例顯示單一陳述式,其中包含單一 EffectActionResource 元素。

"Statement": { "Effect": "Allow", "Action": "*", "Resource": "*" }

以下範例包含兩個陳述式,在一個 Statement 元素內有陣列清單。第一個陳述式會允許所有動作,第二個則會拒絕任何 EC2 動作。其結果是帳戶中的管理員可委派除了 Amazon Elastic Compute Cloud (Amazon EC2) 之外的任何許可。

"Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:*", "Resource": "*" } ]

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰陳述式

Statement ID (Sid) 元素

Sid 是一種您可以為政策陳述式提供的選用識別符。您可以將 Sid 值指派給陳述式陣列中的每個陳述式。以下範例 SCP 會顯示範例 Sid 陳述式。

{ "Statement": { "Sid": "AllowsAllActions", "Effect": "Allow", "Action": "*", "Resource": "*" } }

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰ID

Effect 元素

每個陳述式必須包含一個 Effect 元素。此值可以是 AllowDeny。它會影響任何相同陳述式中列出的動作。

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰效果

"Effect": "Allow"

以下範例會顯示一個具備陳述式的 SCP,該陳述式中包含了值為 AllowEffect 元素,允許帳戶使用者執行 Amazon S3 服務的動作。此範例在使用允許清單策略的組織中很有用 (默認 FullAWSAccess 政策全部分離,因為這樣就能讓許可按預設隱含獲得拒絕)。結果是,陳述式允許任何連接帳戶的 Amazon S3 許可︰

{ "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } }

即使此陳述式使用與 IAM 許可政策相同的 Allow 值關鍵字,在 SCP 中,它仍不會實際授予使用者執行任何動作的許可。而是,SCP 會充當篩選器,為組織中的 IAM 使用者和 IAM 角色指定最大許可。在上述範例中,即使帳戶中的使用者已有連接的 AdministratorAccess 受管政策,此 SCP 仍會將受影響帳戶中的所有使用者限制為僅能存取 Amazon S3 動作。

"Effect": "Deny"

Effect 元素的值為 Deny 的陳述式中,您也可以將存取限制在特定資源,或是定義決定 SCP 何時生效的條件。

以下顯示範例,示範如何在拒絕陳述式中使用條件金鑰。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:InstanceType": "t2.micro" } } } }

此 SCP 中的陳述式會設定一個防撞欄,防止受影響的帳戶 (其中 SCP 已連接到帳戶本身,或是連接到包含帳戶的組織根或 OU) 在 Amazon EC2 執行個體的類型並未設為 t2.micro 時啟動 Amazon EC2 執行個體。即使允許此動作的 IAM 政策已連接到帳戶,SCP 建立的防撞欄也會防止該操作。

ActionNotAction 元素

每個陳述式都必須包含以下其中一個項目:

  • 在允許和拒絕陳述式中,必須包含一個 Action 元素。

  • 針對拒絕陳述式 (Effect 元素的值為 Deny),必須包含一個 Action「或」NotAction 元素。

Actionor NotAction 元素的值是字串清單 (JSON 陣列),可識別陳述式允許或拒絕的 AWS 服務和動作。

每個字串都包含服務的縮寫 (例如 "s3"、"ec2"、"iam" 或 "organizations"),採用全部小寫,後面接著冒號,然後是來自該服務的動作。動作和非動作 (notaction) 區分大小寫,因此必須如每個服務文件中所示的方式輸入。一般而言,輸入時每個字會以首字大寫字母開始,然後其餘為小寫。例如:"s3:ListAllMyBuckets"

您也可以在 SCP 中使用萬用字元,例如星號 (*) 或問號 (?):

  • 使用星號 (*) 作為萬用字元,以比對部分名稱相同的多個動作。值 "s3:*" 表示 Amazon S3 服務中的所有動作。值 "ec2:Describe*" 只會符合開頭為 "Describe" 的 EC2 動作。

  • 使用問號 (?) 萬用字元來比對單一字元。

注意

在 SCP 中,ActionNotAction 元素中的萬用字元 (*) 和 (?) 只能單獨使用或用在字串結尾。它不能出現在字串開頭或中間。因此,在 SCP 中,"servicename:action*" 有效,但 "servicename:*action""servicename:some*action" 都無效。

如需 S AWS Organizations CP 和 IAM 權限政策中所支援的所有服務及其支援動作的清單,請參閱 IAM 使用者指南中的AWS 服務適用的動作、資源和條件金鑰

如需詳細資訊,請參閱 IAM JSON 政策元素:動作IAM JSON 政策元素: NotActionIAM 使用者指南中。

Action 元素的範例

以下範例顯示的 SCP 包含一個陳述式,允許帳戶管理員委派帳戶中 EC2 執行個體的描述、啟動、停止和終止許可。這是允許名單的範例,當預設的 Allow * 政策連接時非常有用,使得依預設會隱含拒絕許可。若預設的 Allow * 政策仍然連接到以下政策所連接的根、OU 或帳戶,則該政策不會有任何作用。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } }

以下範例示範如何將您不要在連接帳戶中使用的服務加入拒絕清單。它會假設預設的 "Allow *" SCP 仍連接到所有 OU 和根帳戶。此範例政策可防止連接的帳戶中的帳戶管理員針對 IAM、Amazon EC2 和 Amazon RDS 服務委派任何許可。可以委派來自其他服務的任何動作,只要沒有連接的另一個附加政策拒絕他們。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "iam:*", "ec2:*", "rds:*" ], "Resource": "*" } }

NotAction 元素的範例

下列範例顯示如何使用NotAction元素將 AWS 服務排除在策略的影響之外。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LimitActionsInRegion", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "us-west-1" } } } ] }

使用此聲明,受影響的帳戶僅限於在指定的中執行操作 AWS 區域,但使用 IAM 操作除外。

Resource 元素

Effect 元素的值為 Allow 的陳述式中,您只能在 SCP 的 Resource 元素內指定 "*"。您無法指定個別資源的 Amazon 資源名稱 (ARN)。

您也可以在資源元素中使用萬用字元,例如星號 (*) 或問號 (?):

  • 使用星號 (*) 作為萬用字元,以比對部分名稱相同的多個動作。

  • 使用問號 (?) 萬用字元來比對單一字元。

Effect 元素的值為 Deny 的陳述式中,您「可以」指定個別 ARN,如以下範例所示。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessToAdminRole", "Effect": "Deny", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DeleteRolePermissionsBoundary", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy", "iam:UpdateAssumeRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": [ "arn:aws:iam::*:role/role-to-deny" ] } ] }

此 SCP 會限制受影響帳戶中的 IAM 使用者和角色,對您組織中所有帳戶內建立的常見管理 IAM 角色進行變更。

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰資源

Condition 元素

您可以在 SCP 中的拒絕陳述式內指定 Condition 元素。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllOutsideEU", "Effect": "Deny", "NotAction": [ "cloudfront:*", "iam:*", "route53:*", "support:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": [ "eu-central-1", "eu-west-1" ] } } } ] }

除了所列出服務中的動作外,此 SCP 會拒絕存取任何位於 eu-central-1eu-west-1 區域外的操作。

如需詳細資訊,請參閱 IAM 使用者指南中的 IAM JSON 政策元素︰條件

不支援的元素

SCP 不支援以下元素:

  • Principal

  • NotPrincipal

  • NotResource