View a markdown version of this page

政策範本 - AWS Identity and Access Management

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

政策範本

政策範本是一種新的 IAM 建構,旨在定義合作夥伴在客戶帳戶中請求的暫時許可。與一般 IAM 政策一樣,它們使用具有效果、動作、資源和條件元素的陳述式來定義許可。關鍵差異在於政策範本包含參數 (例如 @{bucketName}),這些參數會在您建立委派請求時以實際值取代。

政策範本的運作方式

在加入程序中,您會向 註冊政策範本 AWS。 AWS 會為每個範本指派唯一的 ARN,供您在建立委派請求時參考。

當您建立委派請求時,您可以指定:

  • 政策範本 ARN

  • 要取代為範本的參數值

AWS 會將 範本與您的參數值合併,以產生標準 IAM 政策。客戶在核准委派請求時檢閱此最終轉譯政策,並查看將授予哪些許可。

注意

最終轉譯政策的大小上限為 2048 個字元。

以下是示範範本替換如何運作的簡單範例。

政策範本:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

委派請求中提供的參數:

{ "Name": "bucketName", "Values": ["customer-data-bucket"], "Type": "String" }

最終轉譯政策 (客戶看到的內容):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::customer-data-bucket/*" } ] }

範本語法

政策範本使用兩個主要功能來提供彈性:參數替換和條件式陳述式。參數替換可讓您在範本中定義預留位置,這些預留位置會在建立委派請求時以實際值取代。條件式陳述式可讓您根據參數值包含或排除整個政策陳述式。

參數替代和類型

使用 @{parameterName} 語法來定義政策範本中的參數。建立委派請求時,您必須指定每個參數的類型。

String

直接替換為範本的單一值。

範本:

"Resource": "arn:aws:s3:::@{bucketName}/*"

參數:

{ "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }

轉譯的結果:

"Resource": "arn:aws:s3:::my-bucket/*"

StringList

產生多個資源項目的多個值。在資源 ARN 中使用 StringList 參數時,它會展開以為每個值建立個別的資源項目。

範本:

"Resource": "arn:aws:s3:::@{bucketNames}/*"

參數:

{ "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }

轉譯的結果:

"Resource": [ "arn:aws:s3:::bucket-1/*", "arn:aws:s3:::bucket-2/*" ]

跨產品行為

在相同的資源 ARN 中使用多個參數時,StringList 參數會建立所有組合的跨產品。

範本:

"Resource": "arn:aws:s3:::@{bucketNames}/@{prefix}/*"

參數:

[ { "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }, { "Name": "prefix", "Values": ["data"], "Type": "String" } ]

轉譯的結果:

"Resource": [ "arn:aws:s3:::bucket-1/data/*", "arn:aws:s3:::bucket-2/data/*" ]

條件式陳述式

使用 @Enabled 指令,根據參數值有條件地包含或排除整個陳述式。

語法:

  • @Enabled: "parameterName" - 當參數值為 "True" 時包含陳述式

  • @Enabled: "!parameterName" - 當參數值不是 "True" (否定) 時包含陳述式

範本:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "@Enabled": "ENABLE_S3_WRITE", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

參數 (當 ENABLE_S3_WRITE 為 "True" 時):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["True"], "Type": "String" } ]

轉譯的結果:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::my-bucket/*" } ] }

參數 (當 ENABLE_S3_WRITE 為 "False" 時):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["False"], "Type": "String" } ]

轉譯的結果:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" } ] }

當 ENABLE_S3_WRITE 設為 "True" 時,會包含條件式陳述式。設定為 "False" 時,陳述式會從轉譯政策中排除。

其他範例

下列範例示範在暫時委派中使用政策範本的常見模式。他們專注於建立具有長期存取許可界限的 IAM 角色,並顯示將許可範圍限定到特定資源的不同策略。這些範例說明如何使用 ARN 字首、資源標記和許可界限更新等技術,在彈性與安全性之間取得平衡。

範例 1:授予特定資源的長期存取權

下列許可界限會提交為 "partner.com" 的 "SQSAccessorBoundary":

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }
注意

這包括相同的帳戶條件,以避免將存取權授予具有開啟資源政策的其他帳戶中的佇列。無法包含客戶帳戶 ID 的直接參考,因為邊界會跨所有客戶共用,且無法進行範本化。

由於這是此政策的第一個版本,其 ARN 為 arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15

提交下列政策範本以取得臨時存取許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ListQueues" ], "Resource": "arn:aws:sqs:*:*:*" }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15" } } } ] }

範例 2:使用 ARN 字首

許可界限可以指定資源 ARN 字首來限制存取:

"Resource": "arn:aws:sqs:*:@{AccountId}:PartnerPrefix*"

這只會限制存取具有該字首的資源,從而減少可存取資源的範圍。

範例 3:使用標籤進行資源存取控制

您可以在暫時委派存取期間標記資源,並依賴這些標籤進行長期存取控制。

允許存取已標記資源的許可界限:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:ResourceTag/ManagedByPartnerDotCom": "false" }, "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

在建立時標記新佇列的政策範本:

{ "Effect": "Allow", "Action": [ "sqs:CreateQueue", "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:RequestTag/ManagedByPartnerDotCom": "false" } } }

標記預先存在佇列並建立角色的政策範本:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:@{AccountId}:@{QueueName}", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": "ManagedByPartnerDotCom" } } }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15" } } } ] }

此方法可讓客戶明確確認可以長期存取哪些特定資源。

範例 4:更新許可界限

若要更新許可界限,請使用新的日期尾碼註冊新版本,並請求替換許可。

使用其他許可更新許可界限:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:PurgeQueue", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

做為第二個版本,此政策具有 ARN:arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_20

更新現有角色許可界限的政策範本:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PutRolePermissionsBoundary" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_20" } } } ] }

客戶必須核准此委派請求,才能更新現有角色的許可界限。