

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

# 政策範本
<a name="temporary-delegation-policy-templates"></a>

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

## 政策範本的運作方式
<a name="temporary-delegation-how-policy-templates-work"></a>

在加入程序中，您會向 註冊政策範本 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/*"
        }
    ]
}
```

## 範本語法
<a name="temporary-delegation-template-syntax"></a>

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

### 參數替代和類型
<a name="temporary-delegation-parameter-substitution"></a>

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

#### String
<a name="temporary-delegation-string-type"></a>

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

範本：

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

參數：

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

轉譯的結果：

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

#### StringList
<a name="temporary-delegation-stringlist-type"></a>

產生多個資源項目的多個值。在資源 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/*"
]
```

#### 跨產品行為
<a name="temporary-delegation-cross-product-behavior"></a>

在相同的資源 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/*"
]
```

### 條件式陳述式
<a name="temporary-delegation-conditional-statements"></a>

使用 @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\$1S3\$1WRITE 為 "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\$1S3\$1WRITE 為 "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\$1S3\$1WRITE 設為 "True" 時，會包含條件式陳述式。設定為 "False" 時，陳述式會從轉譯政策中排除。

## 其他範例
<a name="temporary-delegation-additional-examples"></a>

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

### 範例 1：授予特定資源的長期存取權
<a name="temporary-delegation-example-1"></a>

下列許可界限會提交為 "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\$12025\$101\$115

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

```
{
    "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 字首
<a name="temporary-delegation-example-2"></a>

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

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

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

### 範例 3：使用標籤進行資源存取控制
<a name="temporary-delegation-example-3"></a>

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

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

```
{
    "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：更新許可界限
<a name="temporary-delegation-example-4"></a>

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

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

```
{
    "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\$12025\$101\$120

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

```
{
    "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"
                }
            }
        }
    ]
}
```

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