

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Resource-based AWS 支付密码学政策
<a name="security_iam_resource-based-policies"></a>

Resource-based 策略是您附加到资源的 JSON 策略文档，例如 AWS 付款加密密钥。在基于资源的策略中，您可以指定谁可以访问密钥以及他们可以对密钥执行的操作。您可以使用基于资源的策略来：
+ 向多个用户和角色授予对单个密钥的访问权限。
+ 向其他 AWS 账户中的用户或角色授予访问权限。

**Topics**
+ [注意事项](#security_iam_resource-based-policies-considerations)
+ [管理基于资源的策略](#security_iam_resource-based-policies-manage)
+ [Resource-based 策略示例](#security_iam_resource-based-policies-examples)

当您将基于资源的策略附加到 AWS 支付加密密钥时， AWS Payment Cryptography 会使用 IAM 策略评估逻辑来确定给定的委托人是否有权执行所请求的操作。要启用跨账户访问，您可以将整个账户或另一个账户中的 IAM 实体指定为[基于资源的策略中的委托人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。 Cross-account 访问需要两个策略：

1. *Resource-based 策略（密钥所有者的账户）*— 密钥所有者`PutResourcePolicy`用来授予对调用者账户或 IAM 委托人的访问权限。

1. *Identity-based 策略（来电者的账户）*— 来电者的 IAM 管理员还必须允许呼叫者的 IAM 策略中的 AWS 付款加密操作（例如`payment-cryptography:EncryptData`）。

这两个策略都必须允许该操作。如果缺少其中一个，则跨账户请求将被拒绝。`AccessDeniedException`

如果基于资源的策略向同一账户中的委托人授予访问权限，则不需要其他基于身份的策略。有关更多信息，[请参阅 IAM *用户指南中的 IAM* 角色与 Resource-based 策略的区别](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)。

**资源策略控制平面操作**  
Resource-based 策略不适用于资源策略控制平面操作 [https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_PutResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_PutResourcePolicy.html)，例如[https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetResourcePolicy.html)、和[https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteResourcePolicy.html)。这样可以防止出现资源策略可能拒绝修改或删除策略本身的功能的潜在封锁情形。对这些控制平面操作的访问仅受基于 IAM 身份的策略的约束。

## 注意事项
<a name="security_iam_resource-based-policies-considerations"></a>

在使用基于资源的策略和 AWS 支付密码学时，请记住以下几点。
+ AWS 支付密码学自动强制禁止公开访问密钥。您不能创建向匿名或公共委托人授予访问权限的基于资源的策略。所有对 AWS 支付密码学密钥的访问都需要经过身份验证的 AWS 委托人，并且公共访问始终被阻止。
+ Resource-based 策略是按密钥应用的。每个 P AWS ayment Cryptography 密钥最多可以附加一个基于资源的策略。
+ Resource-based 策略不适用于别名。当您通过别名引用密钥时，将评估附加到底层密钥的资源策略。
+ Resource-based 策略不适用于此时使用 Multi-Region 密钥复制创建的只读副本区域密钥。资源策略只能附加到主区域密钥。
+ 基于资源的策略中的`Resource`元素必须与策略所关联的密钥的 ARN `"*"` 或完全匹配。建议使用`"*"`，因为它允许在多个密钥之间重复使用相同的策略文档。
+ 资源策略管理 API（`PutResourcePolicy``GetResourcePolicy`、和`DeleteResourcePolicy`）仅限 AWS 账户 于拥有密钥的。只有密钥所有者账户中的委托人才能管理资源策略。

## 管理基于资源的策略
<a name="security_iam_resource-based-policies-manage"></a>

您可以使用 AWS CLI 或 AWS API 管理基于资源的 AWS 支付加密密钥政策。要使用此命令，请将示例命令{{italicized placeholder text}}中的替换为您自己的信息。

**附加基于资源的策略**  
使用 [https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_PutResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_PutResourcePolicy.html)API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/put-resource-policy.html](https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/put-resource-policy.html)CLI 命令将基于资源的策略附加到密钥。如果策略已经存在，则该命令会替换它。

以下示例将 JSON 文件中的基于资源的策略附加到密钥。

```
aws payment-cryptography put-resource-policy \
    --resource-arn arn:aws:payment-cryptography:{{us-east-2}}:{{111122223333}}:key/{{kwapwa6qaifllw2h}} \
    --policy file://{{policy.json}}
```

**检索基于资源的策略**  
使用 [https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetResourcePolicy.html)API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/get-resource-policy.html](https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/get-resource-policy.html)CLI 命令检索附加到密钥的基于资源的策略。

以下示例检索附加到密钥的基于资源的策略。

```
aws payment-cryptography get-resource-policy \
    --resource-arn arn:aws:payment-cryptography:{{us-east-2}}:{{111122223333}}:key/{{kwapwa6qaifllw2h}}
```

响应会返回政策文档：

```
{
    "Policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::{{111122223333}}:role/{{ExampleRole}}"
                },
                "Action": [
                    "payment-cryptography:EncryptData",
                    "payment-cryptography:DecryptData"
                ],
                "Resource": "*"
            }
        ]
    }
}
```

**删除基于资源的策略**  
使用 [https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteResourcePolicy.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteResourcePolicy.html)API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/delete-resource-policy.html](https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/delete-resource-policy.html)CLI 命令从密钥中删除基于资源的策略。

以下示例删除了附加到密钥的基于资源的策略。

```
aws payment-cryptography delete-resource-policy \
    --resource-arn arn:aws:payment-cryptography:{{us-east-2}}:{{111122223333}}:key/{{kwapwa6qaifllw2h}}
```

## Resource-based 策略示例
<a name="security_iam_resource-based-policies-examples"></a>

### 授予对密钥的跨账户访问权限
<a name="security_iam_resource-based-policies-cross-account"></a>

以下基于资源的策略授予其他 AWS 账户中的角色使用 AWS 支付加密密钥进行加密操作的权限。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/{{ExampleRole}}"
            },
            "Action": [
                "payment-cryptography:GenerateCardValidationData",
                "payment-cryptography:VerifyCardValidationData"
            ],
            "Resource": "*"
        }
    ]
}
```

### 向不同的账户授予不同的权限
<a name="security_iam_resource-based-policies-restrict-actions"></a>

以下基于资源的策略演示了如何向不同账户中的委托人授予不同的权限。在此示例中，一个账户中的 3DS 访问控制服务器 (ACS) 可以生成卡验证数据，而另一个账户中的付款授权服务只能验证 3DS 密码。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Allow3DSACSToGenerate",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/{{3dsAcsRole}}"
            },
            "Action": [
                "payment-cryptography:GenerateCardValidationData"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowPaymentAuthToVerify",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{444455556666}}:role/{{PaymentAuthRole}}"
            },
            "Action": [
                "payment-cryptography:VerifyAuthRequestCryptogram"
            ],
            "Resource": "*"
        }
    ]
}
```