

# 在 Aurora 中创建、修改和删除资源的权限策略
<a name="security_iam_id-based-policy-examples-create-and-modify-examples"></a>

以下各节展示了授予和限制资源访问权限的权限策略示例：

## 允许用户在 AWS 账户中创建数据库实例
<a name="security_iam_id-based-policy-examples-create-db-instance-in-account"></a>

以下是支持 ID 为 `123456789012` 的账户为您的 AWS 账户创建数据库实例的示例策略。该策略要求新数据库实例的名称以 `test` 开头。新数据库实例还必须使用 MySQL 数据库引擎和 `db.t2.micro` 数据库实例类。此外，新数据库实例必须使用以 `default` 开头的选项组和数据库参数组，并且它必须使用 `default` 子网组。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowCreateDBInstanceOnly",
         "Effect": "Allow",
         "Action": [
            "rds:CreateDBInstance"
         ],
         "Resource": [
            "arn:aws:rds:*:123456789012:db:test*",
            "arn:aws:rds:*:123456789012:og:default*",
            "arn:aws:rds:*:123456789012:pg:default*",
            "arn:aws:rds:*:123456789012:subgrp:default"
         ],
         "Condition": {
            "StringEquals": {
               "rds:DatabaseEngine": "mysql",
               "rds:DatabaseClass": "db.t2.micro"
            }
         }
      }
   ]
}
```

------

此策略包含一个为 用户指定以下权限的语句：
+ 该策略可让该账户使用 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) API 操作创建数据库实例（这还适用于 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 命令和 AWS 管理控制台）。
+ `Resource` 元素指定用户可以执行操作的资源。使用 Amazon Resource Name (ARN) 指定资源。此 ARN 包括资源所属服务的名称（`rds`）、AWS 区域（在该示例中，`*` 指示任何区域）、AWS 账号（在该示例中，`123456789012` 为账号）以及资源的类型。有关创建 ARN 的更多信息，请参阅[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)。

  该示例中的 `Resource` 元素为用户指定有关资源的以下策略限制：
  + 新数据库实例的数据库实例标识符必须以 `test` 开头 (例如，`testCustomerData1`、`test-region2-data`)。
  + 新数据库实例的选项组必须以 `default` 开头。
  + 新数据库实例的数据库参数组必须以 `default` 开头。
  + 新数据库实例的子网组必须是 `default` 子网组。
+ `Condition` 元素指定数据库引擎必须是 MySQL 并且数据库实例类必须是 `db.t2.micro`。`Condition` 元素指定策略生效的条件。您可以通过使用 `Condition` 元素添加其他权限或限制。有关指定条件的更多信息，请参阅[Aurora 的策略条件键](security_iam_service-with-iam.md#UsingWithRDS.IAM.Conditions)。此示例指定 `rds:DatabaseEngine` 和 `rds:DatabaseClass` 条件。有关 `rds:DatabaseEngine` 的有效条件值的信息，请参阅 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 中的 `Engine` 参数下的列表。有关 `rds:DatabaseClass` 的有效条件值的信息，请参阅 [数据库实例类支持的数据库引擎](Concepts.DBInstanceClass.SupportAurora.md)。

该策略不指定 `Principal` 元素，因为在基于身份的策略中，您未指定获取权限的委托人。附加了策略的用户是隐式委托人。向 IAM 角色附加权限策略后，该角色的信任策略中标识的委托人将获取权限。

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

## 允许用户对任何 RDS 资源执行任何 Describe 操作
<a name="IAMPolicyExamples-RDS-perform-describe-action"></a>

以下权限策略对用户授予权限以运行以 `Describe` 开头的所有操作。这些操作显示有关 RDS 资源 (如数据库实例) 的信息。`Resource` 元素中的通配符 (\$1) 表示可对账户拥有的所有 Amazon Aurora 资源执行操作。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowRDSDescribe",
         "Effect": "Allow",
         "Action": "rds:Describe*",
         "Resource": "*"
      }
   ]
}
```

------

## 允许用户创建使用指定数据库参数组和子网组的数据库实例
<a name="security_iam_id-based-policy-examples-create-db-instance-specified-groups"></a>

以下权限策略授予权限以允许用户仅创建必须使用 `mydbpg` 数据库参数组和 `mydbsubnetgroup` 数据库子网组的数据库实例。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": "rds:CreateDBInstance",
         "Resource": [
            "arn:aws:rds:*:*:pg:mydbpg",
            "arn:aws:rds:*:*:subgrp:mydbsubnetgroup"
         ]
      }
   ]
}
```

------

## 授予权限以允许对在特定标签中包含两个不同值的资源执行操作
<a name="security_iam_id-based-policy-examples-grant-permissions-tags"></a>

您可以在基于身份的策略中使用条件，以便基于标签控制对 Aurora 资源的访问。以下策略所授予的权限允许对 `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"
               ]
            }
         }
      }
   ]
}
```

------

## 防止用户删除数据库实例
<a name="IAMPolicyExamples-RDS-prevent-db-deletion"></a>

以下权限策略授予权限以防止用户删除特定数据库实例。例如，您可能想禁止任何非管理员用户删除您的生产数据库实例。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "DenyDelete1",
         "Effect": "Deny",
         "Action": "rds:DeleteDBInstance",
         "Resource": "arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
      }
   ]
}
```

------

## 拒绝对资源的所有访问
<a name="IAMPolicyExamples-RDS-deny-all-access"></a>

您可以明确拒绝对资源的访问。拒绝策略优先于允许策略。以下策略明确拒绝用户管理资源的能力：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Deny",
         "Action": "rds:*",
         "Resource": "arn:aws:rds:us-east-1:123456789012:db:mydb"
      }
   ]
}
```

------