

# 在创建过程中授予为 Amazon RDS 资源添加标签的权限
<a name="security_iam_id-based-policy-examples-grant-permissions-tags-on-create"></a>

某些 RDS API 操作支持在创建资源时指定标签。您可以使用资源标签来实现基于属性的控制（ABAC）。有关更多信息，请参阅[什么是适用于 Amazon 的 ABAC？](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)和[使用标签控制对 Amazon 资源的访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html)。

为使用户能够在创建时为资源添加标签，他们必须有权使用创建该资源的操作（如 `rds:CreateDBInstance`）。如果在创建操作中指定了标签，则 RDS 会对 `rds:AddTagsToResource` 操作执行额外的授权，以验证用户是否具备创建标签的权限。因此，用户还必须具有使用 `rds:AddTagsToResource` 操作的显式权限。

在 `rds:AddTagsToResource` 操作的 IAM 策略定义中，可以使用 `aws:RequestTag` 条件键要求在请求中使用标签来为资源加标签。

例如，以下策略支持用户在创建数据库实例期间创建数据库实例和应用标签，但只能使用特定的标签键（`environment` 或 `project`）：

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "rds:CreateDBInstance"
           ],
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "rds:AddTagsToResource"
           ],
           "Resource": "*",
           "Condition": {
               "StringEquals": {
                   "aws:RequestTag/environment": ["production", "development"],
                   "aws:RequestTag/project": ["dataanalytics", "webapp"]
               },
               "ForAllValues:StringEquals": {
                   "aws:TagKeys": ["environment", "project"]
               }
           }
       }
   ]
}
```

------

此策略拒绝以下任何创建数据库实例请求：包含除 `environment` 或 `project` 标签之外的其它标签，或者未指定这两个标签中的任何一个。此外，用户必须为标签指定与策略中支持的值相匹配的值。

以下策略支持用户创建数据库集群和在创建过程中应用除 `environment=prod` 标签以外的任何标签：

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "rds:CreateDBCluster"
           ],
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "rds:AddTagsToResource"
           ],
           "Resource": "*",
           "Condition": {
               "StringNotEquals": {
                   "aws:RequestTag/environment": "prod"
               }
           }
       }
   ]
}
```

------

## 支持在创建时添加标签的 RDS API 操作
<a name="security_iam_id-based-policy-examples-supported-rds-api-actions-tagging-creation"></a>

以下 RDS API 操作支持在创建资源时添加标签。对于这些操作，您可以在创建资源时指定标签：
+ `CreateBlueGreenDeployment`
+ `CreateCustomDBEngineVersion`
+ `CreateDBCluster`
+ `CreateDBClusterEndpoint`
+ `CreateDBClusterParameterGroup`
+ `CreateDBClusterSnapshot`
+ `CreateDBInstance`
+ `CreateDBInstanceReadReplica`
+ `CreateDBParameterGroup`
+ `CreateDBProxy`
+ `CreateDBProxyEndpoint`
+ `CreateDBSecurityGroup`
+ `CreateDBShardGroup`
+ `CreateDBSnapshot`
+ `CreateDBSubnetGroup`
+ `CreateEventSubscription`
+ `CreateGlobalCluster`
+ `CreateIntegration`
+ `CreateOptionGroup`
+ `CreateTenantDatabase`
+ `CopyDBClusterParameterGroup`
+ `CopyDBClusterSnapshot`
+ `CopyDBParameterGroup`
+ `CopyDBSnapshot`
+ `CopyOptionGroup`
+ `RestoreDBClusterFromS3`
+ `RestoreDBClusterFromSnapshot`
+ `RestoreDBClusterToPointInTime`
+ `RestoreDBInstanceFromDBSnapshot`
+ `RestoreDBInstanceFromS3`
+ `RestoreDBInstanceToPointInTime`
+ `PurchaseReservedDBInstancesOffering`

如果您使用 Amazon CLI 或 API 创建带有标签的资源，则 `Tags` 参数用于在创建期间对资源应用标签。

对于这些 API 操作，如果添加标签失败，则不会创建资源，并且请求失败且显示错误。这可确保要么创建带有标签的资源，要么根本不创建资源，从而防止创建不带所需标签的资源。