

# 指定条件：使用自定义标签
<a name="UsingWithRDS.IAM.SpecifyingCustomTags"></a>

Amazon RDS 支持在 IAM 策略中使用自定义标签指定条件。

例如，假定您将一个名为 `environment` 的标签添加到具有 `beta`、`staging`、`production` 等值的数据库实例。如果您这样做，则可创建一个策略来根据 `environment` 标签值以仅允许某些用户使用数据库实例。

**注意**  
自定义标签标识符区分大小写。

下表列出了可以在 `Condition` 元素中使用的 RDS 标签标识符。

<a name="rds-iam-condition-tag-reference"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.SpecifyingCustomTags.html)

自定义标签条件的语法如下：

`"Condition":{"StringEquals":{"rds:rds-tag-identifier/tag-name": ["value"]} }` 

例如，以下 `Condition` 元素适用于具有名为 `environment` 的标签且标签值为 `production` 的数据库实例。

` "Condition":{"StringEquals":{"rds:db-tag/environment": ["production"]} } ` 

有关创建标签的信息，请参阅[为 Amazon RDS 资源添加标签](USER_Tagging.md)。

**重要**  
如果您使用标签管理对 RDS 资源的访问，建议您保护对 RDS 资源的标签的访问。您可通过为 `AddTagsToResource` 和 `RemoveTagsFromResource` 操作创建策略来管理对标签的访问。例如，以下策略不允许用户为所有资源添加或删除标签。之后，您可创建策略来允许特定用户添加或删除标签。  

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"DenyTagUpdates",
         "Effect":"Deny",
         "Action":[
            "rds:AddTagsToResource",
            "rds:RemoveTagsFromResource"
         ],
         "Resource":"*"
      }
   ]
}
```

有关 Amazon RDS 操作的列表，请参阅*服务授权参考*中的 [Amazon RDS 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-actions-as-permissions)。

## 示例策略：使用自定义标签
<a name="UsingWithRDS.IAM.Conditions.Tags.Examples"></a>

以下示例说明了如何在 Amazon RDS IAM 权限策略中使用自定义标签。有关向 Amazon RDS 资源添加标签的更多信息，请参阅[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)。

**注意**  
所有示例都使用 us-west-2 区域和虚构的账户 ID。

### 示例 1：授予权限以允许对在特定标签中包含两个不同值的资源执行操作
<a name="w2aac58c48c33c23c29b6"></a>

以下策略所授予的权限允许对 `stage` 标签设置为 `development` 或 `test` 的实例执行 `CreateDBSnapshot` API 操作。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowAnySnapshotName",
         "Effect":"Allow",
         "Action":[
            "rds:CreateDBSnapshot"
         ],
         "Resource":"arn:aws:rds:*:123456789012:snapshot:*"
      },
      {
         "Sid":"AllowDevTestToCreateSnapshot",
         "Effect":"Allow",
         "Action":[
            "rds:CreateDBSnapshot"
         ],
         "Resource":"arn:aws:rds:*:123456789012:db:*",
         "Condition":{
            "StringEquals":{
                "rds:db-tag/stage":[
                  "development",
                  "test"
               ]
            }
         }
      }
   ]
}
```

------

以下策略所授予的权限允许对 `stage` 标签设置为 `development` 或 `test` 的实例执行 `ModifyDBInstance` API 操作。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowChangingParameterOptionSecurityGroups",
         "Effect":"Allow",
         "Action":[
            "rds:ModifyDBInstance"
            ],
          "Resource": [
            "arn:aws:rds:*:123456789012:pg:*",
            "arn:aws:rds:*:123456789012:secgrp:*",
            "arn:aws:rds:*:123456789012:og:*"
            ]
       },
       {
         "Sid":"AllowDevTestToModifyInstance",
         "Effect":"Allow",
         "Action":[
            "rds:ModifyDBInstance"
            ],
         "Resource":"arn:aws:rds:*:123456789012:db:*",
         "Condition":{
            "StringEquals":{
               "rds:db-tag/stage":[
                  "development",
                  "test"
                  ]
               }
            }
       }
    ]
}
```

------

### 示例 2：明确拒绝权限，以禁止创建使用指定数据库参数组的数据库实例
<a name="w2aac58c48c33c23c29b8"></a>

以下策略通过显式拒绝权限，禁止创建在数据库参数组中包含特定标签值的数据库实例。如果您需要在创建数据库实例时始终使用特定客户创建的数据库参数组，则可以应用此策略。使用 `Deny` 的策略最常用于限制由更宽泛的策略所授予的访问权限。

显式拒绝权限会取代授予的任何其他权限。这可确保用户身份不会无意中获得您绝不希望授予的权限。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"DenyProductionCreate",
         "Effect":"Deny",
         "Action":"rds:CreateDBInstance",
         "Resource":"arn:aws:rds:*:123456789012:pg:*",
         "Condition":{
            "StringEquals":{
               "rds:pg-tag/usage":"prod"
            }
         }
      }
   ]
}
```

------

### 示例 3：授予权限以允许对实例名称以用户名为前缀的数据库实例执行操作
<a name="w2aac58c48c33c23c29c10"></a>

以下策略授予的权限允许对具有如下性质的数据库实例调用除 `AddTagsToResource` 和 `RemoveTagsFromResource` 以外的任何 API：该数据库实例的实例名称以用户名称作为前缀，并且具有值为 `stage` 的 `devo` 标签或没有名为 `stage` 的标签。

策略中的 `Resource` 行通过 Amazon Resource Name (ARN) 标识资源。有关对 Amazon RDS 资源使用 ARN 的更多信息，请参阅[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowFullDevAccessNoTags",
         "Effect":"Allow",
         "NotAction":[
            "rds:AddTagsToResource",
            "rds:RemoveTagsFromResource"
         ],
         "Resource":"arn:aws:rds:*:123456789012:db:${aws:username}*",
         "Condition":{
            "StringEqualsIfExists":{
               "rds:db-tag/stage":"devo"
            }
         }
      }
   ]
}
```

------