

# RDS Proxy の IAM 認証の設定
<a name="rds-proxy-iam-setup"></a>

Amazon RDS で RDS Proxy の AWS Identity and Access Management (IAM) 認証を設定するには、必要なアクセス許可を付与する IAM ポリシーを作成して設定します。

このトピックでは、必要な IAM ポリシーの作成や IAM ロールへのアタッチなど、RDS Proxy の IAM 認証を設定する手順について説明します。

**ヒント**  
この手順は、独自の IAM ロールを作成する場合にのみ必要です。それ以外の場合は、プロキシの設定時に RDS が自動的に必要なロールを作成するため、これらのステップをスキップできます。

## 前提条件
<a name="rds-proxy-iam-setup-prereqs"></a>

RDS Proxy の IAM 認証を設定する前に、以下があることを確認してください。
+ **AWS Secrets Manager** – データベース認証情報を含む少なくとも 1 つの保存済みシークレット。シークレットの作成手順については、「[RDS Proxy のデータベース認証情報の設定](rds-proxy-secrets-arns.md)」を参照してください。

  これはエンドツーエンドの IAM 認証を使用している場合は必要ありません。
+ **IAM アクセス許可** – AWS Secrets Manager で IAM ポリシー、ロール、シークレットを作成および管理するためのアクセス許可を持つ IAM ロールまたはユーザー。

## エンドツーエンドの IAM 認証用の IAM ポリシーの作成
<a name="rds-proxy-iam-setup-e2e-steps"></a>

エンドツーエンドの IAM 認証を使用する場合、RDS Proxy は Secrets Manager から認証情報を取得するのではなく、IAM 認証を使用してデータベースに接続します。これには、プロキシで使用するデータベースアカウントの `rds-db:connect` アクセス許可を持つ IAM ロールを設定する必要があります。

IAM を使用して RDS Proxy をデータベースに対して認証するには、必要なデータベース接続許可を付与するポリシーを持つ IAM ロールを作成します。

### コンソール
<a name="rds-proxy-iam-e2e-console"></a>

**プロキシを使用してエンドツーエンドの IAM 認証用のロールを作成するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ロールに対するアクセス許可ポリシーを作成します。一般的な手順については、「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

   このポリシーを JSON エディタに貼り付け、以下の変更を行います。
   + 自分のアカウント ID に置き換えます。
   + `us-east-2` をプロキシが存在する必要のある場所に置き換えます。
   + データベースリソース ID とユーザー名を、使用するものに置き換えます。リソース ID の形式は、RDS インスタンスと Aurora clusters で異なります。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds-db:connect",
               "Resource": [
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
               ]
           }
       ]
   }
   ```

1. ロールを作成し、アクセス許可ポリシーをそのロールにアタッチします。一般的な手順については、「[AWS サービスにアクセス許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

   **[信頼されたエンティティタイプ]** で、**[AWS サービス]** を選択します。**[ユースケース]** で、**[RDS]** を選択し、ユースケースの **[RDS – ロールをデータベースに追加する]** を選択します。

1. **[アクセス許可ポリシー]** で、作成したポリシーを選択します。

1. **[信頼されたエンティティを選択]** で、ロールの次の信頼ポリシーを入力します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "rds.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

### AWS CLI
<a name="rds-proxy-iam-e2e-cli"></a>

AWS CLI を使用してロールを作成するには、次のリクエストを送信します。

```
aws iam create-role \
  --role-name my_e2e_iam_role_name \

  --assume-role-policy-document '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

ポリシーをロールにアタッチします。

```
aws iam put-role-policy \
  --role-name my_e2e_iam_role_name \
  --policy-name e2e_iam_db_connect_policy \
  --policy-document '{

    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": [
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
            ]
        }
    ]
}'
```

エンドツーエンドの IAM 認証用に設定された IAM ロールとアクセス許可を使用して、`DefaultAuthScheme` を `IAM_AUTH` に設定してプロキシを作成できるようになりました。このプロキシは、Secrets Manager シークレットを必要とせずに、IAM を使用してデータベースに直接認証します。手順については、「[Amazon RDS のプロキシの作成](rds-proxy-creating.md)」を参照してください。

エンドツーエンドの IAM 認証を使用する場合は、「[IAM 認証を使用したデータベースアカウントの作成](UsingWithRDS.IAMDBAuth.DBAccounts.md)」で説明されているように、データベースユーザーが IAM 認証用に設定されていることを確認します。

## Secrets Manager アクセス用の IAM ポリシーの作成
<a name="rds-proxy-iam-setup-steps"></a>

RDS Proxy が Secrets Manager からデータベース認証情報を取得できるようにするには、必要なアクセス許可を付与するポリシーを持つ IAM ロールを作成します。

## コンソール
<a name="rds-proxy-iam-console"></a>

**プロキシで使用するシークレットにアクセスするためのロールを作成するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ロールに対するアクセス許可ポリシーを作成します。一般的な手順については、「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

   このポリシーを JSON エディタに貼り付け、以下の変更を行います。
   + 自分のアカウント ID に置き換えます。
   + `us-east-2` をプロキシが存在するリージョンに置き換えます。
   + シークレット名を、作成したシークレット名に置き換えます。詳細については、「[Specifying KMS keys in IAM policy statements](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html)」を参照してください。
   + Secrets Manager シークレットの暗号化に使用した KMS キー ID を、デフォルトキーまたは独自のキーに置き換えます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": [
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1",
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "kms:Decrypt",
               "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id",
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. ロールを作成し、アクセス許可ポリシーをそのロールにアタッチします。一般的な手順については、「[AWS サービスにアクセス許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

   **[信頼されたエンティティタイプ]** で、**[AWS サービス]** を選択します。**[ユースケース]** で、**[RDS]** を選択し、ユースケースの **[RDS – ロールをデータベースに追加する]** を選択します。

1. **[アクセス許可ポリシー]** で、作成したポリシーを選択します。

1. **[信頼されたエンティティを選択]** で、ロールの次の信頼ポリシーを入力します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "rds.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

## AWS CLI
<a name="rds-proxy-iam-cli"></a>

AWS CLI を使用してロールを作成するには、次のリクエストを送信します。

```
aws iam create-role \
  --role-name my_role_name \
  --assume-role-policy-document '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

ポリシーをロールにアタッチします。

```
aws iam put-role-policy \
  --role-name my_role_name \
  --policy-name secret_reader_policy \
  --policy-document '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1",
                "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                }
            }
        }
    ]
}'
```

IAM ロールとアクセス許可を設定したら、プロキシを作成してこのロールに関連付けることができます。これにより、プロキシは AWS Secrets Manager からデータベース認証情報を安全に取得し、アプリケーションの IAM 認証を有効にすることができます。手順については、「[Amazon RDS のプロキシの作成](rds-proxy-creating.md)」を参照してください。