

# RDS 프록시에 대한 IAM 인증 구성
<a name="rds-proxy-iam-setup"></a>

Amazon RDS에서 RDS 프록시에 대한 AWS Identity and Access Management(IAM) 인증을 설정하려면 필수 권한을 부여하는 IAM 정책을 만들고 구성합니다.

이 주제에서는 필요한 IAM 정책을 만들고 IAM 역할에 연결하는 등 RDS 프록시에 대한 IAM 인증을 구성하는 단계를 제공합니다.

**작은 정보**  
이 절차는 자체 IAM 역할을 만들려는 경우에만 필요합니다. 그렇지 않으면 프록시를 설정할 때 RDS가 필요한 역할을 자동으로 만들 수 있으므로 이러한 단계를 건너뛸 수 있습니다.

## 사전 조건
<a name="rds-proxy-iam-setup-prereqs"></a>

RDS 프록시에 대한 IAM 인증을 설정하기 전에 다음 사항이 포함되어 있는지 확인합니다.
+ **AWS Secrets Manager** - 데이터베이스 자격 증명이 포함된 하나 이상의 저장된 보안 암호입니다. 보안 암호를 만드는 설명은 [RDS 프록시용 데이터베이스 자격 증명 설정](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 프록시는 Secrets Manager에서 자격 증명을 검색하는 대신 IAM 인증을 사용하여 데이터베이스에 연결합니다. 이렇게 하려면 프록시에 사용할 데이터베이스 계정에 대한 `rds-db:connect` 권한으로 IAM 역할을 구성해야 합니다.

IAM을 사용하여 데이터베이스에 대한 RDS 프록시를 인증하려면 필요한 데이터베이스 연결 권한을 부여하는 정책을 사용하여 IAM 역할을 생성합니다.

### 콘솔
<a name="rds-proxy-iam-e2e-console"></a>

**프록시를 사용하여 엔드 투 엔드 IAM 인증을 위한 역할 생성**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 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 프록시가 Secrets Manager에서 데이터베이스 자격 증명을 검색하도록 허용하려면 필수 권한을 부여하는 정책을 사용하여 IAM 역할을 만듭니다.

## 콘솔
<a name="rds-proxy-iam-console"></a>

**프록시와 함께 사용할 보안 암호에 액세스하는 IAM 정책을 만들려면 다음과 같이 합니다.**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 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)를 참조하시기 바랍니다.
   + KMS 키 ID를 기본 키 또는 자체 키인 Secrets Manager 보안 암호를 암호화하는 데 사용한 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) 섹션을 참조하세요.