

# Amazon RDS でリソースを作成、変更、削除するアクセス許可ポリシー
<a name="security_iam_id-based-policy-examples-create-and-modify-examples"></a>

以下のセクションでは、リソースへのアクセスを許可および制限するアクセス許可ポリシーの例を示します。

## AWS アカウントでの DB インスタンスの作成をユーザーに許可する
<a name="security_iam_id-based-policy-examples-create-db-instance-in-account"></a>

以下は、`123456789012` アカウントで ID が AWS のアカウントが DB インスタンスを作成できるようにするポリシーの例です。ポリシーは、`test` で始める新しい DB インスタンスの名前である必要があります。また、新しい DB インスタンスは、MySQL データベースエンジンと DB インスタンスの `db.t2.micro` クラスを使用する必要があります。さらに、新しい DB インスタンスでは、オプショングループと `default` で始まる DB パラメータグループ、および `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 オペレーションを使用して DB インスタンスを作成できます (これは [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI コマンドと AWS マネジメントコンソール にも適用されます)。
+ `Resource` 要素では、ユーザーがリソースでアクションを実行できることを指定できます。Amazon Resources Name (ARN) を使用してリソースを指定します。この ARN には、リソースが属しているサービスの名前 (`rds`)、AWS リージョン (`*` はこの例のリージョンを示します)、AWS アカウント番号 (`123456789012` はこの例のアカウント番号です)、およびリソースのタイプが含まれます。ARN の作成の詳細については、「[Amazon RDS の Amazon リソースネーム (ARN)](USER_Tagging.ARN.md)」を参照してください。

  例の `Resource` 要素は、ユーザーのリソースで、以下のポリシーの制約を指定します。
  + 新しい DB インスタンスの DB インスタンス識別子は、`test` で始まる必要があります (例: `testCustomerData1`、`test-region2-data`)。
  + 新しい DB インスタンスのオプショングループは、`default` で始まる必要があります。
  + 新しい DB インスタンスの DB パラメータグループは、`default` で始まる必要があります。
  + 新しい DB インスタンスのサブネットグループは、`default` サブネットグループである必要があります。
+ `Condition` 要素は、DB エンジンが MySQL で、DB インスタンスクラスが `db.t2.micro` である必要があることを指定します。`Condition` 要素は、ポリシーが有効になる条件を指定します。`Condition` 要素を使用して、アクセス許可または制約を追加できます。条件を指定する方法については、「[Amazon RDS のポリシー条件キー](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` の有効な条件値については、「[DB インスタンスクラスでサポートされている DB エンジン](Concepts.DBInstanceClass.Support.md)」を参照してください。

アイデンティティベースのポリシーでアクセス権限を得るプリンシパルを指定していないため、ポリシーでは `Principal` 要素を指定していません。ユーザーにポリシーをアタッチすると、そのユーザーが暗黙のプリンシパルになります。IAM ロールにアクセス権限ポリシーをアタッチすると、ロールの信頼ポリシーで識別されたプリンシパルがアクセス権限を得ることになります。

Amazon RDS アクションのリストを確認するには、「サービス認可リファレンス」の「[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` で始まるすべてのアクションを実行するためのアクセス権限をユーザーに付与します。これらのアクションは、DB インスタンスなど RDS リソースに関する情報を表示します。`Resource` 要素内のワイルドカード文字 (\$1) は、アカウントによって所有されるすべての Amazon RDS リソースに対してそれらのアクションが許可されることを示します。

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

****  

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

------

## 指定した DB パラメータグループとサブネットグループを使用する DB インスタンスの作成をユーザーに許可する
<a name="security_iam_id-based-policy-examples-create-db-instance-specified-groups"></a>

以下の許可ポリシーは、`mydbpg` DB パラメータグループと `mydbsubnetgroup` DB サブネットグループを使用する必要のある DB インスタンスを作成することのみをユーザーに許可するための許可を付与します。

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

****  

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

------

## 2 つの異なる値を持つタグが付いたリソースに対するアクションにアクセス許可を付与する
<a name="security_iam_id-based-policy-examples-grant-permissions-tags"></a>

アイデンティティベースのポリシーの条件を使用して、タグに基づいて Amazon RDS リソースへのアクセスを制御できます。次のポリシーでは、`stage` タグが `development` または `test` に設定された DB インスタンスに対して `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` に設定された DB インスタンスに対して `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"
               ]
            }
         }
      }
   ]
}
```

------

## ユーザーによる DB インスタンスの削除を禁止する
<a name="IAMPolicyExamples-RDS-prevent-db-deletion"></a>

以下のアクセス権限ポリシーは、特定の DB インスタンスを削除することをユーザーに禁止するためのアクセス権限を付与します。例えば、管理者以外のすべてのユーザーに対して、本稼働 DB インスタンスの削除を拒否することができます。

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

------