

# Amazon RDS 의 보안
<a name="UsingWithRDS"></a>

AWS에서는 클라우드 보안을 가장 중요하게 생각합니다. AWS 고객은 보안에 가장 보안에 민감한 조직의 요구 사항에 부합하도록 빌드된 데이터 센터 및 네트워크 아키텍처의 혜택을 누릴 수 있습니다.

보안은 AWS와 귀하의 공동 책임입니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 이 사항을 클라우드 *내* 보안 및 클라우드*의* 보안으로 설명합니다.
+  **클라우드의 보안** - AWS는 AWS Cloud에서 AWS 서비스를 실행하는 인프라를 보호합니다. AWS는 또한 안전하게 사용할 수 있는 서비스를 제공합니다. 서드 파티 감사원은 정기적으로 [AWS규정 준수 프로그램](https://aws.amazon.com/compliance/programs/)의 일환으로 보안 효과를 테스트하고 검증합니다. Amazon RDS 에 적용되는 규정 준수 프로그램에 대해 알아보려면 [AWS services in scope by compliance program](https://aws.amazon.com/compliance/services-in-scope/)을 참조하세요.
+  **클라우드 내 보안** – 귀하의 책임은 귀하가 사용하는 AWS 서비스에 의해 결정됩니다. 또한 데이터의 민감도, 조직의 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

이 설명서는 Amazon RDS 사용 시 공동 책임 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 항목에서는 보안 및 규정 준수 목표를 충족하도록 Amazon RDS 를 구성하는 방법을 보여 줍니다. 또한 Amazon RDS 리소스를 모니터링하고 보호하는 데 도움이 되는 다른 AWS 서비스를 사용하는 방법을 알아봅니다.

DB 인스턴스 에서 Amazon RDS 리소스 및 데이터베이스에 대한 액세스를 관리할 수 있습니다. 액세스 관리에 사용하는 방법은 사용자가 Amazon RDS 를 사용하여 수행해야 하는 작업 유형에 따라 다릅니다.
+ 네트워크 액세스 제어를 최대한 강화할 목적으로 Amazon VPC 서비스에 따라 DB 인스턴스 를가상 프라이빗 클라우드(VPC)에서 실행합니다. DB 인스턴스 를 VPC에서 만드는 방법에 대한 자세한 내용은 [Amazon VPC 및 Amazon RDS](USER_VPC.md) 섹션을 참조하세요.
+ Amazon RDS 리소스를 관리할 수 있는 사용자를 결정하는 권한을 할당하려면 AWS Identity and Access Management(IAM) 정책을 사용합니다. 예를 들면, IAM을 사용하여 DB 인스턴스 , 태그 리소스를 생성, 설명, 수정, 삭제하거나 보안 그룹을 수정할 수 있는 사용자를 결정할 수 있습니다.
+ 보안 그룹을 사용하여 어떤 IP 주소 또는 Amazon EC2 인스턴스가 DB 인스턴스 에 있는 데이터베이스에 연결할 수 있는지 제어합니다. DB 인스턴스 를 처음 생성하면, 방화벽이 연결된 보안 그룹에서 지정한 규칙을 통한 액세스 이외의 데이터베이스 액세스를 차단합니다.
+  Db2, MySQL, MariaDB, PostgreSQL, Oracle 또는 Microsoft SQL Server 데이터베이스 엔진을 실행하는 DB 인스턴스에 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS) 연결을 사용합니다. DB 인스턴스 에서 SSL/TLS를 사용하는 것에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.
+ Amazon RDS 암호화를 사용하여 DB 인스턴스 및 저장 중인 스냅샷을 보호합니다. Amazon RDS 암호화는 DB 인스턴스 를 호스팅하는 서버의 데이터를 업계 표준 AES-256 암호화 알고리즘을 사용하여 암호화합니다. 자세한 내용은 섹션을 참조하세요[Amazon RDS 리소스 암호화](Overview.Encryption.md)
+ Oracle DB 인스턴스와 함께 네트워크 암호화 및 Transparent Data Encryption을 사용합니다. 자세한 내용은 [Oracle 기본 네트워크 암호화](Appendix.Oracle.Options.NetworkEncryption.md) 및 [Oracle Transparent Data Encryption](Appendix.Oracle.Options.AdvSecurity.md) 단원을 참조하십시오.
+ DB 엔진의 보안 기능을 사용하여 DB 인스턴스 에 있는 데이터베이스에 누가 로그인할 수 있는지 제어합니다. 이러한 보안 기능은 데이터베이스가 마치 로컬 네트워크에 있는 것처럼 실행됩니다.

**참고**  
사용 사례에 따라 보안을 구성해야 합니다. Amazon RDS가 관리하는 프로세스에 대한 보안 액세스를 구성할 필요가 없습니다. 이러한 프로세스로는 백업 생성, 기본 DB 인스턴스와 읽기 전용 복제본 간 데이터 복제 등이 있습니다.

Amazon RDS 리소스에 대한 액세스 관리와 DB 인스턴스 의 데이터베이스에 대한 액세스 관리에 대해서는 아래 주제를 참조하세요.

**Topics**
+ [

# Amazon RDS 를 사용한 데이터베이스 인증
](database-authentication.md)
+ [

# Amazon RDS 및 AWS Secrets Manager를 통한 암호 관리
](rds-secrets-manager.md)
+ [

# Amazon RDS의 데이터 보호
](DataDurability.md)
+ [

# Amazon RDS의 자격 증명 및 액세스 관리
](UsingWithRDS.IAM.md)
+ [

# Amazon RDS 의 로깅 및 모니터링
](Overview.LoggingAndMonitoring.md)
+ [

# Amazon RDS의 규정 준수 확인
](RDS-compliance.md)
+ [

# Amazon RDS의 복원성
](disaster-recovery-resiliency.md)
+ [

# Amazon RDS의 인프라 보안
](infrastructure-security.md)
+ [

# Amazon RDS API 및 인터페이스 VPC 엔드포인트(AWS PrivateLink)
](vpc-interface-endpoints.md)
+ [

# Amazon RDS 의 보안 모범 사례
](CHAP_BestPractices.Security.md)
+ [

# 보안 그룹을 통한 액세스 제어
](Overview.RDSSecurityGroups.md)
+ [

# 마스터 사용자 계정 권한
](UsingWithRDS.MasterAccounts.md)
+ [

# Amazon RDS에 서비스 연결 역할 사용
](UsingWithRDS.IAM.ServiceLinkedRoles.md)
+ [

# Amazon VPC 및 Amazon RDS
](USER_VPC.md)

# Amazon RDS 를 사용한 데이터베이스 인증
<a name="database-authentication"></a>

 Amazon RDS 는 데이터베이스 사용자를 인증하는 여러 가지 방법을 지원합니다.

암호, Kerberos 및 IAM 데이터베이스 인증은 데이터베이스에 대해 서로 다른 인증 방법을 사용합니다. 따라서 특정 사용자는 하나의 인증 방법만 사용하여 데이터베이스에 로그인할 수 있습니다.

PostgreSQL의 경우, 특정 데이터베이스 사용자에 대해 다음 역할 설정 중 하나만 사용하세요.
+ IAM 데이터베이스 인증을 사용하려면 `rds_iam` 역할을 사용자에게 할당합니다.
+ Kerberos 인증을 사용하려면 `rds_ad` 역할을 사용자에게 할당합니다.
+ 암호 인증을 사용하려면 `rds_iam` 또는 `rds_ad` 역할을 사용자에게 할당하지 않습니다.

`rds_iam` 및 `rds_ad` 역할을 직접적으로 또는 중첩된 액세스 권한 부여를 통해 간접적으로 PostgreSQL 데이터베이스 사용자에게 둘 다 할당하지 않도록 합니다. `rds_iam` 역할이 마스터 사용자에게 추가되면, IAM 인증이 암호 인증보다 우선하므로 마스터 사용자가 IAM 사용자로 로그인해야 합니다.

**중요**  
애플리케이션에서 직접 마스터 사용자를 사용하지 않는 것이 좋습니다. 대신에 애플리케이션에 필요한 최소 권한으로 생성한 데이터베이스 사용자를 사용하는 모범 사례를 준수하십시오.

**Topics**
+ [

## 암호 인증
](#password-authentication)
+ [

## IAM 데이터베이스 인증
](#iam-database-authentication)
+ [

## Kerberos 인증
](#kerberos-authentication)

## 암호 인증
<a name="password-authentication"></a>

*암호 인증*을 통해 데이터베이스는 모든 사용자 계정 관리를 수행합니다. `CREATE USER`와 같은 DB 엔진에서 암호를 지정하는 데 필요한 적절한 절이 있는 SQL 문을 사용하여 사용자를 생성합니다. 예를 들어 MySQL에서 명령문은 `CREATE USER` *이름* `IDENTIFIED BY` *암호*이지만 PostgreSQL에서 명령문은 `CREATE USER` *이름* `WITH PASSWORD` *암호*입니다.

암호 인증을 통해 데이터베이스는 사용자 계정을 제어하고 인증합니다. DB 엔진에 강력한 암호 관리 기능이 있는 경우 보안을 강화할 수 있습니다. 소규모 사용자 커뮤니티가 있는 경우 암호 인증을 사용하여 데이터베이스 인증을 쉽게 관리할 수 있습니다. 이 경우 일반 텍스트 암호가 생성되므로 AWS Secrets Manager과 통합하면 보안이 강화될 수 있습니다.

Secrets Manager를 Amazon RDS 와 함께 사용하는 것에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*에서 [Creating a basic secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) 및 [Rotating secrets for supported Amazon RDS databases](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-rds.html)를 참조하세요. 사용자 지정 애플리케이션에서 프로그래밍 방식으로 비밀을 검색하는 방법에 대한 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [비밀 값 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_retrieve-secret.html)을 참조하세요.

## IAM 데이터베이스 인증
<a name="iam-database-authentication"></a>

AWS Identity and Access Management(IAM) 데이터베이스 인증을 사용하여 DB 인스턴스 에 인증할 수 있습니다. 이러한 인증 방식은 DB 인스턴스 에 연결할 때 암호를 사용할 필요가 없습니다. 대신에 인증 토큰을 사용합니다.

특정 DB 엔진의 가용성에 대한 정보를 포함하여 IAM 데이터베이스 인증에 대한 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 섹션을 참조하세요.

## Kerberos 인증
<a name="kerberos-authentication"></a>

 Amazon RDS에서는 Kerberos 및 Microsoft Active Directory를 사용한 데이터베이스 사용자의 외부 인증을 지원합니다. Kerberos는 티켓과 대칭 키 암호화를 사용하여 네트워크를 통해 암호를 전송할 필요가 없는 네트워크 인증 프로토콜입니다. Kerberos는 Active Directory에 내장되어 있으며 데이터베이스와 같은 네트워크 리소스에 대해 사용자를 인증하도록 설계되었습니다.

 Kerberos 및 Active Directory에 대한 Amazon RDS의 지원은 데이터베이스 사용자에게 Single Sign-On 및 중앙 집중식 인증의 이점을 제공합니다. 사용자 자격 증명을 Active Directory에 보관할 수 있습니다. Active Directory는 여러 DB 인스턴스 에 대한 자격 증명을 보관하고 관리할 수 있는 중앙 집중식 공간을 제공합니다.

자체 관리형 Active Directory의 자격 증명을 사용하려면 DB 인스턴스 가 조인된 Microsoft Active Directory의 Directory Service에 대한 신뢰 관계를 설정해야 합니다.

 RDS for PostgreSQL 및 RDS for MySQL 은 포리스트 전체 인증 또는 선택적 인증을 통해 단방향 및 양방향 포리스트 신뢰 관계를 지원합니다.

일부 시나리오에서는 외부 신뢰 관계를 통해 Kerberos 인증을 구성할 수 있습니다. 이를 위해서는 자체 관리형 Active Directory에 추가 설정이 필요합니다. 여기에는 [Kerberos 포리스트 검색 순서](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/kfso-not-work-in-external-trust-event-is-17)가 포함되지만, 이에 국한되지는 않습니다.

Microsoft SQL Server 및 PostgreSQL DB 인스턴스는 단방향 및 양방향 포리스트 신뢰 관계를 지원합니다. Oracle DB 인스턴스는 단방향 및 양방향 외부 및 포리스트 신뢰 관계를 지원합니다. 자세한 내용은 *Directory Service 관리 안내서*의 [신뢰 관계를 생성해야 하는 경우](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/setup_trust.html)를 참조하십시오.

특정 DB 엔진의 Kerberos 인증에 대한 자세한 내용은 다음을 참조하십시오.
+  [RDS for SQL Server를 사용하여 AWS 관리형 Active Directory 작업](USER_SQLServerWinAuth.md) 
+  [Amazon RDS for MySQL에 Kerberos 인증 사용](mysql-kerberos.md) 
+  [Amazon RDS for Oracle에 대한 Kerberos 인증 구성](oracle-kerberos.md) 
+  [Amazon RDS for PostgreSQL과 함께 Kerberos 인증 사용](postgresql-kerberos.md) 
+  [Amazon RDS for Db2에 대한 Kerberos 인증 사용](db2-kerberos.md) .

**참고**  
현재 MariaDB DB 인스턴스에 대해서는 Kerberos 인증이 지원되지 않습니다.

# Amazon RDS 및 AWS Secrets Manager를 통한 암호 관리
<a name="rds-secrets-manager"></a>

Amazon RDS는 Secrets Manager와 통합되어 DB 인스턴스와 다중 AZ DB 클러스터의 마스터 사용자 암호를 관리합니다.

**Topics**
+ [

## Secrets Manager와 Amazon RDS 통합에 대한 제한 사항
](#rds-secrets-manager-limitations)
+ [

## AWS Secrets Manager를 통한 마스터 사용자 암호 관리 개요
](#rds-secrets-manager-overview)
+ [

## Secrets Manager를 통한 마스터 사용자 암호 관리의 이점
](#rds-secrets-manager-benefits)
+ [

## Secrets Manager 통합에 필요한 권한
](#rds-secrets-manager-permissions)
+ [

## AWS Secrets Manager 마스터 사용자 암호의 RDS 관리 적용
](#rds-secrets-manager-auth)
+ [

## Secrets Manager를 통해 DB 인스턴스의 마스터 사용자 암호 관리
](#rds-secrets-manager-db-instance)
+ [

## Secrets Manager를 사용하여 RDS for Oracle 테넌트 데이터베이스의 마스터 사용자 암호 관리
](#rds-secrets-manager-tenant)
+ [

## Secrets Manager를 사용하여 다중 AZ DB 클러스터의 마스터 사용자 암호 관리
](#rds-secrets-manager-db-cluster)
+ [

## DB 인스턴스의 마스터 사용자 암호 비밀 교체
](#rds-secrets-manager-rotate-db-instance)
+ [

## 다중 AZ DB 클러스터의 마스터 사용자 암호 비밀 교체
](#rds-secrets-manager-rotate-db-cluster)
+ [

## DB 인스턴스의 비밀에 대한 세부 정보 보기
](#rds-secrets-manager-view-db-instance)
+ [

## 다중 AZ DB 클러스터의 비밀에 대한 세부 정보 보기
](#rds-secrets-manager-view-db-cluster)
+ [

## 테넌트 데이터베이스의 보안 암호에 대한 세부 정보 보기
](#rds-secrets-manager-view-tenant)
+ [

## 리전 및 버전 사용 가능 여부
](#rds-secrets-manager-availability)

## Secrets Manager와 Amazon RDS 통합에 대한 제한 사항
<a name="rds-secrets-manager-limitations"></a>

다음 기능에서는 Secrets Manager를 사용한 마스터 사용자 암호 관리가 지원되지 않습니다.
+ 소스 DB 또는 DB 클러스터가 Secrets Manager로 자격 증명을 관리할 때 읽기 전용 복제본 생성. 이는 RDS for SQL Server를 제외한 모든 DB 엔진에 적용됩니다.
+ Amazon RDS 블루/그린 배포
+ Amazon RDS Custom
+ Oracle Data Guard 전환

## AWS Secrets Manager를 통한 마스터 사용자 암호 관리 개요
<a name="rds-secrets-manager-overview"></a>

AWS Secrets Manager를 사용하면 데이터베이스 암호를 포함한 하드 코딩된 보안 인증 정보를 Secrets Manager에서 프로그래밍 방식으로 비밀을 검색하게 하는 API 호출로 바꿀 수 있습니다. Secrets Manager 사용에 대한 자세한 내용은 [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)를 참조하세요.

Secrets Manager에 데이터베이스 암호를 저장하면 AWS 계정에서 요금을 부과합니다. 요금에 대한 자세한 내용은 [AWS Secrets Manager 요금](https://aws.amazon.com/secrets-manager/pricing)을 참조하십시오.

다음 작업 중 하나를 수행할 때 RDS가 Secrets Manager에서 Amazon RDS DB 인스턴스 또는 다중 AZ DB 클러스터의 마스터 사용자 암호를 관리하도록 지정할 수 있습니다.
+ DB 인스턴스 생성
+ 다중 AZ DB 클러스터 만들기
+ RDS for Oracle CDB에서 테넌트 데이터베이스 만들기
+ DB 인스턴스 수정
+ 다중 AZ DB 클러스터를 수정하는 방법
+ 테넌트 데이터베이스 수정(RDS for Oracle만 해당)
+ Amazon S3에서 DB 인스턴스 복원
+ 스냅샷에서 또는 특정 시점으로 DB 인스턴스 복원(RDS for Oracle만 해당)

RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하면 RDS 가 암호를 생성하여 Secrets Manager에 저장합니다. 암호와 직접 상호 작용하여 마스터 사용자의 보안 인증 정보를 검색할 수 있습니다. 고객 관리 키를 지정하여 암호를 암호화하거나 Secrets Manager에서 제공하는 KMS 키를 사용할 수도 있습니다.

RDS는 비밀 설정을 관리하고 기본적으로 7일마다 비밀을 교체합니다. 교체 일정 같은 일부 설정을 수정할 수 있습니다. Secrets Manager에서 암호를 관리하는 DB 인스턴스를 삭제하면 암호 및 관련 메타데이터도 삭제됩니다.

비밀의 보안 인증 정보를 사용하여 DB 인스턴스 또는 다중 AZ DB 클러스터에 연결하려면 Secrets Manager에서 비밀을 검색하면 됩니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager에서 비밀 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html) 및 [AWS Secrets Manager 비밀에 있는 보안 인증 정보를 사용하여 SQL 데이터베이스에 연결](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)을 참조하세요.

## Secrets Manager를 통한 마스터 사용자 암호 관리의 이점
<a name="rds-secrets-manager-benefits"></a>

Secrets Manager를 사용하여 RDS 마스터 사용자 암호를 관리하면 다음과 같은 이점이 있습니다.
+ RDS가 데이터베이스 보안 인증 정보를 자동으로 생성합니다.
+ RDS가 데이터베이스 보안 인증 정보를 AWS Secrets Manager에 자동으로 저장하고 관리합니다.
+ 애플리케이션을 변경할 필요 없이 RDS가 정기적으로 데이터베이스 보안 인증 정보를 교체합니다.
+ Secrets Manager가 사용자 액세스 및 일반 텍스트 보기로부터 데이터베이스 보안 인증 정보를 보호합니다.
+ Secrets Manager를 사용하면 데이터베이스 연결을 위한 비밀의 데이터베이스 보안 인증 정보를 검색할 수 있습니다.
+ Secrets Manager에서 IAM을 사용하여 비밀의 데이터베이스 보안 인증 정보에 대한 액세스를 세밀하게 제어할 수 있습니다.
+ 필요에 따라 다른 KMS 키를 사용하여 데이터베이스 암호화와 보안 인증 정보 암호화를 분리할 수 있습니다.
+ 데이터베이스 보안 인증 정보를 수동으로 관리하고 교체하지 않아도 됩니다.
+ AWS CloudTrail 및 Amazon CloudWatch를 사용하여 데이터베이스 보안 인증 정보를 쉽게 모니터링할 수 있습니다.

Secrets Manager의 이점에 대한 자세한 내용은 [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)를 참조하세요.

## Secrets Manager 통합에 필요한 권한
<a name="rds-secrets-manager-permissions"></a>

사용자는 Secrets Manager 통합과 관련된 작업을 수행하는 데 필요한 권한이 있어야 합니다. 사용자에게 필요한 지정된 리소스에서 특정 API 작업을 수행할 수 있는 권한을 부여하는 IAM 정책을 생성할 수 있습니다. 그런 다음 해당 권한이 필요한 IAM 권한 세트 또는 역할에 이러한 정책을 연결할 수 있습니다. 자세한 내용은 [Amazon RDS의 자격 증명 및 액세스 관리](UsingWithRDS.IAM.md) 섹션을 참조하세요.

생성, 수정 또는 복원 작업의 경우 Amazon RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하는 사용자는 다음 작업을 수행할 권한이 있어야 합니다.
+ `kms:DescribeKey`
+ `secretsmanager:CreateSecret`
+ `secretsmanager:TagResource`

`MasterUserSecretKmsKeyId`에 대한 고객 관리형 키에 액세스하고 `aws/secretsmanager`를 설명하려면 `kms:DescribeKey` 권한이 필요합니다.

생성, 수정 또는 복원 작업의 경우 Secrets Manager에서 비밀을 암호화하는 고객 관리형 키를 지정하는 사용자는 다음 작업을 수행할 권한이 있어야 합니다.
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:CreateGrant`

수정 작업의 경우 Secrets Manager에서 마스터 사용자 암호를 교체하는 사용자는 다음 작업을 수행할 권한이 있어야 합니다.
+ `secretsmanager:RotateSecret`

## AWS Secrets Manager 마스터 사용자 암호의 RDS 관리 적용
<a name="rds-secrets-manager-auth"></a>

IAM 조건 키를 사용하여 AWS Secrets Manager에서 마스터 사용자 암호의 RDS 관리를 적용할 수 있습니다. 다음 정책은 Secrets Manager에서 RDS 가 마스터 사용자 암호를 관리하지 않는 한 사용자가 DB 인스턴스 또는 DB 클러스터를 생성 또는 복원하거나 테넌트 데이터베이스를 생성 또는 수정하는 것을 허용하지 않습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": ["rds:CreateDBInstance", "rds:CreateDBCluster", "rds:RestoreDBInstanceFromS3", "rds:RestoreDBClusterFromS3",
                       "rds:RestoreDBInstanceFromDBSnapshot", "rds:RestoreDBInstanceToPointInTime", "rds:CreateTenantDatabase",
                       "rds:ModifyTenantDatabase"],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "rds:ManageMasterUserPassword": false
                }
            }
        }
    ]
}
```

------

**참고**  
이 정책은 생성 시 AWS Secrets Manager에서 암호 관리를 적용합니다. 그러나 인스턴스를 수정하여 여전히 Secrets Manager 통합을 비활성화하고 마스터 암호를 수동으로 설정할 수 있습니다.  
이를 방지하려면 정책의 Action 블록에 `rds:ModifyDBInstance`, `rds:ModifyDBCluster`를 포함하세요. 이렇게 하면 사용자가 Secrets Manager 통합이 활성화되지 않은 기존 인스턴스에 추가 수정 사항을 적용할 수 없습니다.

IAM 정책에서 조건 키 사용에 관한 자세한 내용은 [Amazon RDS의 정책 조건 키](security_iam_service-with-iam.md#UsingWithRDS.IAM.Conditions) 및 [정책 예: 조건 키 사용](UsingWithRDS.IAM.Conditions.Examples.md)을 참조하세요.

## Secrets Manager를 통해 DB 인스턴스의 마스터 사용자 암호 관리
<a name="rds-secrets-manager-db-instance"></a>

다음 작업을 수행할 때 Secrets Manager에서 마스터 사용자 암호의 RDS 관리를 구성할 수 있습니다.
+ [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md)
+ [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md)
+ [Amazon RDS for MySQL DB 인스턴스로 백업 복원](MySQL.Procedural.Importing.md)
+ [DB 인스턴스 복원](USER_RestoreFromSnapshot.md)(RDS for Oracle만 해당)
+ [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md)(RDS for Oracle만 해당)

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 이전 작업을 수행할 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-db-instance-console"></a>

지침에 따라 RDS 콘솔을 사용하여 DB 인스턴스를 생성하거나 수정합니다.
+ [DB 인스턴스 생성](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)
+ [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md)
+ [Amazon S3에서 새 MySQL DB 인스턴스로 데이터 가져오기](MySQL.Procedural.Importing.md#MySQL.Procedural.Importing.PerformingImport)

RDS 콘솔을 사용하여 이러한 작업 중 하나를 수행하는 경우 Secrets Manager에서 RDS가 마스터 사용자 암호를 관리하도록 지정할 수 있습니다. DB 인스턴스를 만들거나 복원할 때 **자격 증명 설정**에서 **AWS Secrets Manager에서 마스터 자격 증명 관리**를 선택합니다. DB 인스턴스를 수정할 때 **설정**에서 **AWS Secrets Manager에서 마스터 자격 증명 관리**를 선택합니다.

다음 이미지는 DB 인스턴스를 생성 또는 복원할 때의 **Manage master credentials in AWS Secrets Manager** 설정의 예입니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-credential-settings-db-instance.png)


이 옵션을 선택하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리 선택됨\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-create-db-instance.png)


Secrets Manager가 제공하는 KMS 키 또는 사용자가 생성한 고객 관리 키를 사용하여 비밀을 암호화하도록 선택할 수 있습니다. RDS가 DB 인스턴스의 데이터베이스 자격 증명을 관리한 후에는 보안 암호를 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다. DB 인스턴스를 만들 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 섹션을 참조하세요. DB 인스턴스를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_ModifyInstance.Settings.md) 섹션을 참조하세요.

### AWS CLI
<a name="rds-secrets-manager-db-instance-cli"></a>

Secrets Manager에서 RDS를 사용하여 마스터 사용자 암호를 관리하려면 다음 AWS CLI 명령 중 하나에서 `--manage-master-user-password` 옵션을 지정하세요.
+ [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)
+ [restore-db-instance-from-s3](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)(RDS for Oracle만 해당)
+ [restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)(RDS for Oracle만 해당)

이러한 명령에서 `--manage-master-user-password` 옵션을 지정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. 고객 관리형 키를 지정하려면 `--master-user-secret-kms-key-id` 옵션을 사용하세요. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS가 DB 인스턴스의 데이터베이스 보안 인증 정보를 관리한 후에는 비밀을 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다. DB 인스턴스를 생성할 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md)을 참조하세요. DB 인스턴스를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_ModifyInstance.Settings.md)을 참조하세요.

다음 예에서는 DB 인스턴스를 만들고 RDS 가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정합니다. 비밀은 Secrets Manager에서 제공하는 KMS 키를 사용하여 암호화됩니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mysql \
4.     --engine-version 8.0.39 \
5.     --db-instance-class db.r5b.large \
6.     --allocated-storage 200 \
7.     --master-username testUser \
8.     --manage-master-user-password
```
Windows의 경우:  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mysql ^
4.     --engine-version 8.0.39 ^
5.     --db-instance-class db.r5b.large ^
6.     --allocated-storage 200 ^
7.     --master-username testUser ^
8.     --manage-master-user-password
```

### RDS API
<a name="rds-secrets-manager-db-instance-api"></a>

RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하려면 다음 RDS API 작업 중 하나에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정합니다.
+ [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html)
+ [RestoreDBInstanceFromS3](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [RestoreDBInstanceFromSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromSnapshot.html)(RDS for Oracle만 해당)
+ [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)(RDS for Oracle만 해당)

이러한 명령에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. `MasterUserSecretKmsKeyId` 파라미터를 사용하여 고객 관리형 키를 지정합니다. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS가 DB 인스턴스의 데이터베이스 보안 인증 정보를 관리한 후에는 비밀을 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

## Secrets Manager를 사용하여 RDS for Oracle 테넌트 데이터베이스의 마스터 사용자 암호 관리
<a name="rds-secrets-manager-tenant"></a>

다음 작업을 수행할 때 Secrets Manager에서 마스터 사용자 암호의 RDS 관리를 구성할 수 있습니다.
+ [CDB 인스턴스에 RDS for Oracle 테넌트 데이터베이스 추가](oracle-cdb-configuring.adding.pdb.md)
+ [RDS for Oracle 테넌트 데이터베이스 수정](oracle-cdb-configuring.modifying.pdb.md)

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 앞서 설명한 작업을 수행할 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-tenant-console"></a>

지침에 따라 RDS 콘솔을 사용하여 RDS for Oracle 테넌트 데이터베이스를 만들거나 수정합니다.
+ [CDB 인스턴스에 RDS for Oracle 테넌트 데이터베이스 추가](oracle-cdb-configuring.adding.pdb.md)
+ [RDS for Oracle 테넌트 데이터베이스 수정](oracle-cdb-configuring.modifying.pdb.md)

RDS 콘솔을 사용하여 앞서 설명한 작업 중 하나를 수행하는 경우 Secrets Manager에서 RDS가 마스터 사용자 암호를 관리하도록 지정할 수 있습니다. 테넌트 데이터베이스를 만들 때 **자격 증명 설정**에서 **AWS Secrets Manager에서 마스터 자격 증명 관리**를 선택합니다. 테넌트 데이터베이스를 수정할 때 **설정**에서 **AWS Secrets Manager에서 마스터 자격 증명 관리**를 선택합니다.

다음 이미지는 테넌트 데이터베이스를 만들 때의 **AWS Secrets Manager에서 마스터 자격 증명 관리** 설정을 예로 든 것입니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-credential-settings-db-instance.png)


이 옵션을 선택하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리 선택됨\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-create-db-instance.png)


Secrets Manager가 제공하는 KMS 키 또는 사용자가 생성한 고객 관리 키를 사용하여 비밀을 암호화하도록 선택할 수 있습니다. RDS가 테넌트 데이터베이스의 데이터베이스 자격 증명을 관리한 후에는 보안 암호를 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다. 테넌트 데이터베이스를 만들 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 섹션을 참조하세요. 테넌트 데이터베이스를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_ModifyInstance.Settings.md) 섹션을 참조하세요.

### AWS CLI
<a name="rds-secrets-manager-db-instance-cli"></a>

Secrets Manager에서 RDS를 사용하여 마스터 사용자 암호를 관리하려면 다음 AWS CLI 명령 중 하나에서 `--manage-master-user-password` 옵션을 지정하세요.
+ [create-tenant-database](https://docs.aws.amazon.com/cli/latest/reference/rds/create-tenant-database.html)
+ [modify-tenant-database](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-tenant-database.html)

앞서 설명한 명령에서 `--manage-master-user-password` 옵션을 지정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. 고객 관리형 키를 지정하려면 `--master-user-secret-kms-key-id` 옵션을 사용하세요. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS가 테넌트 데이터베이스의 데이터베이스 자격 증명을 관리한 후에는 보안 암호를 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다. 테넌트 데이터베이스를 만들 때 사용 가능한 설정에 대한 자세한 내용은 [create-tenant-database](https://docs.aws.amazon.com/cli/latest/reference/rds/create-tenant-database.html)를 참조하세요. 테넌트 데이터베이스를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [modify-tenant-database](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-tenant-database.html)를 참조하세요.

다음 예에서는 RDS for Oracle 테넌트 데이터베이스를 만들고 RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정합니다. 비밀은 Secrets Manager에서 제공하는 KMS 키를 사용하여 암호화됩니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds create-tenant-database --region us-east-1 \
2.     --db-instance-identifier my-cdb-inst \
3.     --tenant-db-name mypdb2 \
4.     --master-username mypdb2-admin \
5.     --character-set-name UTF-16 \
6.     --manage-master-user-password
```
Windows의 경우:  

```
1. aws rds create-tenant-database --region us-east-1 ^
2.     --db-instance-identifier my-cdb-inst ^
3.     --tenant-db-name mypdb2 ^
4.     --master-username mypdb2-admin ^
5.     --character-set-name UTF-16 ^
6.     --manage-master-user-password
```

### RDS API
<a name="rds-secrets-manager-db-instance-api"></a>

RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하려면 다음 RDS API 작업 중 하나에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정합니다.
+ [CreateTenantDatabase](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateTenantDatabase.html)
+ [ModifyTenantDatabase](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyTenantDatabase.html)

이러한 명령에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. `MasterUserSecretKmsKeyId` 파라미터를 사용하여 고객 관리형 키를 지정합니다. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS가 테넌트 데이터베이스의 데이터베이스 자격 증명을 관리한 후에는 보안 암호를 암호화하는 데 사용된 KMS 키를 변경할 수 없습니다.

## Secrets Manager를 사용하여 다중 AZ DB 클러스터의 마스터 사용자 암호 관리
<a name="rds-secrets-manager-db-cluster"></a>

다음 작업을 수행할 때 Secrets Manager에서 마스터 사용자 암호의 RDS 관리를 구성할 수 있습니다.
+ [Amazon RDS용 다중 AZ DB 클러스터 생성](create-multi-az-db-cluster.md)
+ [Amazon RDS용 다중 AZ DB 클러스터 수정](modify-multi-az-db-cluster.md)

콘솔, AWS CLI 또는 RDS API를 사용하여 이러한 작업을 수행할 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-db-cluster-console"></a>

다음 지침에 따라 RDS 콘솔을 사용하여 다중 AZ DB 클러스터를 생성하거나 수정합니다.
+ [DB 클러스터 생성](create-multi-az-db-cluster.md#create-multi-az-db-cluster-creating)
+ [Amazon RDS용 다중 AZ DB 클러스터 수정](modify-multi-az-db-cluster.md)

RDS 콘솔을 사용하여 이러한 작업 중 하나를 수행하는 경우 Secrets Manager에서 RDS가 마스터 사용자 암호를 관리하도록 지정할 수 있습니다. DB 클러스터를 생성 할 때 이를 수행하려면 **Credential settings**(보안 인증 정보 설정)에서 **Manage master credentials in AWS Secrets Manager**를 선택합니다. DB 클러스터를 수정할 경우 **Settings**(설정)에서 **Manage master credentials in AWS Secrets Manager**를 선택합니다.

다음 이미지는 DB 클러스터를 생성 할 때의 **Manage master credentials in AWS Secrets Manager** 설정의 예입니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-credential-settings.png)


이 옵션을 선택하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 수명 주기 동안 이를 관리합니다.

![\[AWS Secrets Manager에서 마스터 보안 인증 정보 관리 선택됨\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-create.png)


Secrets Manager가 제공하는 KMS 키 또는 사용자가 생성한 고객 관리 키를 사용하여 비밀을 암호화하도록 선택할 수 있습니다. RDS가 DB 클러스터의 데이터베이스 보안 인증 정보를 관리한 후에는 비밀을 암호화하는 데 사용되는 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다.

다중 AZ DB 클러스터를 생성할 때 사용 가능한 설정에 대한 자세한 내용은 [다중 AZ DB 클러스터를 생성하기 위한 설정](create-multi-az-db-cluster.md#create-multi-az-db-cluster-settings)을 참조하세요. 다중 AZ DB 클러스터를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [다중 AZ DB 클러스터를 수정하기 위한 설정](modify-multi-az-db-cluster.md#modify-multi-az-db-cluster-settings)을 참조하세요.

### AWS CLI
<a name="rds-secrets-manager-db-cluster-cli"></a>

RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하려면 다음 명령 중 하나에서 `--manage-master-user-password` 옵션을 지정하세요.
+ [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html)
+ [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html)

이러한 명령에서 `--manage-master-user-password` 옵션을 지정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. 고객 관리형 키를 지정하려면 `--master-user-secret-kms-key-id` 옵션을 사용하세요. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS DB 클러스터의 데이터베이스 보안 인증 정보를 관리한 후에는 비밀을 암호화하는 데 사용되는 KMS 키를 변경할 수 없습니다.

요구 사항에 맞는 다른 설정을 선택할 수 있습니다.

다중 AZ DB 클러스터를 생성할 때 사용 가능한 설정에 대한 자세한 내용은 [다중 AZ DB 클러스터를 생성하기 위한 설정](create-multi-az-db-cluster.md#create-multi-az-db-cluster-settings)을 참조하세요. 다중 AZ DB 클러스터를 수정할 때 사용 가능한 설정에 대한 자세한 내용은 [다중 AZ DB 클러스터를 수정하기 위한 설정](modify-multi-az-db-cluster.md#modify-multi-az-db-cluster-settings)을 참조하세요.

이 예에서는 다중 AZ DB 클러스터를 생성하고 RDS가 Secrets Manager에서 암호를 관리하도록 지정합니다. 비밀은 Secrets Manager에서 제공하는 KMS 키를 사용하여 암호화됩니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
 1. aws rds create-db-cluster \
 2.    --db-cluster-identifier mysql-multi-az-db-cluster \
 3.    --engine mysql \
 4.    --engine-version 8.0.39  \
 5.    --backup-retention-period 1  \
 6.    --allocated-storage 4000 \
 7.    --storage-type io1 \
 8.    --iops 10000 \
 9.    --db-cluster-instance-class db.r6gd.xlarge \
10.    --master-username testUser \
11.    --manage-master-user-password
```
Windows의 경우:  

```
 1. aws rds create-db-cluster ^
 2.    --db-cluster-identifier mysql-multi-az-db-cluster ^
 3.    --engine mysql ^
 4.    --engine-version 8.0.39 ^
 5.    --backup-retention-period 1 ^
 6.    --allocated-storage 4000 ^
 7.    --storage-type io1 ^
 8.    --iops 10000 ^
 9.    --db-cluster-instance-class db.r6gd.xlarge ^
10.    --master-username testUser ^
11.    --manage-master-user-password
```

### RDS API
<a name="rds-secrets-manager-db-cluster-api"></a>

RDS가 Secrets Manager에서 마스터 사용자 암호를 관리하도록 지정하려면 다음 작업 중 하나에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정하세요.
+ [CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html)
+ [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html)

이러한 명령에서 `ManageMasterUserPassword` 파라미터를 `true`로 설정하면 RDS가 Secrets Manager에서 마스터 사용자 암호를 생성하고 해당 수명 주기 동안 이를 관리합니다.

비밀을 암호화하려면 고객 관리형 키를 지정하거나 Secrets Manager에서 제공하는 기본 KMS 키를 사용하면 됩니다. `MasterUserSecretKmsKeyId` 파라미터를 사용하여 고객 관리형 키를 지정합니다. AWS KMS 키 식별자는 KMS 키의 키 ARN, 키 ID, 별칭 ARN 또는 별칭 이름입니다. 다른 AWS 계정에서 KMS 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정하세요. RDS DB 클러스터의 데이터베이스 보안 인증 정보를 관리한 후에는 비밀을 암호화하는 데 사용되는 KMS 키를 변경할 수 없습니다.

## DB 인스턴스의 마스터 사용자 암호 비밀 교체
<a name="rds-secrets-manager-rotate-db-instance"></a>

RDS가 마스터 사용자 암호 비밀을 교체하면 Secrets Manager는 기존 비밀의 새 비밀 버전을 생성합니다. 새 버전의 비밀에는 새 마스터 사용자 암호가 포함됩니다. Amazon RDS는 새 비밀 버전의 암호와 일치하도록 DB 인스턴스의 마스터 사용자 암호를 변경합니다.

예약된 교체를 기다리지 않고 비밀을 즉시 교체할 수 있습니다. Secrets Manager에서 마스터 사용자 암호 비밀을 교체하려면 DB 인스턴스를 수정합니다. DB 인스턴스 수정에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 마스터 사용자 암호 비밀을 즉시 교체할 수 있습니다. 새 암호는 항상 28자이며 하나 이상의 대문자와 소문자, 하나의 숫자, 하나의 구두점을 포함합니다.

### 콘솔
<a name="rds-secrets-manager-rotate-db-instance-console"></a>

RDS 콘솔을 사용하여 마스터 사용자 암호 비밀을 교체하려면 DB 인스턴스를 수정하고 **Settings**(설정)에서 **Rotate secret immediately**(비밀 즉시 교체)를 선택합니다.

![\[마스터 사용자 암호 비밀 즉시 교체\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-rotate.png)


RDS 콘솔을 사용하여 DB 인스턴스를 수정하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md)의 지침에 따르세요. 확인 페이지에서 **Apply immediately**(즉시 적용)를 선택해야 합니다.

### AWS CLI
<a name="rds-secrets-manager-rotate-db-instance-cli"></a>

AWS CLI를 사용하여 마스터 사용자 암호 비밀을 교체하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 명령을 사용하고 `--rotate-master-user-password` 옵션을 지정합니다. 마스터 암호를 교체할 때 `--apply-immediately` 옵션을 지정해야 합니다.

이 예에서는 마스터 사용자 암호 비밀을 교체합니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --rotate-master-user-password \
4.     --apply-immediately
```
Windows의 경우:  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --rotate-master-user-password ^
4.     --apply-immediately
```

### RDS API
<a name="rds-secrets-manager-rotate-db-instance-api"></a>

[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 작업을 사용하고 `RotateMasterUserPassword` 파라미터를 `true`로 설정하여 마스터 사용자 암호 비밀을 교체할 수 있습니다. 마스터 암호를 교체할 때 `ApplyImmediately` 파라미터를 `true`로 설정해야 합니다.

## 다중 AZ DB 클러스터의 마스터 사용자 암호 비밀 교체
<a name="rds-secrets-manager-rotate-db-cluster"></a>

RDS가 마스터 사용자 암호 비밀을 교체하면 Secrets Manager는 기존 비밀의 새 비밀 버전을 생성합니다. 새 버전의 비밀에는 새 마스터 사용자 암호가 포함됩니다. Amazon RDS는 새 비밀 버전의 암호와 일치하도록 다중 AZ DB 클러스터의 마스터 사용자 암호를 변경합니다.

예약된 교체를 기다리지 않고 비밀을 즉시 교체할 수 있습니다. Secrets Manager에서 마스터 사용자 암호 비밀을 교체하려면 다중 AZ DB 클러스터를 수정하세요. 다중 AZ DB 클러스터 수정에 대한 자세한 내용은 [Amazon RDS용 다중 AZ DB 클러스터 수정](modify-multi-az-db-cluster.md)을 참조하세요. 

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 마스터 사용자 암호 비밀을 즉시 교체할 수 있습니다. 새 암호는 항상 28자이며 하나 이상의 대문자와 소문자, 하나의 숫자, 하나의 구두점을 포함합니다.

### 콘솔
<a name="rds-secrets-manager-rotate-db-instance-console"></a>

RDS 콘솔을 사용하여 마스터 사용자 암호 비밀을 교체하려면 다중 AZ DB 클러스터를 수정하고 **Settings**(설정)에서 **Rotate secret immediately**(암호 즉시 교체)를 선택합니다.

![\[마스터 사용자 암호 비밀 즉시 교체\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-rotate-taz-cluster.png)


RDS 콘솔을 사용하여 다중 AZ DB 클러스터를 수정하려면 [Amazon RDS용 다중 AZ DB 클러스터 수정](modify-multi-az-db-cluster.md) 의 지침에 따르세요. 확인 페이지에서 **Apply immediately**(즉시 적용)를 선택해야 합니다.

### AWS CLI
<a name="rds-secrets-manager-rotate-db-instance-cli"></a>

AWS CLI를 사용하여 마스터 사용자 암호를 교체하려면 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 명령을 사용하고 `--rotate-master-user-password` 옵션을 지정합니다. 마스터 암호를 교체할 때 `--apply-immediately` 옵션을 지정해야 합니다.

이 예에서는 마스터 사용자 암호 비밀을 교체합니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds modify-db-cluster \
2.     --db-cluster-identifier mydbcluster \
3.     --rotate-master-user-password \
4.     --apply-immediately
```
Windows의 경우:  

```
1. aws rds modify-db-cluster ^
2.     --db-cluster-identifier mydbcluster ^
3.     --rotate-master-user-password ^
4.     --apply-immediately
```

### RDS API
<a name="rds-secrets-manager-rotate-db-instance-api"></a>

[ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) 작업을 사용하고 `RotateMasterUserPassword` 파라미터를 `true`로 설정하여 마스터 사용자 암호 비밀을 교체할 수 있습니다. 마스터 암호를 교체할 때 `ApplyImmediately` 파라미터를 `true`로 설정해야 합니다.

## DB 인스턴스의 비밀에 대한 세부 정보 보기
<a name="rds-secrets-manager-view-db-instance"></a>

콘솔([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) 또는 AWS CLI([get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager 명령)을 사용하여 비밀을 검색할 수 있습니다.

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 Secrets Manager에서 RDS가 관리하는 비밀의 Amazon 리소스 이름(ARN)을 찾을 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-view-db-instance-console"></a>

**Secrets Manager에서 RDS가 관리하는 비밀에 대한 세부 정보 보기**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. 세부 정보를 표시할 DB 인스턴스의 이름을 선택합니다.

1. **Configuration**(구성) 탭을 선택합니다.

   **마스터 보안 인증 정보 ARN**에서 비밀 ARN을 볼 수 있습니다.  
![\[Secrets Manager에서 RDS 가 관리하는 비밀에 대한 세부 정보 보기\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-view-instance.png)

   **Manage in Secrets Manager**(Secrets Manager에서 관리) 링크를 클릭하면 Secrets Manager 콘솔에서 비밀을 보고 관리할 수 있습니다.

### AWS CLI
<a name="rds-secrets-manager-view-db-instance-cli"></a>

[describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) RDS CLI 명령을 사용하면 Secrets Manager에서 RDS가 관리하는 비밀에 대한 다음 정보를 찾을 수 있습니다.
+ `SecretArn` - 비밀의 ARN
+ `SecretStatus` - 비밀의 상태

  가능한 상태 값에는 다음이 포함됩니다.
  + `creating` - 비밀이 생성 중입니다.
  + `active` - 비밀의 일반적 사용 및 교체가 가능합니다.
  + `rotating` - 비밀이 교체 중입니다.
  + `impaired` - 비밀을 데이터베이스 보안 인증 정보에 액세스하는 데 사용할 수 있지만 교체할 수는 없습니다. 예를 들어 권한이 변경되어 RDS가 더 이상 비밀 또는 비밀의 KMS 키에 액세스할 수 없는 경우 비밀이 이 상태가 될 수 있습니다.

    암호가 이 상태인 경우 상태를 초래한 조건을 수정할 수 있습니다. 상태를 초래한 조건을 수정하면 다음 교체까지 상태가 `impaired`로 유지됩니다. 또는 DB 인스턴스를 수정하여 데이터베이스 보안 인증 정보 자동 관리를 해제한 다음 DB 인스턴스를 다시 수정하여 데이터베이스 보안 인증 정보 자동 관리를 켤 수 있습니다. DB 인스턴스를 수정하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 명령에서 `--manage-master-user-password` 옵션을 사용하세요.
+ `KmsKeyId` - 비밀을 암호화하는 데 사용된 KMS 키의 ARN입니다.

특정 DB 인스턴스의 출력을 표시하려면 `--db-instance-identifier` 옵션을 지정합니다. 이 예제는 DB 인스턴스가 사용하는 암호의 출력을 보여 줍니다.

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier mydbinstance
```
다음은 비밀의 샘플 출력입니다.  

```
"MasterUserSecret": {
                "SecretArn": "arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!db-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx",
                "SecretStatus": "active",
                "KmsKeyId": "arn:aws:kms:eu-west-1:123456789012:key/0987dcba-09fe-87dc-65ba-ab0987654321"
            }
```

보안 ARN이 있으면 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager CLI 명령을 사용하여 비밀에 대한 세부 정보를 볼 수 있습니다.

이 예제는 이전 샘플 출력의 비밀에 대한 세부 정보를 보여 줍니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
aws secretsmanager get-secret-value \
    --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!db-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'
```
Windows의 경우:  

```
aws secretsmanager get-secret-value ^
    --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!db-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'
```

### RDS API
<a name="rds-secrets-manager-rotate-db-instance-api"></a>

[DescribedBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 작업을 사용하고 `DBInstanceIdentifier` 파라미터를 DB 인스턴스 식별자로 설정하면 Secrets Manager에서 RDS가 관리하는 비밀의 ARN, 상태, KMS 키를 볼 수 있습니다. 비밀에 대한 세부 정보가 출력에 포함됩니다.

비밀 ARN이 있으면 [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) Secrets Manager 작업을 사용하여 비밀에 대한 세부 정보를 볼 수 있습니다.

## 다중 AZ DB 클러스터의 비밀에 대한 세부 정보 보기
<a name="rds-secrets-manager-view-db-cluster"></a>

콘솔([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) 또는 AWS CLI([get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager 명령)을 사용하여 비밀을 검색할 수 있습니다.

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 Secrets Manager에서 RDS 가 관리하는 비밀의 Amazon 리소스 이름(ARN)을 찾을 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-view-db-cluster-console"></a>

**Secrets Manager에서 RDS 가 관리하는 비밀에 대한 세부 정보 보기**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. 그런 다음 세부 정보를 표시할 다중 AZ DB 클러스터 이름을 선택합니다.

1. **Configuration**(구성) 탭을 선택합니다.

   **마스터 보안 인증 정보 ARN**에서 비밀 ARN을 볼 수 있습니다.  
![\[Secrets Manager에서 RDS 가 관리하는 비밀에 대한 세부 정보 보기\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/secrets-manager-integration-view-taz-cluster.png)

   **Manage in Secrets Manager**(Secrets Manager에서 관리) 링크를 클릭하면 Secrets Manager 콘솔에서 비밀을 보고 관리할 수 있습니다.

### AWS CLI
<a name="rds-secrets-manager-view-db-instance-cli"></a>

RDS AWS CLI [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 명령을 사용하면 Secrets Manager에서 RDS 가 관리하는 비밀에 대한 다음 정보를 찾을 수 있습니다.
+ `SecretArn` - 비밀의 ARN
+ `SecretStatus` - 비밀의 상태

  가능한 상태 값에는 다음이 포함됩니다.
  + `creating` - 비밀이 생성 중입니다.
  + `active` - 비밀의 일반적 사용 및 교체가 가능합니다.
  + `rotating` - 비밀이 교체 중입니다.
  + `impaired` - 비밀을 데이터베이스 보안 인증 정보에 액세스하는 데 사용할 수 있지만 교체할 수는 없습니다. 예를 들어 권한이 변경되어 RDS가 더 이상 비밀 또는 비밀의 KMS 키에 액세스할 수 없는 경우 비밀이 이 상태가 될 수 있습니다.

    암호가 이 상태인 경우 상태를 초래한 조건을 수정할 수 있습니다. 상태를 초래한 조건을 수정하면 다음 교체까지 상태가 `impaired`로 유지됩니다. 또는 DB 클러스터를 수정하여 데이터베이스 보안 인증 정보 자동 관리를 해제한 다음 DB 클러스터를 다시 수정하여 데이터베이스 보안 인증 정보 자동 관리를 켤 수 있습니다. DB 클러스터를 수정하려면 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 명령에서 `--manage-master-user-password` 옵션을 사용하세요.
+ `KmsKeyId` - 비밀을 암호화하는 데 사용된 KMS 키의 ARN입니다.

특정 DB 클러스터의 출력을 표시하려면 `--db-cluster-identifier` 옵션을 지정합니다. 이 예제는 DB 클러스터가 사용하는 비밀의 출력을 보여 줍니다.

**Example**  

```
1. aws rds describe-db-clusters --db-cluster-identifier mydbcluster
```
다음 샘플은 비밀 출력을 보여 줍니다.  

```
"MasterUserSecret": {
                "SecretArn": "arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx",
                "SecretStatus": "active",
                "KmsKeyId": "arn:aws:kms:eu-west-1:123456789012:key/0987dcba-09fe-87dc-65ba-ab0987654321"
            }
```

보안 ARN이 있으면 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager CLI 명령을 사용하여 비밀에 대한 세부 정보를 볼 수 있습니다.

이 예제는 이전 샘플 출력의 비밀에 대한 세부 정보를 보여 줍니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
aws secretsmanager get-secret-value \
    --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'
```
Windows의 경우:  

```
aws secretsmanager get-secret-value ^
    --secret-id 'arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx'
```

### RDS API
<a name="rds-secrets-manager-rotate-db-instance-api"></a>

[DescribedBClusters](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html) RDS 작업을 사용하고 `DBClusterIdentifier` 파라미터를 DB 클러스터 식별자로 설정하여 Secrets Manager에서 RDS가 관리하는 비밀의 ARN, 상태, KMS 키를 볼 수 있습니다. 비밀에 대한 세부 정보가 출력에 포함됩니다.

비밀 ARN이 있으면 [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) Secrets Manager 작업을 사용하여 비밀에 대한 세부 정보를 볼 수 있습니다.

## 테넌트 데이터베이스의 보안 암호에 대한 세부 정보 보기
<a name="rds-secrets-manager-view-tenant"></a>

콘솔([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)) 또는 AWS CLI([get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager 명령)을 사용하여 비밀을 검색할 수 있습니다.

Amazon RDS 콘솔, AWS CLI 또는 Amazon RDS API를 사용하여 AWS Secrets Manager에서 Amazon RDS가 관리하는 보안 암호의 Amazon 리소스 이름(ARN)을 찾을 수 있습니다.

### 콘솔
<a name="rds-secrets-manager-view-tenant-console"></a>

**테넌트 데이터베이스의 AWS Secrets Manager에서 Amazon RDS가 관리하는 보안 암호에 대한 세부 정보를 보려면 다음을 수행하세요.**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. 세부 정보를 표시할 테넌트 데이터베이스를 포함하는 DB 인스턴스의 이름을 선택합니다.

1. **구성** 탭을 선택합니다.

   **테넌트 데이터베이스** 섹션에서 테넌트 데이터베이스를 찾고 **마스터 자격 증명 ARN**을 확인합니다.

   **Manage in Secrets Manager**(Secrets Manager에서 관리) 링크를 클릭하면 Secrets Manager 콘솔에서 비밀을 보고 관리할 수 있습니다.

### AWS CLI
<a name="rds-secrets-manager-view-tenant-cli"></a>

[describe-tenant-databases](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-tenant-databases.html) Amazon RDS AWS CLI 명령을 사용하여 테넌트 데이터베이스의에서 AWS Secrets Manager의 Amazon RDS가 관리하는 보안 암호에 대한 다음 정보를 찾을 수 있습니다.
+ `SecretArn` - 비밀의 ARN
+ `SecretStatus` - 비밀의 상태

  가능한 상태 값에는 다음이 포함됩니다.
  + `creating` - 비밀이 생성 중입니다.
  + `active` - 비밀의 일반적 사용 및 교체가 가능합니다.
  + `rotating` - 비밀이 교체 중입니다.
  + `impaired` - 비밀을 데이터베이스 보안 인증 정보에 액세스하는 데 사용할 수 있지만 교체할 수는 없습니다. 예를 들어 권한이 변경되어 Amazon RDS가 더 이상 보안 암호 또는 보안 암호의 KMS 키에 액세스할 수 없는 경우 보안 비밀이 이 상태가 될 수 있습니다.

    암호가 이 상태인 경우 상태를 초래한 조건을 수정할 수 있습니다. 상태를 초래한 조건을 수정하면 다음 교체까지 상태가 `impaired`로 유지됩니다. 또는 테넌트 데이터베이스를 수정하여 데이터베이스 자격 증명 자동 관리를 끈 다음 테넌트 데이터베이스를 다시 수정하여 데이터베이스 보안 인증 정보 자동 관리를 켤 수 있습니다. 테넌트 데이터베이스를 수정하려면 [modify-tenant-database](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-tenant-database.html) 명령의 `--manage-master-user-password` 옵션을 사용합니다.
+ `KmsKeyId` - 비밀을 암호화하는 데 사용된 KMS 키의 ARN입니다.

특정 DB 인스턴스에 있는 테넌트 데이터베이스의 출력을 표시하려면 `--db-instance-identifier` 옵션을 지정합니다. 특정 테넌트 데이터베이스에 대한 출력을 표시하는 `--tenant-db-name` 옵션을 지정할 수도 있습니다. 이 예제는 테넌트 데이터베이스가 사용하는 보안 비밀의 출력을 보여 줍니다.

**Example**  

```
1. aws rds describe-tenant-databases \
2.     --db-instance-identifier database-3 \
3.     --query "TenantDatabases[0].MasterUserSecret"
```
다음은 비밀의 샘플 출력입니다.  

```
{
    "SecretArn": "arn:aws:secretsmanager:us-east-2:123456789012:secret:rds!db-ABC123",
    "SecretStatus": "active",
    "KmsKeyId": "arn:aws:kms:us-east-2:123456789012:key/aa11bb22-####-####-####-fedcba123456"
}
```

보안 비밀 ARN이 있으면 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) Secrets Manager AWS CLI 명령을 사용하여 보안 비밀에 대한 세부 정보를 볼 수 있습니다.

이 예제는 이전 샘플 출력의 비밀에 대한 세부 정보를 보여 줍니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
aws secretsmanager get-secret-value \
    --secret-id 'arn:aws:secretsmanager:us-east-2:123456789012:secret:rds!db-ABC123'
```
Windows의 경우:  

```
aws secretsmanager get-secret-value ^
    --secret-id 'arn:aws:secretsmanager:us-east-2:123456789012:secret:rds!db-ABC123'
```

### Amazon RDS API
<a name="rds-secrets-manager-view-tenant-api"></a>

[DescribeTenantDatabases](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeTenantDatabases.html) 작업을 사용하고 `DBInstanceIdentifier` 파라미터를 DB 인스턴스 식별자로 설정하면 AWS Secrets Manager에서 Amazon RDS가 관리하는 보안 비밀의 ARN, 상태와 KMS 키를 볼 수 있습니다. `TenantDBName` 파라미터를 특정 테넌트 데이터베이스 이름으로 설정할 수도 있습니다. 비밀에 대한 세부 정보가 출력에 포함됩니다.

비밀 ARN이 있으면 [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) Secrets Manager 작업을 사용하여 비밀에 대한 세부 정보를 볼 수 있습니다.

## 리전 및 버전 사용 가능 여부
<a name="rds-secrets-manager-availability"></a>

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. 버전 및 Secrets Manager와 Amazon RDS 통합의 리전 가용성에 대한 자세한 내용은 [Secrets Manager와 Amazon RDS 통합을 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.SecretsManager.md)을 참조하세요.

# Amazon RDS의 데이터 보호
<a name="DataDurability"></a>

AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 Amazon Relational Database Service에서 데이터 보호에 적용됩니다. 이 모델에서 설명하는 것처럼 AWS은 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 인프라에서 호스팅되는 콘텐츠를 관리해야 합니다. 사용하는 AWS 서비스의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 대한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터를 보호하려면 AWS 계정 자격 증명을 보호하고 AWS IAM Identity Center 또는 AWS Identity and Access Management(IAM)를 통해 개별 사용자 계정을 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용하세요.
+ SSL/TLS를 사용하여 AWS 리소스와 통신하세요. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ AWS CloudTrail로 API 및 사용자 활동 로깅을 설정하세요. AWS 활동 캡처에 CloudTrail 추적을 사용하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [CloudTrail 추적 작업](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)을 참조하세요.
+ AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 컨트롤과 함께 사용하세요.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용하세요.
+ 명령줄 인터페이스 또는 API를 통해 AWS에 액세스할 때 FIPS 140-3 검증된 암호화 모듈이 필요한 경우, FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [Federal Information Processing Standard(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 Amazon RDS 또는 기타 AWS 서비스에서 콘솔, API, AWS CLI 또는 AWS SDK를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버로 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명 정보를 URL에 포함해서는 안 됩니다.

**Topics**
+ [

# 암호화를 사용하여 데이터 보호
](Encryption.md)
+ [

# 인터네트워크 트래픽 개인 정보
](inter-network-traffic-privacy.md)

# 암호화를 사용하여 데이터 보호
<a name="Encryption"></a>

데이터베이스 리소스에 대한 암호화를 활성화할 수 있습니다. 또한 DB 인스턴스클러스터에 대한 연결도 암호화가 가능합니다.

**Topics**
+ [

# Amazon RDS 리소스 암호화
](Overview.Encryption.md)
+ [

# AWS KMS key 관리
](Overview.Encryption.Keys.md)
+ [

# SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화
](UsingWithRDS.SSL.md)
+ [

# SSL/TLS 인증서 교체
](UsingWithRDS.SSL-certificate-rotation.md)

# Amazon RDS 리소스 암호화
<a name="Overview.Encryption"></a>

Amazon RDS는 Amazon RDS DB 인스턴스를 암호화할 수 있습니다. 유휴 시 암호화된 데이터에는 DB 인스턴스에 대한 기본 스토리지, 해당 로그, 자동 백업, 읽기 전용 복제본 및 스냅샷이 포함됩니다.

Amazon RDS 암호화 DB 인스턴스는 업계 표준인 AES-256 암호화 알고리즘을 사용하여 Amazon RDS DB 인스턴스를 호스팅하는 서버의 데이터를 암호화합니다.

데이터가 암호화된 이후 Amazon RDS 가 성능에 미치는 영향을 최소화한 상태에서 데이터 액세스 및 암호 해독의 인증을 투명하게 처리합니다. 암호화를 사용하도록 데이터베이스 클라이언트 애플리케이션을 수정하지 않아도 됩니다.

**참고**  
암호화/비암호화 DB 인스턴스의 경우에는 AWS 리전 간 복제에서도 원본과 읽기 전용 복제본 사이에 전송되는 데이터가 암호화됩니다.

**Topics**
+ [

## Amazon RDS 리소스 암호화 개요
](#Overview.Encryption.Overview)
+ [

## DB 인스턴스 암호화
](#Overview.Encryption.Enabling)
+ [

## DB 인스턴스에 대해 암호화가 켜져 있는지 확인
](#Overview.Encryption.Determining)
+ [

## Amazon RDS 암호화 가용성
](#Overview.Encryption.Availability)
+ [

## 전송 중 암호화
](#Overview.Encryption.InTransit)
+ [

## Amazon RDS 암호화된 DB 인스턴스의 제한
](#Overview.Encryption.Limitations)

## Amazon RDS 리소스 암호화 개요
<a name="Overview.Encryption.Overview"></a>

Amazon RDS 암호화된 DB 인스턴스는 기본 스토리지에 대한 무단 액세스로부터 데이터의 보안을 유지해 추가 계층의 데이터 보호를 제공합니다. 클라우드에 배포된 애플리케이션의 데이터 보호를 강화하고 저장된 데이터 암호화를 위한 규정 준수 요구 사항을 만족하기 위해 Amazon RDS 암호화를 사용할 수 있습니다. Amazon RDS 암호화된 DB 인스턴스의 경우 모든 로그, 백업 및 스냅샷이 암호화됩니다. 암호화의 가용성 및 제한에 대한 자세한 내용은 [Amazon RDS 암호화 가용성](#Overview.Encryption.Availability) 및 [Amazon RDS 암호화된 DB 인스턴스의 제한](#Overview.Encryption.Limitations) 섹션을 참조하세요.

Amazon RDS는 AWS Key Management Service 키를 사용하여 이러한 리소스를 암호화합니다. AWS KMS는 안전하고 가용성이 높은 하드웨어와 소프트웨어를 결합하여 클라우드에 맞게 규모가 조정된 키 관리 시스템을 제공합니다. AWS 관리형 키을(를) 사용하거나 고객 관리형 키를 생성할 수 있습니다.

암호화된 DB 인스턴스를 생성할 때 Amazon RDS에 사용할 고객 관리형 키 또는 AWS 관리형 키을(를) 선택하여 DB 인스턴스를 암호화할 수 있습니다. 고객 관리형 키의 키 식별자를 지정하지 않으면 Amazon RDS는 새 DB 인스턴스에 AWS 관리형 키을(를) 사용합니다. Amazon RDS는 AWS 계정에 대해 Amazon RDS용 AWS 관리형 키을(를) 생성합니다. AWS 계정에 각 AWS 리전의 Amazon RDS에 대한 다른 AWS 관리형 키이(가) 있습니다.

Amazon RDS 리소스 암호화 및 복호화에 사용되는 고객 관리형 키를 관리하려면 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)를 사용합니다.

AWS KMS를 사용하면 고객 관리형 키를 생성하고 이 키의 사용을 제어하는 정책을 정의할 수 있습니다. AWS KMS는 CloudTrail을 지원하므로 KMS 키 사용을 감사하여 고객 관리형 키가 적절하게 사용되고 있는지 확인할 수 있습니다. 고객 관리형 키는 Amazon Aurora를 비롯해 Amazon S3, Amazon EBS, Amazon Redshift 등 지원되는 AWS 서비스에서 사용할 수 있습니다. AWS KMS와 통합되는 서비스 목록은 [AWS 서비스 통합](https://aws.amazon.com/kms/features/#AWS_Service_Integration)을 참조하세요. KMS 키 사용에 대한 몇 가지 고려 사항: 
+ 암호화된 DB 인스턴스를 생성한 후에는 해당 DB 인스턴스에서 사용된 KMS 키를 변경할 수 없습니다. 따라서 암호화된 DB 인스턴스를 생성하기 전에 KMS 키 요구 사항을 결정해야 합니다.

  DB 인스턴스의 암호화 키를 변경해야 하는 경우 인스턴스의 수동 스냅샷을 생성하고 스냅샷을 복사하는 동안 암호화를 활성화합니다. 자세한 내용은 [re:Post 지식 센터 문서](https://repost.aws/knowledge-center/update-encryption-key-rds)를 참조하세요.
+ 암호화된 스냅샷을 복사하는 경우 소스 스냅샷을 암호화하는 데 사용된 것과 다른 KMS 키를 사용하여 대상 스냅샷을 암호화할 수 있습니다.
+ 동일한 AWS 리전에 있는 경우, Amazon RDS 암호화된 인스턴스의 읽기 전용 복제본은 기본 DB 인스턴스와 동일한 KMS 키를 사용하여 암호화되어야 합니다.
+ 기본 DB 인스턴스와 읽기 전용 복제본이 서로 다른 AWS 리전에 있을 경우 해당 AWS 리전의 KMS 키를 사용하여 읽기 전용 복제본을 암호화합니다.
+ 스냅샷을 공유한 AWS 계정의 AWS 관리형 키을(를) 사용하여 암호화된 스냅샷은 공유할 수 없습니다.
+ 또한 Amazon RDS에서는 TDE(Transparent Data Encryption)를 사용하여 Oracle 또는 SQL Server DB 인스턴스 암호화를 지원합니다. TDE를 RDS 저장 데이터 암호화와 함께 사용하면 데이터베이스의 성능에 약간의 영향을 미칠 수 있지만, TDE를 RDS 저장 데이터 암호화와 함께 사용할 수 있습니다. 암호화 방법별로 다른 키를 관리해야 합니다. TDE에 대한 자세한 내용은 [Oracle Transparent Data Encryption](Appendix.Oracle.Options.AdvSecurity.md) 또는 [SQL Server에서 TDE(투명한 데이터 암호화) 지원](Appendix.SQLServer.Options.TDE.md) 단원을 참조하십시오.

**중요**  
Amazon RDS는 KMS 키를 비활성화하면 DB 인스턴스의 KMS 키에 대한 액세스 권한을 잃습니다. KMS 키에 대한 액세스 권한을 잃으면 백업이 활성화된 인스턴스에서 감지 후 2시간이 지났을 때 암호화된 DB 인스턴스가 `inaccessible-encryption-credentials-recoverable` 상태가 됩니다. DB 인스턴스는 7일 동안 이 상태로 유지되며, 이 기간 동안 인스턴스가 중지됩니다. 이 기간 동안 DB 인스턴스에 대한 API 호출은 성공하지 못할 수 있습니다. DB 인스턴스를 복구하려면 KMS 키를 활성화하고 이 DB 인스턴스를 다시 시작하세요. AWS Management Console, AWS CLI 또는 RDS API에서 KMS 키를 활성화합니다. AWS CLI 명령 [start-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/start-db-instance.html) 또는 AWS Management Console을 사용하여 DB 인스턴스를 다시 시작합니다.  
`inaccessible-encryption-credentials-recoverable` 상태는 중지할 수 있는 DB 인스턴스에만 적용됩니다. 읽기 전용 복제본 및 읽기 전용 복제본이 있는 인스턴스와 같이 중지할 수 없는 인스턴스에는 이 복구 가능 상태를 적용할 수 없습니다. 자세한 내용은 [DB 인스턴스 중지 제한 사항](USER_StopInstance.md#USER_StopInstance.Limitations) 섹션을 참조하세요.  
7일 이내에 DB 인스턴스가 복구되지 않으면 터미널 `inaccessible-encryption-credentials` 상태가 됩니다. 이 상태에서는 DB 인스턴스를 더 이상 사용할 수 없으며 백업에서 DB 인스턴스를 복원할 수만 있습니다. 데이터베이스에서 암호화된 데이터가 손실되지 않도록 보호하려면 암호화된 DB 인스턴스에 대해 항상 백업을 활성화하는 것이 좋습니다.  
DB 인스턴스를 생성하는 동안 Amazon RDS는 호출 주체가 KMS 키에 대한 액세스 권한이 있는지 확인하고 DB 인스턴스의 전체 수명 기간 동안 사용하는 KMS 키에서 부여를 생성합니다. MS 키에 대한 호출 주체의 액세스 권한을 취소해도 실행 중인 데이터베이스에는 영향을 미치지 않습니다. 스냅샷을 다른 계정으로 복사하는 등 계정 간 시나리오에서 KMS 키를 사용하는 경우, KMS 키를 다른 계정과 공유해야 합니다. 다른 KMS 키를 지정하지 않고 스냅샷에서 DB 인스턴스를 만들면 새 인스턴스는 소스 계정의 KMS 키를 사용합니다. DB 인스턴스를 생성한 후 키에 대한 액세스 권한을 취소해도 인스턴스에는 영향을 미치지 않습니다. 그러나 키를 비활성화하면 해당 키로 암호화된 모든 DB 인스턴스에 영향을 미칩니다. 이를 방지하려면 스냅샷 복사 작업 중에 다른 키를 지정하세요.  
백업이 비활성화된 DB 인스턴스는 인스턴스 수정 또는 복구 중에 볼륨이 호스트에서 분리될 때까지 계속 사용할 수 있습니다. RDS는 해당하는 경우 인스턴스를 `inaccessible-encryption-credentials-recoverable` 상태 또는 `inaccessible-encryption-credentials` 상태로 이동합니다.

KMS 키에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 섹션 및 [AWS KMS key 관리](Overview.Encryption.Keys.md) 섹션을 참조하세요.

## DB 인스턴스 암호화
<a name="Overview.Encryption.Enabling"></a>

새로운 DB 인스턴스를 암호화하려면 Amazon RDS 콘솔에서 **암호화 활성화(Enable encryption)**를 선택합니다. DB 인스턴스 생성에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 단원을 참조하십시오.

[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 명령을 사용하여 암호화된 DB 인스턴스를 생성할 경우 `--storage-encrypted` 파라미터를 설정합니다. [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) API 작업을 사용할 경우 `StorageEncrypted` 파라미터를 true로 설정하십시오.



AWS CLI `create-db-instance` 명령을 사용하여 고객 관리형 키로 암호화된 DB 인스턴스를 생성하는 경우 `--kms-key-id` 파라미터를 KMS 키의 키 식별자로 설정합니다. Amazon RDS API `CreateDBInstance` 작업을 사용하는 경우 `KmsKeyId` 파라미터를 KMS 키의 키 식별자로 설정합니다. 다른 AWS 계정에서 고객 관리형 키를 사용하려면 키 ARN 또는 별칭 ARN을 지정합니다.

## DB 인스턴스에 대해 암호화가 켜져 있는지 확인
<a name="Overview.Encryption.Determining"></a>

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 인스턴스에 대해 저장 데이터 암호화가 켜져 있는지 확인합니다.

### 콘솔
<a name="Overview.Encryption.Determining.CON"></a>

**DB 인스턴스에 대해 저장 데이터 암호화가 켜져 있는지 확인하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. 세부 정보를 보기 위해 확인하려는 DB 인스턴스의 이름을 선택합니다.

1. **구성(Configuration)** 탭을 선택하고 **스토리지(Storage)**에서 **암호화(Encryption)** 값을 확인합니다.

   그러면 **활성화(Enabled)** 또는 **비활성화(Not enabled)** 중 하나가 표시됩니다.  
![\[DB 인스턴스에 대해 저장 데이터 암호화 확인\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/encryption-check-db-instance.png)

### AWS CLI
<a name="Overview.Encryption.Determining.CLI"></a>

AWS CLI를 사용하여 DB 인스턴스에 대해 저장 데이터 암호화가 켜져 있는지 확인하려면 다음 옵션을 사용하여 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령을 호출합니다.
+ `--db-instance-identifier` – DB 인스턴스의 이름입니다.

다음 예에서는 쿼리를 사용하여 `mydb` DB 인스턴스의 저장 데이터 암호화에 대해 `TRUE` 또는 `FALSE` 중 하나를 반환합니다.

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier mydb --query "*[].{StorageEncrypted:StorageEncrypted}" --output text
```

### RDS API
<a name="Overview.Encryption.Determining.API"></a>

Amazon RDS API를 사용하여 DB 인스턴스에 대해 저장 데이터 암호화가 켜져 있는지 확인하려면 다음 파라미터를 사용하여 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)를 호출합니다.
+ `DBInstanceIdentifier` – DB 인스턴스의 이름입니다.

## Amazon RDS 암호화 가용성
<a name="Overview.Encryption.Availability"></a>

Amazon RDS 암호화는 현재 모든 데이터베이스 엔진과 스토리지 유형에 사용할 수 있습니다.

Amazon RDS 암호화는 대부분의 DB 인스턴스 클래스에서 사용 가능합니다. 다음 테이블에는 Amazon RDS 암호화를 *지원하지 않는* DB 인스턴스 클래스가 열거되어 있습니다.


| 인스턴스 유형 | 인스턴스 클래스 | 
| --- | --- | 
| 범용(M1) |  db.m1.small db.m1.medium db.m1.large db.m1.xlarge  | 
| 메모리 최적화(M2) |  db.m2.xlarge db.m2.2xlarge db.m2.4xlarge  | 
| 버스트 가능(T2) |  db.t2.micro  | 

## 전송 중 암호화
<a name="Overview.Encryption.InTransit"></a>

**물리적 계층에서의 암호화**  
AWS 글로벌 네트워크를 통해 AWS 리전으로 이동하는 모든 데이터는 AWS 보안 시설에서 나가기 전에 물리적 계층에서 자동으로 암호화됩니다. AZ 간에 전송되는 모든 트래픽은 암호화됩니다. 이 섹션에 나열된 암호화 계층을 비롯한 추가 암호화 계층은 추가적인 보호 기능을 제공할 수 있습니다.

**Amazon VPC 피어링 및 전송 게이트웨이 교차 리전 피어링에서 제공하는 암호화**  
Amazon VPC 및 Transit Gateway 피어링을 사용하는 모든 리전 간 트래픽은 리전을 종료하면 자동으로 대량 암호화됩니다. AWS 보안 시설에서 나가기 전에 모든 트래픽에 대한 추가 암호화 계층이 물리적 계층에서 자동으로 제공됩니다.

**인스턴스 간 암호화**  
AWS는 모든 유형의 DB 인스턴스 간 보안 프라이빗 연결을 제공합니다. 또한 일부 인스턴스 유형은 기본 Nitro 시스템 하드웨어의 오프로드 기능을 사용하여 인스턴스 간 전송 중 트래픽을 자동으로 암호화합니다. 이 암호화는 256비트 암호화와 함께 관련 데이터로 인증된 암호화(AEAD) 알고리즘을 사용합니다. 네트워크 성능에는 영향을 미치지 않습니다. 인스턴스 간에 이러한 전송 중 트래픽 암호화를 추가로 지원하려면 다음 요구 사항을 충족해야 합니다.  
+ 이러한 인스턴스는 다음 인스턴스 유형을 사용합니다.
  + **범용**: M6i, M6id, M6in, M6idn, M7g
  + **메모리 최적화**: R6i, R6id, R6in, R6idn, R7g, X2idn, X2iedn, X2iezn
+ 인스턴스가 동일한 AWS 리전에 있습니다.
+ 인스턴스가 동일한 VPC 또는 피어링된 VPC에 있으며, 트래픽이 로드 밸런서나 전송 게이트웨이 같은 가상 네트워크 디바이스 또는 서비스를 통과하지 않습니다.

## Amazon RDS 암호화된 DB 인스턴스의 제한
<a name="Overview.Encryption.Limitations"></a>

Amazon RDS 암호화된 DB 인스턴스에는 다음과 같은 제한이 있습니다.
+ Amazon RDS DB 인스턴스의 암호화는 인스턴스를 생성할 때에만 가능하며 DB 인스턴스가 생성된 후에는 불가능합니다.

  다만 암호화되지 않은 스냅샷의 사본을 암호화할 수 있기 때문에 암호화되지 않은 DB 인스턴스에 실질적으로 암호화를 추가할 수 있습니다. 즉, DB 인스턴스의 스냅샷을 만든 다음 해당 스냅샷의 암호화된 사본을 만들 수 있습니다. 그런 다음 암호화된 스냅샷에서 DB 인스턴스를 복구할 수 있고, 원본 DB 인스턴스의 암호화된 사본이 생깁니다. 자세한 내용은 [Amazon RDS용 DB 스냅샷 복사](USER_CopySnapshot.md) 단원을 참조하십시오.
+ 암호화된 DB 인스턴스의 암호화를 비활성화할 수 없습니다.
+ 암호화되지 않은 DB 인스턴스의 암호화된 스냅샷은 생성할 수 없습니다.
+ 암호화된 DB 인스턴스의 스냅샷은 DB 인스턴스와 동일한 KMS 키를 사용하여 암호화해야 합니다.
+ 암호화되지 않은 DB 인스턴스의 암호화된 읽기 전용 복제본이나 암호화된 DB 인스턴스의 암호화되지 않은 읽기 전용 복제본은 보유할 수 없습니다.
+ 암호화된 읽기 전용 복제본이 소스 DB 인스턴스와 동일한 AWS 리전에 있는 경우 해당 인스턴스와 동일한 KMS 키를 사용하여 암호화해야 합니다.
+ 암호화되지 않은 백업 또는 스냅샷을 암호화된 DB 인스턴스로 복원할 수 없습니다.
+ 암호화된 스냅샷을 한 AWS 리전에서 다른 리전으로 복사하려면 대상 AWS 리전에 KMS 키를 지정해야 합니다. 이는 KMS 키가 생성된 AWS 리전에만 해당하기 때문입니다.

  소스 스냅샷은 복사 프로세스 전체에서 암호화를 유지합니다. Amazon RDS는 봉투 암호화를 사용하여 복사 프로세스 중에 데이터를 보호합니다. 봉투 암호화에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 참조하세요.
+ 암호화된 DB 인스턴스의 암호화를 해제할 수 없습니다. 하지만 암호화된 DB 인스턴스에서 데이터를 내보내고 암호화되지 않은 DB 인스턴스로 해당 데이터를 가져올 수 있습니다.

# AWS KMS key 관리
<a name="Overview.Encryption.Keys"></a>

 Amazon RDS 는 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)와 자동으로 통합하여 키 관리를 수행합니다. Amazon RDS 는 봉투 암호화를 사용합니다. 봉투 암호화에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 참조하세요.

두 가지 유형의 AWS KMS 키를 사용하여 DB 인스턴스 를 암호화할 수 있습니다.
+ KMS 키를 완전히 제어하기 위해서는 *고객 관리형 키*를 생성해야 합니다. 고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 참조하세요.
+  *AWS 관리형 키* 은(는) AWS KMS와 통합된 AWS 서비스가 고객의 계정에서 고객 대신 생성, 관리 및 사용하는 KMS 키입니다. 기본적으로 RDS AWS 관리형 키(`aws/rds`)는 암호화에 사용됩니다. RDS AWS 관리형 키는 관리, 교체 또는 삭제할 수 없습니다. AWS 관리형 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)를 참조하십시오.

Amazon RDS 암호화된 DB 인스턴스 에 사용되는 KMS 키를 관리하려면 [AWS KMS 콘솔](https://console.aws.amazon.com/kms), AWS CLI 또는 AWS KMS API에서 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)를 사용합니다. AWS 관리형 또는 고객 관리형 키로 수행한 모든 작업의 감사 로그를 보려면 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)을 사용합니다. 키 교체에 대한 자세한 내용은 [AWS KMS 키 교체](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)를 참조하세요.

## 고객 관리형 키의 사용 권한 부여
<a name="Overview.Encryption.Keys.Authorizing"></a>

RDS 가 암호화 작업에 고객 관리형 키를 사용하는 경우 RDS 리소스를 만들거나 변경하는 사용자를 대신해 작업합니다.

고객 관리형 키를 사용하여 RDS 리소스를 만들려면 고객 관리형 키에서 다음 작업을 직접적으로 호출할 수 있는 권한이 사용자에게 있어야 합니다.
+  `kms:CreateGrant` 
+  `kms:DescribeKey` 

키 정책에서 허용하는 경우 키 정책 또는 IAM 정책에서 이러한 필수 권한을 지정할 수 있습니다.

**중요**  
Amazon RDS와 같은 관리형 서비스에서 AWS KMS 키 정책의 모든 리소스(\$1)에 대해 명시적 거부 문을 사용하는 경우 리소스 소유 계정을 허용하는 조건을 지정해야 합니다. 거부 규칙에 IAM 사용자에 대한 예외가 포함되어 있더라도 이 조건이 없다면 작업이 실패할 수 있습니다.

**작은 정보**  
최소 권한의 원칙을 따르려면 `kms:CreateGrant`에 대한 전체 액세스 권한을 허용하지 마세요. 대신에 [kms:ViaService 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)를 사용하여 AWS 서비스에서 사용자를 대신하여 권한이 부여되는 경우에만 사용자가 KMS 키에 대한 권한을 부여할 수 있도록 허용합니다.

다양한 방법으로 IAM 정책을 더 엄격하게 설정할 수 있습니다. 예를 들어 RDS 에서 생성된 요청에 대해서만 고객 관리형 키를 사용할 수 있도록 허용하고 싶다면 `rds.<region>.amazonaws.com` 값과 함께 [kms:ViaService 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)를 사용합니다. 또한 암호화 작업에 대한 고객 관리형 키 사용 조건으로 [Amazon RDS 암호화 컨텍스트](#Overview.Encryption.Keys.encryptioncontext)의 키 또는 값을 사용할 수도 있습니다.

자세한 내용을 알아보려면 **AWS Key Management Service 개발자 안내서의 [다른 계정의 사용자가 KMS 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html) 및 [AWS KMS의 키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies)을 참조하세요.

## Amazon RDS 암호화 컨텍스트
<a name="Overview.Encryption.Keys.encryptioncontext"></a>

RDS 가 사용자의 KMS 키를 사용하거나 Amazon EBS가 RDS 를 대신하여 KMS 키를 사용하는 경우, 서비스가 [암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)를 지정합니다. 암호화 컨텍스트는 AWS KMS가 데이터 무결성을 보장하기 위해 사용하는 [추가 인증 데이터](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad)(AAD)입니다. 암호화 작업에 대해 암호화 컨텍스트가 지정되면 서비스가 암호화 해제 작업에 대해 동일한 암호화 컨텍스트를 지정해야 합니다. 그렇지 않으면 암호화 해제가 실패합니다. 암호화 컨텍스트는 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 로그에도 기록되어, 해당 KMS 키가 사용된 이유를 이해하는 데 도움을 줍니다. CloudTrail 로그에 CMK 사용을 설명하는 여러 항목이 포함될 수 있지만, 각 로그 항목의 암호화 컨텍스트는 특히 해당 KMS 키를 사용한 이유를 파악하는 데 도움이 될 수 있습니다.

최소한, 다음 JSON 형식 예에서 보듯이 Amazon RDS 는 항상 암호화 컨텍스트에 DB 인스턴스 ID를 사용합니다.

```
{ "aws:rds:db-id": "db-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }
```

이 암호화 컨텍스트는 KMS 키가 사용된 DB 인스턴스 를 식별하는 데 도움이 될 수 있습니다.

KMS 키가 특정 DB 인스턴스 와 특정 Amazon EBS 볼륨에 사용되는 경우, 다음 JSON 형식 예에서 보듯이 암호화 컨텍스트에 DB 인스턴스 ID와 Amazon EBS 볼륨 ID가 모두 사용됩니다.

```
{
  "aws:rds:db-id": "db-BRG7VYS3SVIFQW7234EJQOM5RQ",
  "aws:ebs:id": "vol-ad8c6542"
}
```

# SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화
<a name="UsingWithRDS.SSL"></a>

애플리케이션에서 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용하여 Db2, MariaDB, Microsoft SQL Server, MySQL, Oracle 또는 PostgreSQL을 실행하는 데이터베이스에 대한 연결을 암호화할 수 있습니다.

SSL/TLS 연결은 클라이언트와 DB 인스턴스 또는 클러스터 사이에 전송되는 데이터를 암호화하여 하나의 보안 계층을 제공합니다. 필요에 따라 SSL/TLS 연결에서는 데이터베이스에 설치된 서버 인증서를 검증하여 서버 ID 확인을 수행할 수 있습니다. 서버 ID 확인을 요구하려면 다음의 일반적인 절차를 따르세요.

1. 데이터베이스의 **DB 서버 인증서**에 서명하는 **인증 기관(CA)**을 선택합니다. 인증 기관에 관한 자세한 내용은 [인증 기관](#UsingWithRDS.SSL.RegionCertificateAuthorities) 섹션을 참조하세요.

1. 데이터베이스에 연결할 때 사용할 인증서 번들을 다운로드합니다. 인증서 번들을 다운로드하려면  [AWS 리전별 인증서 번들](#UsingWithRDS.SSL.CertificatesAllRegions)  섹션을 참조하세요.
**참고**  
모든 인증서는 SSL/TLS 연결을 통한 다운로드에만 사용 가능합니다.

1. SSL/TLS 연결을 구현하는 DB 엔진 프로세스를 사용하여 데이터베이스에 연결합니다. 각 DB 엔진에는 SSL/TLS를 구현하기 위한 고유한 프로세스가 있습니다. 데이터베이스에서 SSL/TLS를 구현하는 방법을 알아보려면 DB 엔진에 해당하는 아래 링크로 이동하세요.
   +  [Amazon RDS for Db2 DB 인스턴스에 SSL/TLS 사용](Db2.Concepts.SSL.md) 
   +  [Amazon RDS의 MariaDB DB 인스턴스에 대한 SSL/TLS 지원](MariaDB.Concepts.SSLSupport.md) 
   +  [Microsoft SQL Server DB 인스턴스와 함께 SSL 사용](SQLServer.Concepts.General.SSL.Using.md) 
   +  [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md) 
   +  [RDS for Oracle DB 인스턴스에 SSL 사용](Oracle.Concepts.SSL.md) 
   +  [PostgreSQL DB 인스턴스와 함께 SSL 사용](PostgreSQL.Concepts.General.SSL.md) 

## 인증 기관
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities"></a>

**인증 기관(CA)**은 인증서 체인의 맨 위에 있는 루트 CA를 식별하는 인증서입니다. CA는 각 DB 인스턴스에 설치된 **DB 서버 인증서**에 서명합니다. DB 서버 인증서는 DB 인스턴스를 신뢰할 수 있는 서버로 식별합니다.

![\[인증 기관 개요\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/certificate-authority-overview.png)


Amazon RDS는 데이터베이스의 DB 서버 인증서에 서명할 수 있는 다음 CA를 제공합니다.


****  

| 인증 기관(CA) | 설명 | 일반 이름(CN) | 
| --- | --- | --- | 
|  rds-ca-rsa2048-g1  |  대부분의 AWS 리전에서 RSA 2048 프라이빗 키 알고리즘과 SHA256 서명 알고리즘을 갖춘 인증 기관을 사용합니다. AWS GovCloud (US) Regions에서 이 CA는 RSA 2048 프라이빗 키 알고리즘과 SHA384 서명 알고리즘을 갖춘 인증 기관을 사용합니다. 이 CA는 자동 서버 인증서 교체를 지원합니다.  | Amazon RDS region-identifier Root CA RSA2048 G1 | 
|  rds-ca-rsa4096-g1  |  RSA 4096 프라이빗 키 알고리즘과 SHA384 서명 알고리즘을 갖춘 인증 기관을 사용합니다. 이 CA는 자동 서버 인증서 교체를 지원합니다.  | Amazon RDS region-identifier Root CA RSA4096 G1 | 
|  rds-ca-ecc384-g1  |  ECC 384 프라이빗 키 알고리즘과 SHA384 서명 알고리즘을 갖춘 인증 기관을 사용합니다. 이 CA는 자동 서버 인증서 교체를 지원합니다.  | Amazon RDS region-identifier Root CA ECC384 G1 | 

**참고**  
AWS CLI를 사용하는 경우 [describe-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-certificates.html)를 사용하여 위에 나열된 인증 기관의 유효성을 확인할 수 있습니다.

이러한 CA 인증서는 지역 및 글로벌 인증서 번들에 포함되어 있습니다. rds-ca-rsa2048-g1, rds-ca-rsa4096-g1, rds-ca-ecc384-g1 CA를 데이터베이스에 사용하면 RDS가 데이터베이스에서 DB 서버 인증서를 관리합니다. RDS는 DB 서버 인증서가 만료되기 전에 자동으로 교체합니다.

### 데이터베이스의 CA 설정
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.Selection"></a>

다음 작업을 수행할 때 데이터베이스의 CA를 설정할 수 있습니다.
+ DB 인스턴스 또는 다중 AZ DB 인스턴스 생성 - DB 인스턴스 또는 클러스터를 생성할 때 CA를 설정할 수 있습니다. 지침은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 또는 [Amazon RDS용 다중 AZ DB 클러스터 생성](create-multi-az-db-cluster.md) 섹션을 참조하세요.
+ DB 인스턴스 또는 다중 AZ DB 클러스터 수정 - DB 인스턴스 또는 클러스터를 수정하여 해당 CA를 설정할 수 있습니다. 지침은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 또는 [Amazon RDS용 다중 AZ DB 클러스터 수정](modify-multi-az-db-cluster.md) 섹션을 참조하세요.

**참고**  
 기본 CA는 rds-ca-rsa2048-g1로 설정되어 있습니다. [modify-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-certificates.html) 명령을 사용하여 AWS 계정에 기본 CA를 재정의할 수 있습니다.

사용 가능한 CA는 DB 엔진 및 DB 엔진 버전에 따라 다릅니다. AWS Management Console을 사용하는 경우 다음 이미지에 표시된 것처럼 **인증 기관** 설정을 사용하여 CA를 선택할 수 있습니다.

![\[인증 기관 옵션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/certificate-authority.png)


콘솔에는 DB 엔진 및 DB 엔진 버전에 사용할 수 있는 CA만 표시됩니다. AWS CLI를 사용하는 경우 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 또는 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 명령을 사용하여 DB 인스턴스의 CA를 설정할 수 있습니다. [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html) 또는 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 명령을 사용하여 다중 AZ DB 클러스터의 CA를 설정할 수 있습니다.

AWS CLI를 사용하는 경우 [describe-certificate](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-certificates.html) 명령을 사용하여 계정에 사용할 수 있는 CA를 확인할 수 있습니다. 이 명령은 출력의 `ValidTill`에 각 CA의 만료 날짜도 표시합니다. [describe-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 명령을 사용하여 특정 DB 엔진 및 DB 엔진 버전에 사용할 수 있는 CA를 찾을 수 있습니다.

다음 예제는 기본 RDS for PostgreSQL DB 엔진 버전에 사용할 수 있는 CA를 보여 줍니다.

```
aws rds describe-db-engine-versions --default-only --engine postgres
```

다음과 같은 출력이 표시됩니다. 사용 가능한 CA는 `SupportedCACertificateIdentifiers`에 나열되어 있습니다. 출력은 `SupportsCertificateRotationWithoutRestart`에서 DB 엔진 버전이 다시 시작하지 않고 인증서를 교체하는 기능을 지원하는지 여부도 표시합니다.

```
{
    "DBEngineVersions": [
        {
            "Engine": "postgres",
            "MajorEngineVersion": "13",
            "EngineVersion": "13.4",
            "DBParameterGroupFamily": "postgres13",
            "DBEngineDescription": "PostgreSQL",
            "DBEngineVersionDescription": "PostgreSQL 13.4-R1",
            "ValidUpgradeTarget": [],
            "SupportsLogExportsToCloudwatchLogs": false,
            "SupportsReadReplica": true,
            "SupportedFeatureNames": [
                "Lambda"
            ],
            "Status": "available",
            "SupportsParallelQuery": false,
            "SupportsGlobalDatabases": false,
            "SupportsBabelfish": false,
            "SupportsCertificateRotationWithoutRestart": true,
            "SupportedCACertificateIdentifiers": [
                "rds-ca-rsa2048-g1",
                "rds-ca-ecc384-g1",
                "rds-ca-rsa4096-g1"
            ]
        }
    ]
}
```

### DB 서버 인증서 유효 기간
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.DBServerCert"></a>

DB 서버 인증서의 유효 기간은 DB 엔진 및 DB 엔진 버전에 따라 다릅니다. DB 엔진 버전에서 재시작 없이 인증서를 교체하는 기능을 지원하는 경우 DB 서버 인증서의 유효 기간은 1년입니다. 그렇지 않으면 유효 기간은 3년입니다.

DB 서버 인증서 교체에 대한 자세한 내용은 [자동 서버 인증서 교체](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-server-cert-rotation) 섹션을 참조하세요.

### DB 인스턴스의 CA 보기
<a name="UsingWithRDS.SSL.RegionCertificateAuthorities.Viewing"></a>

콘솔의 **연결 및 보안** 탭에서 다음 이미지와 같이 데이터베이스의 CA에 대한 세부 정보를 볼 수 있습니다.

![\[인증 기관 세부 정보\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/certificate-authority-details.png)


AWS CLI를 사용 중인 경우 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령을 사용하여 DB 인스턴스의 CA에 대한 세부 정보를 확인할 수 있습니다. [describe-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 명령을 사용하여 다중 AZ DB 클러스터의 CA에 대한 세부 정보를 볼 수 있습니다.

## Amazon RDS 용 인증서 번들 다운로드
<a name="UsingWithRDS.SSL.CertificatesDownload"></a>

SSL 또는 TLS로 데이터베이스에 연결하는 경우 데이터베이스 인스턴스에 Amazon RDS의 신뢰 인증서가 필요합니다. 다음 표에서 적절한 링크를 선택하여 데이터베이스를 호스팅하는 AWS 리전에 해당하는 번들을 다운로드하세요.

### AWS 리전별 인증서 번들
<a name="UsingWithRDS.SSL.CertificatesAllRegions"></a>

모든 AWS 리전 리전과 GovCloud(US) 리전의 인증서 번들에는 다음과 같은 루트 CA 인증서가 포함되어 있습니다.
+  `rds-ca-rsa2048-g1` 
+  `rds-ca-rsa4096-g1` 
+  `rds-ca-ecc384-g1` 

다음 리전에서는 `rds-ca-rsa4096-g1` 및 `rds-ca-ecc384-g1` 인증서를 사용할 수 없습니다.
+ 아시아 태평양(뭄바이)
+ 아시아 태평양(멜버른)
+ 캐나다 서부(캘거리)
+ 유럽(취리히)
+ 유럽(스페인)
+ 이스라엘(텔아비브)

애플리케이션 트러스트 스토어에는 루트 CA 인증서만 등록하면 됩니다. RDS가 DB 서버 인증서를 자동으로 교체할 때 연결 문제가 발생할 수 있으므로 중간 CA 인증서를 트러스트 스토어에 등록하지 마세요.

**참고**  
Amazon RDS Proxy 에서는 AWS Certificate Manager(ACM)의 인증서를 사용합니다. RDS 프록시를 사용하는 경우 Amazon RDS 인증서를 다운로드하거나 RDS 프록시 연결을 사용하는 애플리케이션을 업데이트할 필요가 없습니다. 자세한 내용은 섹션을 참조하세요[RDS Proxy에서 TLS/SSL 사용](rds-proxy.howitworks.md#rds-proxy-security.tls)

AWS 리전에 대한 인증서 번들을 다운로드하려면 다음 표에서 해당 데이터베이스를 호스팅하는 AWS 리전에 대한 링크를 선택하세요.


|  **AWS 리전**  |  **인증서 번들(PEM)**  |  **인증서 번들(PKCS7)**  | 
| --- | --- | --- | 
| 모든 상업용 AWS 리전 |  [global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem)  |  [global-bundle.p7b](https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b)  | 
| 미국 동부(버지니아 북부) |  [us-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-east-1/us-east-1-bundle.pem)  |  [us-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-east-1/us-east-1-bundle.p7b)  | 
| 미국 동부(오하이오) |  [us-east-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-east-2/us-east-2-bundle.pem)  |  [us-east-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-east-2/us-east-2-bundle.p7b)  | 
| 미국 서부(캘리포니아 북부) |  [us-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-west-1/us-west-1-bundle.pem)  |  [us-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-west-1/us-west-1-bundle.p7b)  | 
| 미국 서부(오리건) |  [us-west-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/us-west-2/us-west-2-bundle.pem)  |  [us-west-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/us-west-2/us-west-2-bundle.p7b)  | 
| Africa (Cape Town) |  [af-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/af-south-1/af-south-1-bundle.pem)  |  [af-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/af-south-1/af-south-1-bundle.p7b)  | 
| Asia Pacific (Hong Kong) |  [ap-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-east-1/ap-east-1-bundle.pem)  |  [ap-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-east-1/ap-east-1-bundle.p7b)  | 
| 아시아 태평양(하이데라바드) |  [ap-south-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-south-2/ap-south-2-bundle.pem)  |  [ap-south-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-south-2/ap-south-2-bundle.p7b)  | 
| 아시아 태평양(자카르타) |  [ap-southeast-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-3/ap-southeast-3-bundle.pem)  |  [ap-southeast-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-3/ap-southeast-3-bundle.p7b)  | 
| 아시아 태평양(말레이시아) |  [ap-southeast-5-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-5/ap-southeast-5-bundle.pem)  |  [ap-southeast-5-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-5/ap-southeast-5-bundle.p7b)  | 
| 아시아 태평양(멜버른) |  [ap-southeast-4-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-4/ap-southeast-4-bundle.pem)  |  [ap-southeast-4-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-4/ap-southeast-4-bundle.p7b)  | 
| 아시아 태평양(뭄바이) |  [ap-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-south-1/ap-south-1-bundle.pem)  |  [ap-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-south-1/ap-south-1-bundle.p7b)  | 
| Asia Pacific (Osaka) |  [ap-northeast-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-3/ap-northeast-3-bundle.pem)  |  [ap-northeast-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-3/ap-northeast-3-bundle.p7b)  | 
| 아시아 태평양(태국) |  [ap-southeast-7-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-7/ap-southeast-7-bundle.pem)  |  [ap-southeast-7-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-7/ap-southeast-7-bundle.p7b)  | 
| 아시아 태평양(도쿄) |  [ap-northeast-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.pem)  |  [ap-northeast-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.p7b)  | 
| Asia Pacific (Seoul) |  [ap-northeast-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-northeast-2/ap-northeast-2-bundle.pem)  |  [ap-northeast-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-northeast-2/ap-northeast-2-bundle.p7b)  | 
| 아시아 태평양(싱가포르) |  [ap-southeast-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-1/ap-southeast-1-bundle.pem)  |  [ap-southeast-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-1/ap-southeast-1-bundle.p7b)  | 
| 아시아 태평양(시드니) |  [ap-southeast-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/ap-southeast-2/ap-southeast-2-bundle.pem)  |  [ap-southeast-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ap-southeast-2/ap-southeast-2-bundle.p7b)  | 
| Canada (Central) |  [ca-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ca-central-1/ca-central-1-bundle.pem)  |  [ca-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ca-central-1/ca-central-1-bundle.p7b)  | 
| 캐나다 서부(캘거리) |  [ca-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/ca-west-1/ca-west-1-bundle.pem)  |  [ca-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/ca-west-1/ca-west-1-bundle.p7b)  | 
| 유럽(프랑크푸르트) |  [eu-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-central-1/eu-central-1-bundle.pem)  |  [eu-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-central-1/eu-central-1-bundle.p7b)  | 
| 유럽(아일랜드) |  [eu-west-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-1/eu-west-1-bundle.pem)  |  [eu-west-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-1/eu-west-1-bundle.p7b)  | 
| Europe (London) |  [eu-west-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-2/eu-west-2-bundle.pem)  |  [eu-west-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-2/eu-west-2-bundle.p7b)  | 
| Europe (Milan) |  [eu-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-south-1/eu-south-1-bundle.pem)  |  [eu-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-south-1/eu-south-1-bundle.p7b)  | 
| Europe (Paris) |  [eu-west-3-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-west-3/eu-west-3-bundle.pem)  |  [eu-west-3-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-west-3/eu-west-3-bundle.p7b)  | 
| 유럽(스페인) |  [eu-south-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-south-2/eu-south-2-bundle.pem)  |  [eu-south-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-south-2/eu-south-2-bundle.p7b)  | 
| 유럽(스톡홀름) |  [eu-north-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-north-1/eu-north-1-bundle.pem)  |  [eu-north-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-north-1/eu-north-1-bundle.p7b)  | 
| 유럽(취리히) |  [eu-central-2-bundle.pem](https://truststore.pki.rds.amazonaws.com/eu-central-2/eu-central-2-bundle.pem)  |  [eu-central-2-bundle.p7b](https://truststore.pki.rds.amazonaws.com/eu-central-2/eu-central-2-bundle.p7b)  | 
| 이스라엘(텔아비브) |  [il-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/il-central-1/il-central-1-bundle.pem)  |  [il-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/il-central-1/il-central-1-bundle.p7b)  | 
| 멕시코(중부) |  [mx-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/mx-central-1/mx-central-1-bundle.pem)  |  [mx-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/mx-central-1/mx-central-1-bundle.p7b)  | 
| Middle East (Bahrain) |  [me-south-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/me-south-1/me-south-1-bundle.pem)  |  [me-south-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/me-south-1/me-south-1-bundle.p7b)  | 
| 중동(UAE) |  [me-central-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/me-central-1/me-central-1-bundle.pem)  |  [me-central-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/me-central-1/me-central-1-bundle.p7b)  | 
| 남아메리카(상파울루) |  [sa-east-1-bundle.pem](https://truststore.pki.rds.amazonaws.com/sa-east-1/sa-east-1-bundle.pem)  |  [sa-east-1-bundle.p7b](https://truststore.pki.rds.amazonaws.com/sa-east-1/sa-east-1-bundle.p7b)  | 
| 모든 AWS GovCloud (US) Region |  [global-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/global/global-bundle.pem)  |  [global-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/global/global-bundle.p7b)  | 
| AWS GovCloud(미국 동부) |  [us-gov-east-1-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-east-1/us-gov-east-1-bundle.pem)  |  [us-gov-east-1-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-east-1/us-gov-east-1-bundle.p7b)  | 
| AWS GovCloud(미국 서부) |  [us-gov-west-1-bundle.pem](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-west-1/us-gov-west-1-bundle.pem)  |  [us-gov-west-1-bundle.p7b](https://truststore.pki.us-gov-west-1.rds.amazonaws.com/us-gov-west-1/us-gov-west-1-bundle.p7b)  | 

### CA 인증서의 내용 보기
<a name="UsingWithRDS.SSL.CertificatesDownload.viewing"></a>

CA 인증서 번들의 내용을 확인하려면 다음 명령을 사용합니다.

```
keytool -printcert -v -file global-bundle.pem
```

# SSL/TLS 인증서 교체
<a name="UsingWithRDS.SSL-certificate-rotation"></a>

Amazon RDS 인증 기관 인증서 rds-ca-2019는 2024년 8월에 만료됩니다. RDS DB 인스턴스 또는 다중 AZ DB 클러스터에 연결하기 위해 인증서 확인과 함께 보안 소켓 계층(SSL) 또는 Transport Layer Security(TLS)를 사용하거나 사용할 계획이라면 새 CA 인증서인 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1 또는 rds-ca-ecc384-g1 중 하나를 사용하는 것을 고려하세요. 현재 인증서 확인과 함께 SSL/TLS를 사용하지 않는 경우에도 CA 인증서가 만료되었을 수 있으며, 인증서 확인과 함께 SSL/TLS를 사용하여 RDS 데이터베이스에 연결하려는 경우 새 CA 인증서로 업데이트해야 합니다.

Amazon RDS는 AWS 보안 모범 사례로 새 CA 인증서를 제공합니다. 새 인증서 및 지원되는 AWS 리전에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.

데이터베이스의 CA 인증서를 업데이트하려면 다음 방법을 사용하세요.
+  [DB 인스턴스또는 클러스터를 수정하여 CA 인증서 업데이트](#UsingWithRDS.SSL-certificate-rotation-updating) 
+  [유지 관리를 적용하여 CA 인증서 업데이트](#UsingWithRDS.SSL-certificate-rotation-maintenance-update) 

DB 인스턴스 또는 다중 AZ DB 클러스터에서 새로운 CA 인증서를 사용하도록 업데이트하기 전에 RDS 데이터베이스에 연결하는 클라이언트 또는 애플리케이션을 업데이트해야 합니다.

## 인증서 교체 고려 사항
<a name="UsingWithRDS.SSL-certificate-rotation-considerations"></a>

인증서를 교체하기 전에 다음 상황을 고려하세요.
+ Amazon RDS Proxy 에서는 AWS Certificate Manager(ACM)의 인증서를 사용합니다. RDS 프록시를 사용하는 경우 SSL/TLS 인증서를 교체할 때 RDS 프록시 연결을 사용하는 애플리케이션을 업데이트할 필요가 없습니다. 자세한 내용은 섹션을 참조하세요[RDS Proxy에서 TLS/SSL 사용](rds-proxy.howitworks.md#rds-proxy-security.tls)
+ 2020년 7월 28일 이전에 생성되었거나 rds-ca-2019 인증서로 업데이트된 DB 인스턴스 또는 다중 AZ DB 클러스터가 있는 Go 버전 1.15 애플리케이션을 사용하는 경우 인증서를 다시 업데이트해야 합니다. 엔진에 따라 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1, rds-ca-ecc384-g1 로 인증서를 업데이트하세요.

  새 CA 인증서 식별자를 사용하여 DB 인스턴스의 경우 `modify-db-instance` 명령 또는 다중 AZ DB 클러스터의 경우 `modify-db-cluster` 명령을 사용합니다. `describe-db-engine-versions` 명령을 사용하여 특정 DB 엔진 및 DB 엔진 버전에 사용할 수 있는 CA를 찾을 수 있습니다.

  2020년 7월 28일 이후에 데이터베이스를 생성하거나 인증서를 업데이트한 경우에는 아무 조치도 필요하지 않습니다. 자세한 내용은 [Go GitHub 문제 \$139568](https://github.com/golang/go/issues/39568)를 참조하세요.

## DB 인스턴스또는 클러스터를 수정하여 CA 인증서 업데이트
<a name="UsingWithRDS.SSL-certificate-rotation-updating"></a>

다음 예제에서는 *rds-ca-2019*에서 *rds-ca-rsa2048-g1*로 CA 인증서를 업데이트합니다. 다른 인증서를 선택할 수 있습니다. 자세한 내용은 [인증 기관](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities) 섹션을 참조하세요.

애플리케이션 트러스트 스토어를 업데이트하여 CA 인증서 업데이트와 관련된 가동 중단 시간을 줄이세요. CA 인증서 교체와 관련된 다시 시작에 대한 자세한 내용은 [자동 서버 인증서 교체](#UsingWithRDS.SSL-certificate-rotation-server-cert-rotation) 섹션을 참조하세요.

**DB 인스턴스또는 클러스터를 수정하여 CA 인증서를 업데이트하는 방법**

1. [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md)에 설명된 대로 새 SSL/TLS 인증서를 다운로드합니다.

1. 새 SSL/TLS 인증서를 사용하도록 애플리케이션을 업데이트합니다.

   새 SSL/TLS 인증서를 위해 애플리케이션을 업데이트하는 방법은 애플리케이션에 따라 다릅니다. 애플리케이션 개발자와 함께 애플리케이션의 SSL/TLS 인증서를 업데이트하십시오.

   SSL/TLS 연결을 확인하고 각 DB 엔진의 애플리케이션을 업데이트하는 방법에 대한 자세한 내용은 다음 주제를 참조하십시오.
   +  [새 SSL/TLS 인증서를 사용해 MariaDB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-mariadb.md) 
   +  [새 SSL/TLS 인증서를 사용해 Microsoft SQL Server DB 인스턴스에 연결할 애플리케이션을 업데이트](ssl-certificate-rotation-sqlserver.md) 
   +  [새 SSL/TLS 인증서를 사용해 MySQL DB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-mysql.md) 
   +  [새 SSL/TLS 인증서를 사용해 Oracle DB에 연결할 애플리케이션을 업데이트](ssl-certificate-rotation-oracle.md) 
   +  [새 SSL/TLS 인증서를 사용해 PostgreSQL DB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-postgresql.md) 

   Linux 운영 체제의 트러스트 스토어를 업데이트하는 샘플 스크립트는 [트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트](#UsingWithRDS.SSL-certificate-rotation-sample-script) 섹션을 참조하세요.
**참고**  
인증서 번들에는 이전 및 신규 CA의 인증서가 들어 있으므로 애플리케이션을 안전하게 업그레이드하고 전환 기간에 연결성을 유지할 수 있습니다. AWS Database Migration Service를 사용하여 데이터베이스를 DB 인스턴스 또는 클러스터 로 마이그레이션하는 경우, 연결이 끊기지 않고 마이그레이션이 진행되도록 인증서 번들을 사용하는 것이 좋습니다.

1. DB 인스턴스 또는 다중 AZ DB 클러스터를 수정하여 CA를 **rds-ca-2019**에서 **ca-rsa2048-g1**로 변경합니다. CA 인증서를 업데이트하기 위해 데이터베이스를 다시 시작해야 하는지 확인하려면 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 명령을 사용하여 `SupportsCertificateRotationWithoutRestart` 플래그를 확인합니다.
**중요**  
인증서 만료 후 연결 문제가 발생하는 경우 콘솔에서 **즉시 적용**을 지정하거나 `--apply-immediately`를 통해 AWS CLI 옵션을 지정하여 즉시 적용 옵션을 사용합니다. 기본적으로 이 작업은 다음 유지 관리 기간 중에 실행되도록 예약되어 있습니다.  
RDS for Oracle DB 인스턴스의 경우 연결 오류를 방지하려면 Oracle DB를 다시 시작하는 것이 좋습니다.  
AlwaysOn 또는 미러링 옵션이 활성화된 RDS for SQL Server 다중 AZ 인스턴스의 경우 인증서 교체 후 인스턴스를 재부팅하면 장애 조치가 수행될 수 있습니다.  
기본 RDS CA와 다른 인스턴스 CA에 재정의를 설정하려면 [modify-certificates](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-certificates.html) CLI 명령을 사용합니다.

AWS Management Console 또는 AWS CLI를 사용하여 DB 인스턴스** 또는 다중 AZ DB 클러스터**의 CA 인증서를 rds-ca-2019에서 **rds-ca-rsa2048-g1**로 변경할 수 있습니다.

------
#### [ Console ]

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택한 다음 수정하려는 DB 인스턴스 또는 다중 AZ DB 클러스터를 선택합니다.

1. **수정**을 선택합니다.  
![\[DB 인스턴스 또는 다중 AZ DB 클러스터 수정\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-modify.png)

1. **연결** 섹션에서 **rds-ca-rsa2048-g1**을 선택합니다.  
![\[CA 인증서 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-ca-rsa2048-g1.png)

1. [**Continue**]를 수정 사항을 요약한 내용을 확인합니다.

1. 변경 사항을 즉시 적용하려면 **즉시 적용**을 선택합니다.

1. 확인 페이지에서 변경 내용을 검토합니다. 내용이 정확할 경우 **DB 인스턴스 수정** 또는 **클러스터 수정**을 선택하여 변경 사항을 저장합니다.
**중요**  
이 작업을 예약하는 경우 클라이언트 측 트러스트 스토어를 미리 업데이트했는지 확인하십시오.

   또는 **뒤로**를 선택하여 변경 내용을 편집하거나 **취소**를 선택하여 변경 내용을 취소합니다.

------
#### [ AWS CLI ]

AWS CLI를 사용하여 DB 인스턴스 또는 다중 AZ DB 클러스터의 CA를 **rds-ca-2019**에서 **rds-ca-rsa2048-g1**로 변경하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 또는 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 명령을 직접 호출합니다. DB 인스턴스 또는 클러스터 식별자 및 `--ca-certificate-identifier` 옵션을 지정합니다.

`--apply-immediately` 파라미터를 사용하여 업데이트를 즉시 적용합니다. 기본적으로 이 작업은 다음 유지 관리 기간 중에 실행되도록 예약되어 있습니다.

**중요**  
이 작업을 예약하는 경우 클라이언트 측 트러스트 스토어를 미리 업데이트했는지 확인하십시오.

**Example**  
 **DB 인스턴스**   
다음 예시에서는 CA 인증서를 `rds-ca-rsa2048-g1`로 설정하여 `mydbinstance`를 수정합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
Windows의 경우:  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
인스턴스 재부팅이 필요한 경우 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령을 사용하여 `--no-certificate-rotation-restart` 옵션을 지정할 수 있습니다.

**Example**  
 **다중 AZ DB 클러스터**   
다음 예시에서는 CA 인증서를 `rds-ca-rsa2048-g1`로 설정하여 `mydbcluster`를 수정합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-cluster \
    --db-cluster-identifier mydbcluster \
    --ca-certificate-identifier rds-ca-rsa2048-g1
```
Windows의 경우:  

```
aws rds modify-db-cluster ^
    --db-cluster-identifier mydbcluster ^
    --ca-certificate-identifier rds-ca-rsa2048-g1
```

------

## 유지 관리를 적용하여 CA 인증서 업데이트
<a name="UsingWithRDS.SSL-certificate-rotation-maintenance-update"></a>

유지 관리를 적용하여 CA 인증서를 업데이트하려면 다음 단계를 수행합니다.

------
#### [ Console ]

**유지 관리를 적용하여 CA 인증서를 업데이트하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **인증서 업데이트**를 선택합니다.  
![\[인증서 교체 탐색 창 옵션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-certupdate.png)

   **인증서 업데이트가 필요한 데이터베이스** 페이지가 표시됩니다.  
![\[데이터베이스의 CA 인증서 업데이트\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-update-multiple.png)
**참고**  
이 페이지에는 현재 AWS 리전의 DB 인스턴스 및 클러스터만 표시됩니다. 둘 이상의 AWS 리전에 데이터베이스가 있는 경우 각 AWS 리전에서 이 페이지를 확인하여 이전 SSL/TLS 인증서가 있는 모든 DB 인스턴스를 확인합니다.

1. 업데이트할 DB 인스턴스 또는 다중 AZ DB 클러스터를 선택합니다.

   **일정**을 선택하여 다음 유지 관리 기간에 따른 인증서 교체를 예약할 수 있습니다. **지금 적용**을 선택하여 즉시 교체를 적용합니다.
**중요**  
인증서 만료 후 연결 문제가 발생하면 **지금 적용** 옵션을 사용합니다.

1. 

   1. **일정**을 선택하면 CA 인증서 교체를 확인하라는 메시지가 표시됩니다. 이 메시지에는 예약된 업데이트 기간도 표시됩니다.  
![\[인증서 교체 확인\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-confirm-schedule.png)

   1. **지금 적용**을 선택하면 CA 인증서 교체를 확인하라는 메시지가 표시됩니다.  
![\[인증서 교체 확인\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/ssl-rotate-cert-confirm-now.png)
**중요**  
데이터베이스에서 CA 인증서 교체를 예약하기 전에 SSL/TLS 및 서버 인증서를 사용하여 연결하는 모든 클라이언트 애플리케이션을 업데이트합니다. 이러한 업데이트는 DB 엔진에만 적용됩니다. 이러한 클라이언트 애플리케이션을 업데이트한 후 CA 인증서 교체를 확인할 수 있습니다.

   계속하려면 확인란을 선택한 다음 **확인**선택합니다.

1. 업데이트할 각 DB 인스턴스 및 클러스터에 대해 3단계와 4단계를 반복합니다.

------

## 자동 서버 인증서 교체
<a name="UsingWithRDS.SSL-certificate-rotation-server-cert-rotation"></a>

루트 CA에서 자동 서버 인증서 교체를 지원하는 경우 RDS는 DB 서버 인증서의 교체를 자동으로 처리합니다. RDS는 자동 교체에 동일한 루트 CA를 사용하므로 사용자가 새 CA 번들을 다운로드할 필요가 없습니다. [인증 기관](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities) 섹션을 참조하세요.

DB 서버 인증서의 교체 및 유효 기간은 다음의 DB 엔진에 따라 다릅니다.
+ DB 엔진이 재시작 없는 교체를 지원하는 경우 RDS는 사용자가 별도의 조치를 취하지 않아도 DB 서버 인증서를 자동으로 교체합니다. RDS는 사용자가 선호하는 유지 관리 기간 내에 DB 서버 인증서의 유효 기간이 반쯤 남은 시점에서 DB 서버 인증서 교체를 시도합니다. 새 DB 서버 인증서는 12개월 동안 유효합니다.
+ DB 엔진이 재시작 없이 교체를 지원하지 않는 경우, Amazon RDS는 Describe-pending-maintenance-actions API를 통해 인증서의 수명 주기 또는 만료 최소 3개월 전에 `server-certificate-rotation` 보류 중인 유지 관리 작업을 표시합니다. apply-pending-maintenance-action API를 사용하여 교체를 적용할 수 있습니다. 새 DB 서버 인증서는 36개월 동안 유효합니다.

[ describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 명령을 사용하고 `SupportsCertificateRotationWithoutRestart` 플래그를 검사하여 DB 엔진 버전이 재시작 없이 인증서를 교체하는 기능을 지원하는지 파악합니다. 자세한 내용은 섹션을 참조하세요[데이터베이스의 CA 설정](UsingWithRDS.SSL.md#UsingWithRDS.SSL.RegionCertificateAuthorities.Selection) 

## 트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트
<a name="UsingWithRDS.SSL-certificate-rotation-sample-script"></a>

다음은 인증서 번들을 트러스트 스토어로 가져오는 샘플 셸 스크립트입니다.

각 샘플 셸 스크립트는 Java Devopment Kit(JDK)의 일부인 keytool을 사용합니다. Docker 설치에 대한 자세한 내용은 [Docker 설치 안내서](https://docs.oracle.com/en/java/javase/17/install/overview-jdk-installation.html)를 참조하세요.

------
#### [ Linux ]

다음은 Linux 운영 체제에서 트러스트 스토어로 인증서 번들을 가져오는 샘플 셸 스크립트입니다.

```
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi truststore=${mydir}/rds-truststore.jks storepassword=changeit

curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n+1 ".pem"}' < ${mydir}/global-bundle.pem

for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
  echo "Importing $alias"
  keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
  rm $CERT
done

rm ${mydir}/global-bundle.pem

echo "Trust store content is: "

keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
   echo " Certificate ${alias} expires in '$expiry'" 
done
```

------
#### [ macOS ]

다음은 macOS에서 트러스트 스토어로 인증서 번들을 가져오는 샘플 셸 스크립트입니다.

```
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi truststore=${mydir}/rds-truststore.jks storepassword=changeit

curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"> ${mydir}/global-bundle.pem
split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca-

for CERT in rds-ca-*; do alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
  echo "Importing $alias"
  keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
  rm $CERT
done

rm ${mydir}/global-bundle.pem

echo "Trust store content is: "

keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
do expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
   echo " Certificate ${alias} expires in '$expiry'" 
done
```

------

# 인터네트워크 트래픽 개인 정보
<a name="inter-network-traffic-privacy"></a>

Amazon RDS 와 온프레미스 애플리케이션 간의 연결을 비롯해 Amazon RDS 및 동일한 AWS 리전의 다른 AWS 리소스 간의 연결이 보호됩니다.

## 서비스와 온프레미스 클라이언트 및 애플리케이션 간의 트래픽
<a name="inter-network-traffic-privacy-on-prem"></a>

프라이빗 네트워크와 AWS 사이에 두 연결 옵션이 있습니다.
+ AWS Site-to-Site VPN 연결. 자세한 내용은 [AWS Site-to-Site VPN란 무엇입니까?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)를 참조하십시오.
+ Direct Connect 연결. 자세한 내용은 [Direct Connect란 무엇인가요?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)를 참조하세요.

AWS에서 게시한 API 작업을 사용하면 네트워크를 통해 Amazon RDS 에 액세스할 수 있습니다. 클라이언트는 다음을 지원해야 합니다.
+ Transport Layer Security(TLS). TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

또한 요청은 액세스 키 ID 및 IAM 위탁자와 관련된 시크릿 액세스 키를 사용하여 서명해야 합니다. 또는 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)(AWS STS)를 사용하여 임시 자격 증명을 생성하여 요청에 서명할 수 있습니다.

# Amazon RDS의 자격 증명 및 액세스 관리
<a name="UsingWithRDS.IAM"></a>





AWS Identity and Access Management(IAM)은 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있도록 지원하는 AWS 서비스입니다. IAM 관리자는 어떤 사용자가 Amazon RDS 리소스를 사용할 수 있도록 *인증*(로그인)되고 *권한이 부여*(권한 있음)될 수 있는지 제어합니다. IAM은 추가 비용 없이 사용할 수 있는 AWS 서비스입니다.

**Topics**
+ [

## 고객
](#security_iam_audience)
+ [

## 자격 증명을 통한 인증
](#security_iam_authentication)
+ [

## 정책을 사용하여 액세스 관리
](#security_iam_access-manage)
+ [

# Amazon RDS에서 IAM을 사용하는 방법
](security_iam_service-with-iam.md)
+ [

# Amazon RDS 자격 증명 기반 정책 예
](security_iam_id-based-policy-examples.md)
+ [

# AWSAmazon RDS에 대한 관리형 정책
](rds-security-iam-awsmanpol.md)
+ [

# AWS 관리형 정책에 대한 Amazon RDS 업데이트
](rds-manpol-updates.md)
+ [

# 교차 서비스 혼동된 대리자 문제 방지
](cross-service-confused-deputy-prevention.md)
+ [

# MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증
](UsingWithRDS.IAMDBAuth.md)
+ [

# Amazon RDS 자격 증명 및 액세스 문제 해결
](security_iam_troubleshoot.md)

## 고객
<a name="security_iam_audience"></a>

AWS Identity and Access Management(IAM)를 사용하는 방법은 Amazon RDS에서 수행하는 작업에 따라 달라집니다.

**서비스 사용자** – Amazon RDS 서비스를 사용하여 작업을 수행하는 경우 필요한 자격 증명과 권한을 관리자가 제공합니다. 더 많은 Amazon RDS 기능을 사용하여 작업을 수행하게 되면 추가 권한이 필요할 수 있습니다. 액세스 권한 관리 방식을 이해하면 적절한 권한을 관리자에게 요청할 수 있습니다. Amazon RDS의 기능에 액세스할 수 없는 경우 [Amazon RDS 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md) 섹션을 참조하십시오.

**서비스 관리자** – 회사에서 Amazon RDS 리소스를 책임지고 있는 경우 Amazon RDS에 대한 전체 액세스를 가지고 있을 것입니다. 서비스 관리자는 직원이 액세스해야 하는 Amazon RDS 기능과 리소스를 결정합니다. 그런 다음 관리자에게 요청을 제출하여 서비스 사용자의 권한을 변경합니다. 이 페이지의 정보를 검토하여 IAM의 기본 개념을 이해하세요. 회사가 Amazon RDS에서 IAM을 사용하는 방법에 대해 자세히 알아보려면 [Amazon RDS에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 섹션을 참조하십시오.

**관리자** – 관리자는 Amazon RDS에 대한 액세스 권한을 관리하는 정책을 작성하는 방법에 대해 자세히 알아보는 것이 좋습니다. IAM에서 사용할 수 있는 예제 Amazon RDS 자격 증명 기반 정책 예제를 보려면 [Amazon RDS 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하십시오.

## 자격 증명을 통한 인증
<a name="security_iam_authentication"></a>

인증은 ID 자격 증명을 사용하여 AWS에 로그인하는 방식입니다. AWS 계정 루트 사용자나 IAM 사용자로 또는 IAM 역할을 수임하여 인증받아야 합니다.

AWS IAM Identity Center(IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 자격 증명으로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In 사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해 AWS는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용 AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 AWS 계정을 생성하는 경우에는 모든 AWS 서비스 서비스와 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *루트 사용자*라는 단일 로그인 자격 증명으로 시작합니다. 일상적인 작업에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자 자격 증명이 필요한 작업은 *IAM 사용 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) 섹션을 참조하세요.

### 페더레이션 자격 증명
<a name="security_iam_authentication-federatedidentity"></a>

가장 좋은 방법은 인간 사용자가 ID 제공업체와의 페더레이션을 사용하여 임시 보안 인증으로 AWS 서비스에 액세스하도록 하는 것입니다.

*페더레이션 자격 증명*은 엔터프라이즈 사용자 디렉터리, 웹 ID 제공업체 또는 Directory Service의 사용자로, 자격 증명 소스의 자격 증명을 사용하여 AWS 서비스에 액세스합니다. 페더레이션 자격 증명은 임시 자격 증명을 제공하는 역할을 수임합니다.

중앙 집중식 액세스 관리를 위해 AWS IAM Identity Center를 추천합니다. 자세한 정보는 *AWS IAM Identity Center 사용 설명서*의 [IAM Identity Center란 무엇인가요?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) 섹션을 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 자격 증명입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*에서 [임시 자격 증명을 사용하여 AWS에 액세스하려면 인간 사용자가 ID 공급자와의 페더레이션을 사용하도록 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 권한 관리를 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요. 

IAM 데이터베이스 인증을 사용하여 DB 인스턴스에 인증할 수 있습니다.

IAM 데이터베이스 인증은 다음 DB 엔진에서 유효합니다.
+ RDS for MariaDB
+ RDS for MySQL
+ RDS for PostgreSQL

 IAM을 사용한 DB 인스턴스 인증에 대한 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)**은 특정 권한을 가지고 있는 AWS 계정 계정 내 ID입니다. 이 역할은 사용자와 비슷하지만, 특정 개인과 연결되지 않습니다. [역할 전환](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)하여 AWS Management Console에서 IAM 역할을 임시로 수임할 수 있습니다. AWS CLI 또는 AWS API 작업을 호출하거나 사용자 지정 URL을 사용하여 역할을 수임할 수 있습니다. 역할 사용 방법에 대한 자세한 정보는 *IAM 사용 설명서*의 [IAM 역할 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)을 참조하세요.

임시 자격 증명이 있는 IAM 역할은 다음과 같은 상황에서 유용합니다.
+ ****임시 사용자 권한 - 사용자는 IAM 역할을 수임하여 특정 작업에 대한 다양한 권한을 임시로 받을 수 있습니다.
+ **페더레이션 사용자 액세스** - 페더레이션 ID에 권한을 부여하려면 역할을 생성하고 해당 역할의 권한을 정의합니다. 페더레이션 ID가 인증되면 역할이 연결되고 역할에 정의된 권한이 부여됩니다. 페더레이션 관련 역할에 대한 자세한 내용은 *IAM 사용 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)를 참조하세요. IAM Identity Center를 사용하는 경우, 권한 집합을 구성합니다. 인증 후 ID가 액세스할 수 있는 항목을 제어하기 위해 IAM Identity Center는 권한 집합을 IAM의 역할과 연관짓습니다. 권한 집합에 대한 자세한 내용은 *AWS IAM Identity Center 사용 설명서*의 [권한 집합](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)을 참조하세요.
+ **교차 계정 액세스** - IAM 역할을 사용하여 다른 계정의 사용자(신뢰할 수 있는 보안 주체)가 내 계정의 리소스에 액세스하도록 허용할 수 있습니다. 역할은 교차 계정 액세스를 부여하는 기본적인 방법입니다. 그러나 일부 AWS 서비스를 사용하면 (역할을 프록시로 사용하는 대신) 리소스에 정책을 직접 연결할 수 있습니다. 크로스 계정 액세스를 위한 역할과 리소스 기반 정책의 차이점을 알아보려면 *IAM 사용 설명서*의 [IAM 역할과 리소스 기반 정책의 차이](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)를 참조하십시오.
+ **교차 서비스 액세스** - 일부 AWS 서비스는 다른 AWS 서비스의 기능을 사용합니다. 예를 들어, 서비스에서 호출하면 일반적으로 해당 서비스는 Amazon EC2에서 애플리케이션을 실행하거나 Amazon S3에 객체를 저장합니다. 서비스는 직접적으로 호출하는 위탁자의 권한을 사용하거나, 서비스 역할을 사용하거나, 또는 서비스 연결 역할을 사용하여 이 작업을 수행할 수 있습니다.
  + **전달 액세스 세션** – 전달 액세스 세션(FAS)은 AWS 서비스를 직접적으로 호출하는 위탁자의 권한과 요청하는 AWS 서비스를 함께 사용하여 다운스트림 서비스에 대한 요청을 수행합니다. FAS 요청 시 정책 세부 정보는 [전달 액세스 세션](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)을 참조하세요.
  + **서비스 역할** - 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하기 위해 맡는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 정보는 *IAM 사용 설명서*의 [Create a role to delegate permissions to an AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)를 참조하세요.
  + **서비스 연결 역할** – 서비스 연결 역할은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 링크 역할은 AWS 계정에 나타나고, 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집할 수는 없습니다.
+ **Amazon EC2에서 실행 중인 애플리케이션** – IAM 역할을 사용하여 EC2 인스턴스에서 실행되고 AWS CLI 또는 AWS API 요청을 수행하는 애플리케이션의 임시 자격 증명을 관리할 수 있습니다. 이는 EC2 인스턴스 내에 액세스 키를 저장할 때 권장되는 방법입니다. EC2 인스턴스에 AWS역할을 할당하고 해당 역할을 모든 애플리케이션에서 사용할 수 있도록 하려면 인스턴스에 연결된 인스턴스 프로필을 생성합니다. 인스턴스 프로필에는 역할이 포함되어 있으며 EC2 인스턴스에서 실행되는 프로그램이 임시 보안 인증을 얻을 수 있습니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)를 참조하세요.

IAM 역할을 사용할지 여부를 알아보려면 *IAM 사용 설명서*의 [사용자 대신 IAM 역할을 생성해야 하는 경우](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_which-to-choose_role)를 참조하십시오.

## 정책을 사용하여 액세스 관리
<a name="security_iam_access-manage"></a>

정책을 생성하고 IAM 자격 증명 또는 AWS 리소스에 연결하여 AWS에서 액세스를 제어합니다. 정책은 자격 증명이나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체입니다. AWS는 엔터티(루트 사용자, 사용자 또는 IAM 역할)가 요청을 보낼 때 이러한 정책을 평가합니다. 정책에서 권한은 요청이 허용되거나 거부되는 지를 결정합니다. 대부분의 정책은 AWS에 JSON 문서로 저장됩니다. JSON 정책 문서의 구조와 콘텐츠에 대한 자세한 내용은 *IAM 사용 설명서*의 [JSON 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)를 참조하세요.

관리자는 AWS 리소스에 액세스할 수 있는 사람과 해당 리소스에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 모든 IAM 엔터티(권한 세트 또는 역할)는 처음에는 권한이 없습니다. 다시 말해, 기본적으로 사용자는 아무 작업도 수행할 수 없으며, 자신의 암호를 변경할 수도 없습니다. 사용자에게 태스크를 수행할 권한을 부여하기 위해 관리자는 사용자에게 권한 정책을 연결해야 합니다. 또한 관리자는 의도한 권한을 가지고 있는 그룹에 사용자를 추가할 수 있습니다. 관리자가 그룹에 권한을 부여하면 그룹의 모든 사용자가 해당 권한을 받습니다.

IAM 정책은 태스크를 수행하기 위해 사용하는 방법과 상관없이 작업에 대한 권한을 정의합니다. 예를 들어, `iam:GetRole` 작업을 허용하는 정책이 있다고 가정합니다. 해당 정책이 있는 사용자는 AWS Management Console, AWS CLI 또는 AWS API에서 역할 정보를 가져올 수 있습니다.

### ID 기반 정책
<a name="security_iam_access-manage-id-based-policies"></a>

자격 증명 기반 정책은 권한 세트나 역할과 같은 자격 증명에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 참조하십시오.

보안 인증 기반 정책은 *인라인 정책* 또는 *관리형 정책*으로 한층 더 분류할 수 있습니다. 인라인 정책은 단일 권한 세트 또는 역할에 직접 포함됩니다. 관리형 정책은 AWS 계정에 속한 다수의 권한 세트 및 역할에 추가할 수 있는 독립형 정책입니다. 관리형 정책에는 AWS관리형 정책과 고객 관리형 정책이 포함되어 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 *IAM 사용 설명서*의 [관리형 정책과 인라인 정책의 선택](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#choosing-managed-or-inline)을 참조하세요.

Amazon RDS와 관련된 AWS 관리형 정책에 대한 자세한 내용은 [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) 섹션을 참조하세요.

### 기타 정책 타입
<a name="security_iam_access-manage-other-policies"></a>

AWS는 비교적 일반적이지 않은 추가 정책 유형을 지원합니다. 이러한 정책 타입은 더 일반적인 정책 유형에 따라 사용자에게 부여되는 최대 권한을 설정할 수 있습니다.
+ ****권한 경계 – 권한 경계는 자격 증명 기반 정책에 따라 IAM 엔터티(권한 세트 또는 역할)에 부여할 수 있는 최대 권한을 설정하는 고급 기능입니다. 엔터티에 대한 권한 경계를 설정할 수 있습니다. 그 결과로 얻는 권한은 개체의 자격 증명 기반 정책과 그 권한 경계의 교집합입니다. `Principal` 필드에서 권한 세트 또는 역할을 지정하는 리소스 기반 정책은 권한 경계를 통해 제한되지 않습니다. 이러한 정책 중 하나에 포함된 명시적 거부는 허용을 재정의합니다. 권한 경계에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 개체에 대한 권한 경계](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** – SCP는 AWS Organizations에서 조직 또는 조직 단위(OU)에 최대 권한을 지정하는 JSON 정책입니다. AWS Organizations는 기업이 소유하는 여러 개의 AWS 계정을 그룹화하고 중앙에서 관리하기 위한 서비스입니다. 조직에서 모든 특성을 활성화할 경우, 서비스 제어 정책(SCP)을 임의의 또는 모든 계정에 적용할 수 있습니다. SCP는 각 AWS 계정 루트 사용자을 비롯하여 멤버 계정의 엔터티에 대한 권한을 제한합니다. 조직 및 SCP에 대한 자세한 정보는 *AWS Organizations 사용 설명서*의 [SCP 작동 방식](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_about-scps.html)을 참조하십시오.
+ **세션 정책** – 세션 정책은 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 결과적으로 얻는 세션의 권한은 권한 세트 또는 역할의 자격 증명 기반 정책과 세션 정책이 만나는 지점입니다. 또한 권한을 리소스 기반 정책에서 가져올 수도 있습니다. 이러한 정책 중 하나에 포함된 명시적 거부는 허용을 재정의합니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

### 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies"></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 여러 정책 유형이 관련될 때 AWS가 요청을 허용할지를 결정하는 방법을 알아보려면 IAM 사용 설명서**의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

# Amazon RDS에서 IAM을 사용하는 방법
<a name="security_iam_service-with-iam"></a>

IAM을 사용하여 Amazon RDS에 대한 액세스를 관리하려면 먼저 어떤 IAM 기능을 Amazon RDS에서 사용할 수 있는지를 이해해야 합니다.

다음 표에는 Amazon RDS에서 사용할 수 있는 IAM 기능이 나열되어 있습니다.


| IAM 특성 | Amazon RDS 지원 | 
| --- | --- | 
|  [자격 증명 기반 정책](#security_iam_service-with-iam-id-based-policies)  |  예  | 
|  [리소스 기반 정책](#security_iam_service-with-iam-resource-based-policies)  |  아니요  | 
|  [정책 작업](#security_iam_service-with-iam-id-based-policies-actions)  |  예  | 
|  [정책 리소스](#security_iam_service-with-iam-id-based-policies-resources)  |  예  | 
|  [정책 조건 키(서비스별)](#UsingWithRDS.IAM.Conditions)  |  예  | 
|  [ACL](#security_iam_service-with-iam-acls)  |  아니요  | 
|  [속성 기반 액세스 제어(ABAC)(정책 태그)](#security_iam_service-with-iam-tags)  |  예  | 
|  [임시 보안 인증](#security_iam_service-with-iam-roles-tempcreds)  |  예  | 
|  [전달 액세스 세션](#security_iam_service-with-iam-principal-permissions)  |  예  | 
|  [서비스 역할](#security_iam_service-with-iam-roles-service)  |  예  | 
|  [서비스 연결 역할](#security_iam_service-with-iam-roles-service-linked)  |  예  | 

Amazon RDS 및 기타 AWS 서비스에서 IAM을 사용하는 방법을 개괄적으로 알아보려면 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)에서 *IAM으로 작업하는 AWS 서비스*를 참조하세요.

**Topics**
+ [

## Amazon RDS 자격 증명 기반 정책
](#security_iam_service-with-iam-id-based-policies)
+ [

## Amazon RDS 내의 리소스 기반 정책
](#security_iam_service-with-iam-resource-based-policies)
+ [

## Amazon RDS의 정책 작업
](#security_iam_service-with-iam-id-based-policies-actions)
+ [

## Amazon RDS의 정책 리소스
](#security_iam_service-with-iam-id-based-policies-resources)
+ [

## Amazon RDS의 정책 조건 키
](#UsingWithRDS.IAM.Conditions)
+ [

## Amazon RDS의 액세스 제어 목록(ACL)
](#security_iam_service-with-iam-acls)
+ [

## Amazon RDS 태그가 있는 정책의 속성 기반 액세스 제어(ABAC)
](#security_iam_service-with-iam-tags)
+ [

## Amazon RDS에서 임시 자격 증명 사용
](#security_iam_service-with-iam-roles-tempcreds)
+ [

## Amazon RDS를 위한 전달 액세스 세션
](#security_iam_service-with-iam-principal-permissions)
+ [

## Amazon RDS에 대한 서비스 역할
](#security_iam_service-with-iam-roles-service)
+ [

## Amazon RDS에 대한 서비스 연결 역할
](#security_iam_service-with-iam-roles-service-linked)

## Amazon RDS 자격 증명 기반 정책
<a name="security_iam_service-with-iam-id-based-policies"></a>

**ID 기반 정책 지원:** 예.

ID 기반 정책은 IAM 사용자, 사용자 그룹 또는 역할과 같은 ID에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 사용자 및 역할이 어떤 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

IAM ID 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스뿐 아니라 작업이 허용되거나 거부되는 조건을 지정할 수 있습니다. JSON 정책에서 사용할 수 있는 모든 요소에 대해 알아보려면 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)를 참조하세요.

### Amazon RDS 자격 증명 기반 정책 예
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>

Amazon RDS 자격 증명 기반 정책 예제를 보려면 [Amazon RDS 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.

## Amazon RDS 내의 리소스 기반 정책
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**리소스 기반 정책 지원:** 아니요.

리소스 기반 정책은 리소스에 연결하는 JSON 정책 설명서입니다. 리소스 기반 정책의 예제는 IAM *역할 신뢰 정책*과 Amazon S3 *버킷 정책*입니다. 리소스 기반 정책을 지원하는 서비스에서 서비스 관리자는 이러한 정책을 사용하여 특정 리소스에 대한 액세스를 통제할 수 있습니다. 정책이 연결된 리소스의 경우 정책은 지정된 보안 주체가 해당 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 정의합니다. 리소스 기반 정책에서 [보안 주체를 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)해야 합니다. 위탁자에는 계정, 사용자, 역할, 페더레이션 사용자 또는 AWS 서비스가 포함될 수 있습니다.

교차 계정 액세스를 활성화하려는 경우, 전체 계정이나 다른 계정의 IAM 개체를 리소스 기반 정책의 보안 주체로 지정할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM에서 교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

## Amazon RDS의 정책 작업
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**정책 작업 지원:** 예.

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

JSON 정책의 `Action`요소는 정책에서 액세스를 허용하거나 거부하는 데 사용할 수 있는 작업을 설명합니다. 연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에 작업을 포함하세요.

Amazon RDS의 정책 작업은 작업 앞에 다음 접두사를 사용합니다. `rds:`. 예를 들어 Amazon RDS `DescribeDBInstances` API 작업으로 DB 인스턴스를 설명할 수 있는 권한을 부여하려면 해당 정책에 `rds:DescribeDBInstances` 작업을 포함합니다. 정책 문에는 `Action` 또는 `NotAction` 요소가 반드시 추가되어야 합니다. Amazon RDS는 이 서비스로 수행할 수 있는 태스크를 설명하는 고유한 작업 세트를 정의합니다.

명령문 하나에 여러 작업을 지정하려면 다음과 같이 쉼표로 구분합니다.

```
"Action": [
      "rds:action1",
      "rds:action2"
```

와일드카드(\$1)를 사용하여 여러 작업을 지정할 수 있습니다. 예를 들어, `Describe`라는 단어로 시작하는 모든 작업을 지정하려면 다음 작업을 포함합니다.

```
"Action": "rds:Describe*"
```



Amazon RDS 작업 목록을 보려면 *서비스 권한 부여 참조*에서 [Amazon RDS에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-actions-as-permissions)을 참조하세요.

## Amazon RDS의 정책 리소스
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**정책 리소스 지원:** 예.

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Resource` JSON 정책 요소는 작업이 적용되는 하나 이상의 객체를 지정합니다. 모범 사례에 따라 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)을 사용하여 리소스를 지정합니다. 리소스 수준 권한을 지원하지 않는 작업의 경우, 와일드카드(\$1)를 사용하여 해당 문이 모든 리소스에 적용됨을 나타냅니다.

```
"Resource": "*"
```

DB 인스턴스 리소스는 다음과 같은 Amazon 리소스 이름(ARN)을 갖습니다.

```
arn:${Partition}:rds:${Region}:${Account}:{ResourceType}/${Resource}
```

ARN 형식에 관한 자세한 내용은 [Amazon 리소스 이름(ARN) 및 AWS 서비스 네임스페이스](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) 섹션을 참조하세요.

예를 들어, 문에서 `dbtest` DB 인스턴스를 지정하려면 다음 ARN을 사용합니다.

```
"Resource": "arn:aws:rds:us-west-2:123456789012:db:dbtest"
```

특정 계정에 속하는 모든 DB 인스턴스를 지정하려면 와일드카드(\$1)를 사용합니다.

```
"Resource": "arn:aws:rds:us-east-1:123456789012:db:*"
```

리소스를 생성하기 위한 작업과 같은 일부 RDS API 작업은 특정 리소스에서 수행할 수 없습니다. 이러한 경우 와일드카드(\$1)를 사용하면 됩니다.

```
"Resource": "*"
```

다양한 Amazon RDS API 작업에는 여러 리소스가 관여합니다. 예를 들어 `CreateDBInstance`는 DB 인스턴스를 생성합니다. DB 인스턴스를 생성할 때는 사용자가 특정 보안 그룹과 파라미터 그룹을 사용해야 한다고 지정할 수 있습니다. 단일 문에서 여러 리소스를 지정하려면 ARN을 쉼표로 구분합니다.

```
"Resource": [
      "resource1",
      "resource2"
```

Amazon RDS 리소스 유형 및 해당 ARN의 목록을 보려면 *서비스 권한 부여 참조*에서 [Amazon RDS에서 정의한 리소스](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-resources-for-iam-policies)를 참조하세요. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 [Amazon RDS에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-actions-as-permissions)을 참조하세요.

## Amazon RDS의 정책 조건 키
<a name="UsingWithRDS.IAM.Conditions"></a>

**서비스별 정책 조건 키 지원:** 예.

관리자는 AWS JSON 정책을 사용하여 누가 무엇에 액세스할 수 있는지를 지정할 수 있습니다. 즉, 어떤 **보안 주체**가 어떤 **리소스**와 어떤 **조건**에서 **작업**을 수행할 수 있는지를 지정할 수 있습니다.

`Condition` 요소는 정의된 기준에 따라 문이 실행되는 시기를 지정합니다. 같음(equals) 또는 미만(less than)과 같은 [조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 생성할 수 있습니다. 모든 AWS 전역 조건 키를 보려면 *IAM 사용자 설명서*의 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.

Amazon RDS에서는 자체 조건 키 집합을 정의하고 일부 전역 조건 키 사용도 지원합니다. 모든 AWS 글로벌 조건 키를 보려면 *IAM 사용 설명서*의 [AWS 글로벌 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.



 모든 RDS API 작업은 `aws:RequestedRegion` 조건 키를 지원합니다.

Amazon RDS 조건 키 목록을 보려면 *서비스 권한 부여 참조*에서 [Amazon RDS에서 정의한 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-policy-keys)를 참조하세요. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 [Amazon RDS에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-actions-as-permissions)을 참조하세요.

## Amazon RDS의 액세스 제어 목록(ACL)
<a name="security_iam_service-with-iam-acls"></a>

**액세스 제어 목록(ACL) 지원;** 아니요.

액세스 제어 목록(ACL)은 어떤 보안 주체(계정 멤버, 사용자 또는 역할)가 리소스에 액세스할 수 있는 권한을 가지고 있는지를 제어합니다. ACL은 JSON 정책 문서 형식을 사용하지 않지만 리소스 기반 정책과 유사합니다.

## Amazon RDS 태그가 있는 정책의 속성 기반 액세스 제어(ABAC)
<a name="security_iam_service-with-iam-tags"></a>

**정책의 ABAC(속성 기반 액세스 제어) 태그 지원:** 예.

속성 기반 액세스 제어(ABAC)는 태그라고 불리는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. IAM 엔터티 및 AWS 리소스에 태그를 연결하면 보안 주체의 태그가 리소스 태그와 일치할 때 작업을 허용하도록 ABAC 정책을 설계할 수 있습니다.

태그에 근거하여 액세스를 제어하려면 `aws:ResourceTag/key-name`, `aws:RequestTag/key-name`또는 `aws:TagKeys`조건 키를 사용하여 정책의 [조건 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에 태그 정보를 제공합니다.

서비스가 모든 리소스 유형에 대해 세 가지 조건 키를 모두 지원하는 경우, 값은 서비스에 대해 **예**입니다. 서비스가 일부 리소스 유형에 대해서만 세 가지 조건 키를 모두 지원하는 경우, 값은 **부분적**입니다.

ABAC에 대한 자세한 내용은 *IAM 사용 설명서*의 [ABAC 권한 부여를 통한 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)를 참조하세요. ABAC 설정 단계가 포함된 자습서를 보려면 *IAM 사용 설명서*의 [속성 기반 액세스 제어(ABAC) 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)을 참조하세요.

Amazon RDS 리소스 태그 지정에 대한 자세한 내용은 [조건 지정: 사용자 지정 태그 사용](UsingWithRDS.IAM.SpecifyingCustomTags.md) 단원을 참조하십시오. 리소스의 태그를 기반으로 리소스에 대한 액세스를 제한하는 자격 증명 기반 정책의 예제는 [두 가지 값이 있는 특정 태그를 사용하는 리소스 작업에 대한 권한 부여](security_iam_id-based-policy-examples-create-and-modify-examples.md#security_iam_id-based-policy-examples-grant-permissions-tags)에서 확인할 수 있습니다.

## Amazon RDS에서 임시 자격 증명 사용
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**임시 자격 증명 지원:** 예.

임시 자격 증명은 AWS리소스에 대한 단기 액세스를 제공하며 페더레이션 또는 전환 역할을 사용할 때 자동으로 생성됩니다. AWS에서는 장기 액세스 키를 사용하는 대신 임시 자격 증명을 동적으로 생성할 것을 권장합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 및 [IAM으로 작업하는 AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 섹션을 참조하세요.

## Amazon RDS를 위한 전달 액세스 세션
<a name="security_iam_service-with-iam-principal-permissions"></a>

**전달 액세스 세션 지원:** 예.

 전달 액세스 세션(FAS)은 AWS 서비스를 직접 호출하는 보안 주체의 권한과 요청하는 AWS 서비스를 함께 사용하여 다운스트림 서비스에 대한 요청을 수행합니다. FAS 요청 시 정책 세부 정보는 [전달 액세스 세션](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)을 참조하세요.

## Amazon RDS에 대한 서비스 역할
<a name="security_iam_service-with-iam-roles-service"></a>

**서비스 역할 지원:** 예.

 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스 AWS에 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**주의**  
서비스 역할에 대한 권한을 변경하면 Amazon RDS 기능이 중단될 수 있습니다. Amazon RDS에서 관련 지침을 제공하는 경우에만 서비스 역할을 편집합니다.

## Amazon RDS에 대한 서비스 연결 역할
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**서비스 연결 역할 지원:** 예.

 서비스 연결 역할은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 사용자를 대신하여 작업을 수행하기 위해 역할을 수임할 수 있습니다. 서비스 연결 역할은 AWS 계정에 나타나고, 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집은 할 수 없습니다.

Amazon RDS 서비스 연결 역할을 사용하는 방법에 대한 자세한 내용은 [Amazon RDS에 서비스 연결 역할 사용](UsingWithRDS.IAM.ServiceLinkedRoles.md) 섹션을 참조하세요.

# Amazon RDS 자격 증명 기반 정책 예
<a name="security_iam_id-based-policy-examples"></a>

기본적으로 권한 세트 및 역할은 Amazon RDS 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 또한 AWS Management Console, AWS CLI 또는 AWS API를 사용해 태스크를 수행할 수 없습니다. 관리자는 필요한 지정된 리소스에서 특정 API 작업을 수행할 수 있는 권한을 권한 세트와 역할에 부여하는 IAM 정책을 생성해야 합니다. 그런 다음 관리자는 해당 권한이 필요한 권한 세트 또는 역할에 이러한 정책을 연결해야 합니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용자 설명서*의 [JSON 탭에서 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)을 참조하세요.

**Topics**
+ [

## 정책 모범 사례
](#security_iam_service-with-iam-policy-best-practices)
+ [

## Amazon RDS 콘솔 사용
](#security_iam_id-based-policy-examples-console)
+ [

## 콘솔 사용에 필요한 권한
](#UsingWithRDS.IAM.RequiredPermissions.Console)
+ [

## 사용자가 자신의 고유한 권한을 볼 수 있도록 허용
](#security_iam_id-based-policy-examples-view-own-permissions)
+ [

# Amazon RDS에서 리소스를 생성, 수정 및 삭제하기 위한 권한 정책
](security_iam_id-based-policy-examples-create-and-modify-examples.md)
+ [

# 정책 예: 조건 키 사용
](UsingWithRDS.IAM.Conditions.Examples.md)
+ [

# 조건 지정: 사용자 지정 태그 사용
](UsingWithRDS.IAM.SpecifyingCustomTags.md)
+ [

# 생성 시 Amazon RDS 리소스를 태그하는 권한 부여
](security_iam_id-based-policy-examples-grant-permissions-tags-on-create.md)

## 정책 모범 사례
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID 기반 정책에 따라 계정에서 사용자가 Amazon RDS 리소스를 생성, 액세스 또는 삭제할 수 있는지 여부가 결정됩니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. ID 기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르세요.
+ **AWS 관리형 정책으로 시작하고 최소 권한을 향해 나아가기** - 사용자 및 워크로드에 권한 부여를 시작하려면 많은 일반 사용 사례에 대한 권한을 부여하는 *AWS관리형 정책*을 사용합니다. AWS 계정에서 사용할 수 있습니다. 사용 사례에 고유한 AWS고객 관리형 정책을 정의하여 권한을 줄이는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) 또는 [AWS직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.
+ **최소 권한 적용** – IAM 정책을 사용하여 권한을 설정하는 경우, 작업을 수행하는 데 필요한 권한만 부여합니다. 이렇게 하려면 *최소 권한*으로 알려진 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의합니다. IAM을 사용하여 권한을 적용하는 방법에 대한 자세한 정보는 *IAM 사용 설명서*에 있는 [IAM의 정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)을 참조하세요.
+ **IAM 정책의 조건을 사용하여 액세스 추가 제한** – 정책에 조건을 추가하여 작업 및 리소스에 대한 액세스를 제한할 수 있습니다. 예를 들어, SSL을 사용하여 모든 요청을 전송해야 한다고 지정하는 정책 조건을 작성할 수 있습니다. CloudFormation와 같이, 특정 AWS 서비스를 통해 사용되는 경우에만 서비스 작업에 대한 액세스 권한을 부여할 수도 있습니다. 자세한 내용은 *IAM 사용자 설명서*의 [IAM JSON 정책 요소: 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.
+ **IAM Access Analyzer를 통해 IAM 정책을 확인하여 안전하고 기능적인 권한 보장** - IAM Access Analyzer에서는 IAM 정책 언어(JSON)와 모범 사례가 정책에서 준수되도록 새로운 및 기존 정책을 확인합니다. IAM Access Analyzer는 100개 이상의 정책 확인 항목과 실행 가능한 추천을 제공하여 안전하고 기능적인 정책을 작성하도록 돕습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM Access Analyzer에서 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.
+ **다중 인증(MFA) 필요** – AWS 계정에 IAM 사용자 또는 루트 사용자가 필요한 시나리오가 있는 경우, 추가 보안을 위해 MFA를 설정합니다. API 작업을 직접적으로 호출할 때 MFA가 필요하면 정책에 MFA 조건을 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [MFA를 통한 보안 API 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)를 참조하세요.

IAM의 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하십시오.

## Amazon RDS 콘솔 사용
<a name="security_iam_id-based-policy-examples-console"></a>

Amazon RDS 콘솔에 액세스하려면 최소 권한 집합이 있어야 합니다. 이러한 권한을 통해 AWS 계정에서 Amazon RDS 리소스에 대한 세부 정보를 나열하고 볼 수 있어야 합니다. 최소 필수 권한보다 더 제한적인 ID 기반 정책을 생성하는 경우, 콘솔이 해당 정책에 연결된 엔티티(사용자 또는 역할)에 대해 의도대로 작동하지 않습니다.

AWS CLI 또는 AWS API만 직접적으로 호출하는 사용자에게 최소 콘솔 권한을 허용할 필요가 없습니다. 그 대신 수행하려는 API 작업과 일치하는 작업에만 액세스할 수 있도록 합니다.

해당 엔터티가 Amazon RDS 콘솔을 여전히 사용할 수 있도록 하려면 AWS 관리형 정책도 엔터티에 연결합니다.

```
AmazonRDSReadOnlyAccess
```

자세한 내용은 *IAM 사용 설명서*의 [사용자에게 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)를 참조하십시오.

## 콘솔 사용에 필요한 권한
<a name="UsingWithRDS.IAM.RequiredPermissions.Console"></a>

콘솔에서 작업하려면 최소한의 권한이 사용자에게 필요합니다. 이러한 권한이 있어야만 사용자가 자신의 AWS 계정에서 사용할 Amazon RDS 리소스를 설명하고, Amazon EC2 보안 및 네트워크 정보 등 다른 관련 정보를 입력할 수 있습니다.

최소 필수 권한보다 더 제한적인 IAM 정책을 만들면 콘솔은 해당 IAM 정책에 연결된 사용자에 대해 의도대로 작동하지 않습니다. 이 사용자가 콘솔을 사용할 수 있도록 하려면 `AmazonRDSReadOnlyAccess` 관리형 정책을 사용자에게 연결합니다([정책을 사용하여 액세스 관리](UsingWithRDS.IAM.md#security_iam_access-manage) 참조).

AWS CLI 또는 Amazon RDS API만 호출하는 사용자에게 최소 콘솔 권한을 허용할 필요가 없습니다.

다음 정책은 루트 AWS 계정의 모든 Amazon RDS 리소스에 대해 전체 액세스 권한을 부여합니다.

```
AmazonRDSFullAccess             
```

## 사용자가 자신의 고유한 권한을 볼 수 있도록 허용
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

이 예제는 IAM 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여줍니다. 이 정책에는 콘솔에서 또는 AWS CLI나 AWS API를 사용하여 프로그래밍 방식으로 이 작업을 완료할 수 있는 권한이 포함됩니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# 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>

다음은 ID가 `123456789012`인 계정에 AWS 계정에 대한 DB 인스턴스를 생성하도록 허용하는 정책 예제입니다. 이 정책에 따라 새 DB 인스턴스의 이름은 `test`로 시작해야 합니다. 또한 새 DB 인스턴스는 MySQL 데이터베이스 엔진 및 `db.t2.micro` DB 인스턴스 클래스를 사용해야 합니다. 또한 새로운 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 Management Console에도 적용됩니다.
+ `Resource` 요소는 사용자가 리소스 위치에서 또는 리소스를 사용하여 작업을 수행할 수 있도록 지정합니다. 리소스는 Amazon 리소스 이름(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"
         ]
      }
   ]
}
```

------

## 두 가지 값이 있는 특정 태그를 사용하는 리소스 작업에 대한 권한 부여
<a name="security_iam_id-based-policy-examples-grant-permissions-tags"></a>

자격 증명 기반 정책의 조건을 사용하여 태그를 기반으로 Amazon RDS 리소스에 대한 액세스를 제어할 수 있습니다. 다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 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"
               ]
            }
         }
      }
   ]
}
```

------

다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 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"
      }
   ]
}
```

------

# 정책 예: 조건 키 사용
<a name="UsingWithRDS.IAM.Conditions.Examples"></a>

다음은 Amazon RDS IAM 권한 정책에서 조건 키를 사용할 수 있는 방법의 예입니다.

## 예제 1: 특정 DB 엔진을 사용하고 MultiAZ가 아닌 DB 인스턴스를 생성할 수 있는 권한 부여
<a name="w2aac58c48c33c21b5"></a>

다음 정책은 RDS 조건 키를 사용하며, 사용자가 MySQL 데이터베이스 엔진을 사용하는 DB 인스턴스만 생성할 수 있도록 허용하며, MultiAZ를 사용하지 않습니다. `Condition` 요소는 데이터베이스 엔진이 MySQL이라는 요구 사항을 나타냅니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowMySQLCreate",
         "Effect": "Allow",
         "Action": "rds:CreateDBInstance",
         "Resource": "*",
         "Condition": {
            "StringEquals": {
               "rds:DatabaseEngine": "mysql"
            },
            "Bool": {
               "rds:MultiAz": false
            }
         }
      }
   ]
}
```

------

## 예제 2: 특정 DB 인스턴스 클래스에 대한 DB 인스턴스를 만들고 프로비저닝된 IOPS를 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부
<a name="w2aac58c48c33c21b7"></a>

다음 정책은 가장 크고 가장 비싼 DB 인스턴스 클래스인 DB 인스턴스 클래스 `r3.8xlarge` 및 `m4.10xlarge`를 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부합니다. 또한 이 정책은 추가 비용이 발생하는 프로비저닝된 IOPS를 사용하는 DB 인스턴스를 사용자가 생성하지 못하도록 합니다.

명시적으로 거부하는 권한은 이미 부여된 다른 모든 권한에 우선합니다. 따라서 부여하지 않으려는 권한을 자격 증명이 우연히 획득하지 않도록 할 수 있습니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "DenyLargeCreate",
         "Effect": "Deny",
         "Action": "rds:CreateDBInstance",
         "Resource": "*",
         "Condition": {
            "StringEquals": {
               "rds:DatabaseClass": [
                  "db.r3.8xlarge",
                  "db.m4.10xlarge"
               ]
            }
         }
      },
      {
         "Sid": "DenyPIOPSCreate",
         "Effect": "Deny",
         "Action": "rds:CreateDBInstance",
         "Resource": "*",
         "Condition": {
            "NumericNotEquals": {
               "rds:Piops": "0"
            }
         }
      }
   ]
}
```

------

## 예제 3: 리소스에 태그 지정하는 데 사용할 수 있는 태그 키와 값 집합 제한
<a name="w2aac58c48c33c21b9"></a>

다음 정책은 RDS 조건 키를 사용하고 키가 `stage`인 태그를 값이 `test`, `qa`, `production`인 리소스에 추가할 수 있도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowTagEdits",
      "Effect": "Allow",
      "Action": [
        "rds:AddTagsToResource",
        "rds:RemoveTagsFromResource"
      ],
      "Resource": "arn:aws:rds:us-east-1:123456789012:db:db-123456",
      "Condition": {
        "StringEquals": {
          "rds:req-tag/stage": [
            "test",
            "qa",
            "production"
          ]
        }
      }
    }
  ]
}
```

------

# 조건 지정: 사용자 지정 태그 사용
<a name="UsingWithRDS.IAM.SpecifyingCustomTags"></a>

Amazon RDS에서는 사용자 지정 태그를 사용하여 IAM 정책에서 조건을 지정할 수 있습니다.

예를 들어 이름이 `environment`인 태그를 `beta`, `staging`, `production` 등의 값으로 DB 인스턴스에 추가한다고 가정하겠습니다. 그러면 `environment` 태그 값에 따라 특정 사용자를 DB 인스턴스로 제한하는 정책을 생성할 수 있습니다.

**참고**  
사용자 지정 태그 식별자는 대/소문자를 구분합니다.

다음 표에는 `Condition` 요소에서 사용할 수 있는 RDS 태그 식별자가 나와 있습니다.

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

사용자 지정 태그 조건의 구문은 다음과 같습니다.

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

예를 들어, 다음 `Condition` 요소는 태그 이름이 `environment`이고 태그 값이 `production`인 DB 인스턴스에 적용됩니다.

` "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>

다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 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"
               ]
            }
         }
      }
   ]
}
```

------

다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 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"
                  ]
               }
            }
       }
    ]
}
```

------

### 예제 2: 지정된 DB 파라미터 그룹을 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부
<a name="w2aac58c48c33c23c29b8"></a>

다음 정책은 특정 태그 값이 있는 DB 파라미터 그룹을 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부합니다. DB 인스턴스를 생성할 때 특정 고객 생성 DB 파라미터 그룹을 사용해야 할 경우 이 정책을 적용할 수 있습니다. `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: 인스턴스 이름에 사용자 이름이 접두사로 붙은 DB 인스턴스 작업에 대한 권한 부여
<a name="w2aac58c48c33c23c29c10"></a>

다음 정책은 DB 인스턴스 이름에 사용자 이름이 접두사로 붙어 있고 `AddTagsToResource`와 동일한 `RemoveTagsFromResource`라는 태그가 있거나 `stage`라는 태그가 없는 DB 인스턴스에서 API(`devo` 또는 `stage` 제외)를 호출할 수 있는 권한을 허용합니다.

정책의 `Resource` 줄은 Amazon 리소스 이름(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"
            }
         }
      }
   ]
}
```

------

# 생성 시 Amazon RDS 리소스를 태그하는 권한 부여
<a name="security_iam_id-based-policy-examples-grant-permissions-tags-on-create"></a>

일부 RDS API 작업을 사용하면 리소스를 생성할 때 태그를 지정할 수 있습니다. 리소스 태그를 사용하여 속성 기반 제어(ABAC)를 구현할 수 있습니다. 자세한 내용은 [What is ABAC for AWS?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) 및 [태그를 사용한 AWS 리소스 액세스 제어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)를 참조하세요.

사용자가 생성 시 리소스에 태그를 지정할 수 있으려면 `rds:CreateDBInstance`와 같은 리소스를 생성하는 작업을 사용할 권한이 있어야 합니다. 생성 작업에서 태그가 지정되면 RDS는 `rds:AddTagsToResource` 작업에서 추가 권한 부여를 수행해 사용자에게 태그를 생성할 권한이 있는지 확인합니다. 따라서 사용자는 `rds:AddTagsToResource` 작업을 사용할 명시적 권한도 가지고 있어야 합니다.

`rds:AddTagsToResource` 작업에 대한 IAM 정책 정의에서 `aws:RequestTag` 조건 키를 사용하여 리소스에 태그를 지정하는 요청에 태그를 요구할 수 있습니다.

예를 들어 다음 정책은 사용자가 DB 인스턴스를 생성하고 DB 인스턴스 생성 중에 태그를 적용할 수 있도록 허용하지만 특정 태그 키(`environment` 또는 `project`)를 사용해야 합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "rds:CreateDBInstance"
           ],
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "rds:AddTagsToResource"
           ],
           "Resource": "*",
           "Condition": {
               "StringEquals": {
                   "aws:RequestTag/environment": ["production", "development"],
                   "aws:RequestTag/project": ["dataanalytics", "webapp"]
               },
               "ForAllValues:StringEquals": {
                   "aws:TagKeys": ["environment", "project"]
               }
           }
       }
   ]
}
```

------

이 정책은 `environment` 또는 `project` 태그 이외의 태그를 포함하거나 이러한 태그를 지정하지 않는 DB 인스턴스 생성 요청을 거부합니다. 또한 사용자는 정책의 허용된 값과 일치하는 태그 값을 지정해야 합니다.

다음 정책은 사용자가 DB 클러스터를 생성하고 생성 중에 `environment=prod` 태그를 제외하고는 어떤 태그든 적용하도록 허용합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "rds:CreateDBCluster"
           ],
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "rds:AddTagsToResource"
           ],
           "Resource": "*",
           "Condition": {
               "StringNotEquals": {
                   "aws:RequestTag/environment": "prod"
               }
           }
       }
   ]
}
```

------

## 생성 시 태그 지정이 지원되는 RDS API 작업
<a name="security_iam_id-based-policy-examples-supported-rds-api-actions-tagging-creation"></a>

리소스를 생성할 때 태그를 지원하는 RDS API 작업은 다음과 같습니다. 이러한 작업의 경우 리소스를 생성할 때 태그를 지정할 수 있습니다.
+ `CreateBlueGreenDeployment`
+ `CreateCustomDBEngineVersion`
+ `CreateDBCluster`
+ `CreateDBClusterEndpoint`
+ `CreateDBClusterParameterGroup`
+ `CreateDBClusterSnapshot`
+ `CreateDBInstance`
+ `CreateDBInstanceReadReplica`
+ `CreateDBParameterGroup`
+ `CreateDBProxy`
+ `CreateDBProxyEndpoint`
+ `CreateDBSecurityGroup`
+ `CreateDBShardGroup`
+ `CreateDBSnapshot`
+ `CreateDBSubnetGroup`
+ `CreateEventSubscription`
+ `CreateGlobalCluster`
+ `CreateIntegration`
+ `CreateOptionGroup`
+ `CreateTenantDatabase`
+ `CopyDBClusterParameterGroup`
+ `CopyDBClusterSnapshot`
+ `CopyDBParameterGroup`
+ `CopyDBSnapshot`
+ `CopyOptionGroup`
+ `RestoreDBClusterFromS3`
+ `RestoreDBClusterFromSnapshot`
+ `RestoreDBClusterToPointInTime`
+ `RestoreDBInstanceFromDBSnapshot`
+ `RestoreDBInstanceFromS3`
+ `RestoreDBInstanceToPointInTime`
+ `PurchaseReservedDBInstancesOffering`

AWS CLI 또는 API를 사용하여 태그가 있는 리소스를 생성하는 경우 생성 중에 리소스에 태그를 적용하는 데 `Tags` 파라미터가 사용됩니다.

이러한 API 작업의 경우 태그 지정에 실패하면 리소스가 생성되지 않고 오류와 함께 요청이 실패합니다. 리소스가 태그와 함께 생성되거나 전혀 생성되지 않으므로 의도한 태그 없이는 리소스가 생성되지 않습니다.

# AWSAmazon RDS에 대한 관리형 정책
<a name="rds-security-iam-awsmanpol"></a>

권한 세트 및 역할에 권한을 추가하려면 정책을 직접 작성하는 것보다 AWS 관리형 정책을 사용하는 것이 편리합니다. 팀에 필요한 권한만 제공하는 [IAM 고객 관리형 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)하려면 시간과 전문 지식이 필요합니다. 빠르게 시작하려면 AWS 관리형 정책을 사용하면 됩니다. 이 정책은 일반적인 사용 사례를 다루며 사용자의 AWS 계정에서 사용할 수 있습니다. AWS 관리형 정책에 대한 자세한 정보는 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)에서 *AWS 관리형 정책*을 참조하세요.

AWS 서비스는 AWS 관리형 정책을 유지하고 업데이트합니다. AWS 관리형 정책에서는 권한을 변경할 수 없습니다. 서비스는 때때로 추가 권한을 AWS관리형 정책에 추가하여 새로운 기능을 지원합니다. 이 유형의 업데이트는 정책이 연결된 모든 자격 증명(권한 세트 및 역할)에 적용됩니다. 서비스는 새로운 기능이 시작되거나 새 작업을 사용할 수 있을 때 AWS 관리형 정책에 업데이트됩니다. 서비스는 AWS 관리형 정책에서 권한을 제거하지 않기 때문에 정책 업데이트로 인해 기존 권한이 손상되지 않습니다.

또한 AWS는 여러 서비스의 직무에 대한 관리형 정책을 지원합니다. 예를 들어 `ReadOnlyAccess` AWS 관리형 정책은 모든 AWS 서비스 및 리소스에 대한 읽기 전용 액세스 권한을 제공합니다. 서비스에서 새 기능을 시작하면 AWS가 새 작업 및 리소스에 대한 읽기 전용 권한을 추가합니다. 직무 정책의 목록과 설명은 *IAM 사용 설명서*의 [직무에 관한 AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)을 참조하세요.

**Topics**
+ [

## AWS 관리형 정책: AmazonRDSReadOnlyAccess
](#rds-security-iam-awsmanpol-AmazonRDSReadOnlyAccess)
+ [

## AWS 관리형 정책: AmazonRDSFullAccess
](#rds-security-iam-awsmanpol-AmazonRDSFullAccess)
+ [

## AWS 관리형 정책: AmazonRDSDataFullAccess
](#rds-security-iam-awsmanpol-AmazonRDSDataFullAccess)
+ [

## AWS 관리형 정책: AmazonRDSEnhancedMonitoringRole
](#rds-security-iam-awsmanpol-AmazonRDSEnhancedMonitoringRole)
+ [

## AWS 관리형 정책: AmazonRDSPerformanceInsightsReadOnly
](#rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsReadOnly)
+ [

## AWS 관리형 정책: AmazonRDSPerformanceInsightsFullAccess
](#rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsFullAccess)
+ [

## AWS 관리형 정책: AmazonRDSDirectoryServiceAccess
](#rds-security-iam-awsmanpol-AmazonRDSDirectoryServiceAccess)
+ [

## AWS 관리형 정책: AmazonRDSServiceRolePolicy
](#rds-security-iam-awsmanpol-AmazonRDSServiceRolePolicy)
+ [

## AWS 관리형 정책: AmazonRDSCustomServiceRolePolicy
](#rds-security-iam-awsmanpol-AmazonRDSCustomServiceRolePolicy)
+ [

## AWS 관리형 정책: AmazonRDSCustomInstanceProfileRolePolicy
](#rds-security-iam-awsmanpol-AmazonRDSCustomInstanceProfileRolePolicy)
+ [

## AWS 관리형 정책: AmazonRDSPreviewServiceRolePolicy
](#rds-security-iam-awsmanpol-AmazonRDSPreviewServiceRolePolicy)
+ [

## AWS 관리형 정책: AmazonRDSBetaServiceRolePolicy
](#rds-security-iam-awsmanpol-AmazonRDSBetaServiceRolePolicy)

## AWS 관리형 정책: AmazonRDSReadOnlyAccess
<a name="rds-security-iam-awsmanpol-AmazonRDSReadOnlyAccess"></a>

이 정책은 AWS Management Console을 통해 Amazon RDS에 대한 읽기 전용 액세스를 허용합니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `rds` - 보안 주체가 Amazon RDS 리소스를 설명하고 Amazon RDS 리소스의 태그를 나열하도록 허용합니다.
+ `cloudwatch` - 보안 주체가 Amazon CloudWatch 지표 통계를 가져오도록 허용합니다.
+ `ec2` - 보안 주체가 가용 영역 및 네트워킹 리소스를 설명하도록 허용합니다.
+ `logs` - 보안 주체가 로그 그룹의 CloudWatch Logs 로그 스트림을 설명하고 CloudWatch Logs 로그 이벤트를 가져오도록 허용합니다.
+ `devops-guru` - 보안 주체가 CloudFormation 스택 이름 또는 리소스 태그로 지정되는 Amazon DevOps Guru 적용 범위가 있는 리소스를 설명할 수 있습니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSReadOnlyAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSFullAccess
<a name="rds-security-iam-awsmanpol-AmazonRDSFullAccess"></a>

이 정책은 AWS Management Console을 통해 Amazon RDS에 대한 전체 액세스 권한을 제공합니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `rds` – 보안 주체에게 Amazon RDS에 대한 전체 액세스 권한을 허용합니다.
+ `application-autoscaling` - 보안 주체가 Application Auto Scaling 크기 조정 대상 및 정책을 설명하고 관리하도록 허용합니다.
+ `cloudwatch` - 보안 주체가 CloudWatch 지표 통계를 가져오고 CloudWatch 경보를 관리하도록 허용합니다.
+ `ec2` - 보안 주체가 가용 영역 및 네트워킹 리소스를 설명하도록 허용합니다.
+ `logs` - 보안 주체가 로그 그룹의 CloudWatch Logs 로그 스트림을 설명하고 CloudWatch Logs 로그 이벤트를 가져오도록 허용합니다.
+ `outposts` - 보안 주체가 AWS Outposts 인스턴스 유형을 가져오도록 허용합니다.
+ `pi` - 보안 주체가 성능 개선 도우미 지표를 가져오도록 허용합니다.
+ `sns` - 보안 주체에게 Amazon Simple Notification Service(Amazon SNS) 구독 및 주제를 허용하고 Amazon SNS 메시지를 게시하도록 허용합니다.
+ `devops-guru` - 보안 주체가 CloudFormation 스택 이름 또는 리소스 태그로 지정되는 Amazon DevOps Guru 적용 범위가 있는 리소스를 설명할 수 있습니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSFullAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSDataFullAccess
<a name="rds-security-iam-awsmanpol-AmazonRDSDataFullAccess"></a>

이 정책은 특정 AWS 계정의 Aurora Serverless 클러스터에서 데이터 API 및 쿼리 편집기를 사용할 수 있는 전체 액세스 권한을 허용합니다. 이 정책은 AWS 계정가 AWS Secrets Manager에서 암호 값을 가져오도록 허용합니다.

`AmazonRDSDataFullAccess` 정책을 IAM ID에 연결할 수 있습니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `dbqms` - 보안 주체에게 쿼리를 액세스, 생성, 삭제, 설명, 업데이트를 할 수 있도록 허용합니다. Database Query Metadata Service(`dbqms`)는 내부 전용 서비스입니다. Amazon RDS를 포함한 여러 AWS 서비스에 사용되는 AWS Management Console의 쿼리 편집기에 대해 최근 쿼리와 저장된 쿼리를 제공합니다.
+ `rds-data` - 보안 주체가 Aurora Serverless 데이터베이스에 SQL 문을 실행하도록 허용합니다.
+ `secretsmanager` - 보안 주체가 에서 암호 값을 가져오도록 허용합니다.AWS Secrets Manager

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSDataFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSDataFullAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSEnhancedMonitoringRole
<a name="rds-security-iam-awsmanpol-AmazonRDSEnhancedMonitoringRole"></a>

이 정책은 Amazon RDS Enhanced Monitoring을 위해 Amazon CloudWatch Logs 로그에 대한 액세스를 제공합니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `logs` - 보안 주체가 CloudWatch Logs 로그 그룹 및 보존 정책을 생성하고 로그 그룹의 CloudWatch Logs 로그 스트림을 생성 및 설명하도록 허용합니다. 또한 보안 주체가 CloudWatch Logs 로그 이벤트를 배치하고 가져오도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSEnhancedMonitoringRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSEnhancedMonitoringRole.html)을 참조하세요.

## AWS 관리형 정책: AmazonRDSPerformanceInsightsReadOnly
<a name="rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsReadOnly"></a>

이 정책은 Amazon RDS DB 인스턴스 및 Amazon Aurora DB 클러스터에 대한 Amazon RDS 성능 개선 도우미에 읽기 전용 액세스를 제공합니다.

이제 이 정책에 `Sid`(문 ID)가 정책 문의 식별자로 포함됩니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `rds` - 보안 주체가 Amazon RDS DB 인스턴스와 Amazon Aurora DB 클러스터를 설명하도록 허용합니다.
+ `pi` - 보안 주체가 Amazon RDS 성능 개선 도우미 API를 호출하고 성능 개선 도우미 지표에 액세스하도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSPerformanceInsightsReadOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSPerformanceInsightsReadOnly.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSPerformanceInsightsFullAccess
<a name="rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsFullAccess"></a>

이 정책은 Amazon RDS DB 인스턴스 및 Amazon Aurora DB 클러스터에 대해 Amazon RDS 성능 개선 도우미에 전체 액세스를 제공합니다.

이제 이 정책에 `Sid`(문 ID)가 정책 문의 식별자로 포함됩니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `rds` - 보안 주체가 Amazon RDS DB 인스턴스와 Amazon Aurora DB 클러스터를 설명하도록 허용합니다.
+ `pi` - 보안 주체가 Amazon RDS 성능 개선 도우미 API를 호출하고 성능 분석 보고서를 생성, 확인 및 삭제하도록 허용합니다.
+ `cloudwatch` - 보안 주체가 모든 Amazon CloudWatch 지표를 나열하고 지표 데이터와 통계를 가져오도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 AWS 관리형 정책 참조 가이드**의 [AmazonRDSPerformanceInsightsFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSPerformanceInsightsFullAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSDirectoryServiceAccess
<a name="rds-security-iam-awsmanpol-AmazonRDSDirectoryServiceAccess"></a>

이 정책은 Amazon RDS에서 Directory Service를 호출하도록 허용합니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `ds` - 보안 주체가 Directory Service 디렉터리를 설명하고 Directory Service 디렉터리에 대한 권한 부여를 제어하도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSDirectoryServiceAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSDirectoryServiceAccess.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSServiceRolePolicy
<a name="rds-security-iam-awsmanpol-AmazonRDSServiceRolePolicy"></a>

`AmazonRDSServiceRolePolicy` 정책을 IAM 엔터티에 연결할 수 없습니다. 이 정책은 Amazon RDS에 사용자를 대신하여 작업을 수행할 수 있도록 하는 서비스 연결 역할에 연결됩니다. 자세한 내용은 [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) 섹션을 참조하세요.

## AWS 관리형 정책: AmazonRDSCustomServiceRolePolicy
<a name="rds-security-iam-awsmanpol-AmazonRDSCustomServiceRolePolicy"></a>

`AmazonRDSCustomServiceRolePolicy` 정책을 IAM 엔터티에 연결할 수 없습니다. 이 정책은 Amazon RDS가 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출할 수 있는 서비스 연결 역할에 연결되어 있습니다.

이 정책에는 다음 권한이 포함되어 있습니다.
+ `ec2` ‐ RDS Custom이 특정 시점 복원 기능을 제공하는 DB 인스턴스에서 백업 작업을 수행할 수 있도록 허용합니다.
+ `secretsmanager` ‐ RDS Custom이 RDS Custom으로 만든 DB 인스턴스별 암호를 관리할 수 있도록 허용합니다.
+ `cloudwatch` ‐ RDS Custom이 CloudWatch 에이전트를 통해 DB 인스턴스 지표와 로그를 CloudWatch에 업로드할 수 있도록 허용합니다.
+ `events`, `sqs` ‐ RDS Custom이 DB 인스턴스에 대한 상태 정보를 보내고 받을 수 있도록 허용합니다.
+ `cloudtrail` ‐ RDS Custom이 DB 인스턴스에 대한 변경 이벤트를 수신하도록 허용
+ `servicequotas` ‐ RDS Custom이 DB 인스턴스와 관련된 서비스 할당량을 읽을 수 있도록 허용
+ `ssm` ‐ RDS Custom이 DB 인스턴스의 기본 EC2 인스턴스를 관리할 수 있도록 허용
+ `rds` ‐ RDS Custom이 DB 인스턴스의 RDS 리소스를 관리하도록 허용
+ `iam` ‐ RDS Custom이 인스턴스 프로파일을 검증하고 DB 인스턴스의 기본 EC2 인스턴스에 연결할 수 있도록 허용

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSCustomServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomServiceRolePolicy.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSCustomInstanceProfileRolePolicy
<a name="rds-security-iam-awsmanpol-AmazonRDSCustomInstanceProfileRolePolicy"></a>

`AmazonRDSCustomInstanceProfileRolePolicy`를 IAM 엔터티에 연결하면 안 됩니다. Amazon RDS Custom DB 인스턴스에 다양한 자동화 작업 및 데이터베이스 관리 작업을 수행할 수 있는 권한을 부여하는 데 사용되는 인스턴스 프로파일 역할에만 연결해야 합니다. RDS Custom 인스턴스 생성 중에 인스턴스 프로파일을 `custom-iam-instance-profile` 파라미터로 전달하면 RDS Custom에서 해당 인스턴스 프로파일을 DB 인스턴스에 연결합니다.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `ssm`, `ssmmessages`, `ec2messages` ‐ RDS Custom이 Systems Manager를 통해 DB 인스턴스에서 통신하고, 자동화를 실행하고, 에이전트를 유지 관리할 수 있도록 허용합니다.
+ `ec2`, `s3` ‐ RDS Custom이 특정 시점 복원 기능을 제공하는 DB 인스턴스에서 백업 작업을 수행할 수 있도록 허용합니다.
+ `secretsmanager` ‐ RDS Custom이 RDS Custom으로 만든 DB 인스턴스별 암호를 관리할 수 있도록 허용합니다.
+ `cloudwatch`, `logs` ‐ RDS Custom이 CloudWatch 에이전트를 통해 DB 인스턴스 지표와 로그를 CloudWatch에 업로드할 수 있도록 허용합니다.
+ `events`, `sqs` ‐ RDS Custom이 DB 인스턴스에 대한 상태 정보를 보내고 받을 수 있도록 허용합니다.
+ `kms` ‐ RDS Custom이 인스턴스별 KMS 키를 사용하여 RDS Custom이 관리하는 암호 및 S3 개체의 암호화를 수행할 수 있도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 **AWS 관리형 정책 참조 가이드의 [AmazonRDSCustomInstanceProfileRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomInstanceProfileRolePolicy.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSPreviewServiceRolePolicy
<a name="rds-security-iam-awsmanpol-AmazonRDSPreviewServiceRolePolicy"></a>

`AmazonRDSPreviewServiceRolePolicy`를 IAM 엔터티에 연결하면 안 됩니다. 이 정책은 Amazon RDS가 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출할 수 있는 서비스 연결 역할에 연결되어 있습니다. 자세한 내용은 [Amazon RDS 미리 보기에 대한 서비스 연결 역할](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-rdspreview) 섹션을 참조하세요.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `ec2` ‐ 보안 주체가 가용 영역 및 네트워킹 리소스를 설명하도록 허용합니다.
+ `secretsmanager` - 보안 주체가 에서 암호 값을 가져오도록 허용합니다.AWS Secrets Manager
+ `cloudwatch`, `logs` ‐ Amazon RDS가 CloudWatch 에이전트를 통해 DB 인스턴스 지표와 로그를 CloudWatch에 업로드할 수 있도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSPreviewServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSPreviewServiceRolePolicy.html)를 참조하세요.

## AWS 관리형 정책: AmazonRDSBetaServiceRolePolicy
<a name="rds-security-iam-awsmanpol-AmazonRDSBetaServiceRolePolicy"></a>

`AmazonRDSBetaServiceRolePolicy`를 IAM 엔터티에 연결하면 안 됩니다. 이 정책은 Amazon RDS가 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출할 수 있는 서비스 연결 역할에 연결되어 있습니다. 자세한 내용은 [Amazon RDS 베타에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-rdsbeta) 섹션을 참조하세요.

**권한 세부 정보**

이 정책에는 다음 권한이 포함되어 있습니다.
+ `ec2` ‐ Amazon RDS가 특정 시점 복원 기능을 제공하는 DB 인스턴스에서 백업 작업을 수행할 수 있도록 허용합니다.
+ `secretsmanager` ‐ Amazon RDS가 Amazon RDS로 만든 DB 인스턴스별 암호를 관리할 수 있도록 허용합니다.
+ `cloudwatch`, `logs` ‐ Amazon RDS가 CloudWatch 에이전트를 통해 DB 인스턴스 지표와 로그를 CloudWatch에 업로드할 수 있도록 허용합니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSBetaServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSBetaServiceRolePolicy.html)를 참조하세요.

# AWS 관리형 정책에 대한 Amazon RDS 업데이트
<a name="rds-manpol-updates"></a>

이 서비스가 이러한 변경 내용을 추적하기 시작한 이후부터 Amazon RDS의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 Amazon RDS [문서 기록](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/WhatsNew.html) 페이지에서 RSS 피드를 구독하세요.




| 변경 사항 | 설명 | 날짜 | 
| --- | --- | --- | 
| [AWS 관리형 정책: AmazonRDSPreviewServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSPreviewServiceRolePolicy) - 기존 정책에 대한 업데이트 |  Amazon RDS는 `AWSServiceRoleForRDSPreview` 서비스 연결 역할의 `AmazonRDSPreviewServiceRolePolicy`에서 `sns:Publish` 권한을 제거했습니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSPreviewServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSPreviewServiceRolePolicy) 단원을 참조하십시오. | 2024년 8월 7일 | 
| [AWS 관리형 정책: AmazonRDSBetaServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSBetaServiceRolePolicy) - 기존 정책에 대한 업데이트 |  Amazon RDS는 `AWSServiceRoleForRDSBeta` 서비스 연결 역할의 `AmazonRDSBetaServiceRolePolicy`에서 `sns:Publish` 권한을 제거했습니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSBetaServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSBetaServiceRolePolicy) 단원을 참조하십시오.  | 2024년 8월 7일 | 
| [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) - 기존 정책에 대한 업데이트 |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 권한을 통해 RDS Custom은 다른 AWS 리전의 Amazon RDS 서비스와 통신하고 EC2 이미지를 복사할 수 있습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  | 2024년 7월 18일 | 
| [AWS 관리형 정책: AmazonRDSServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSServiceRolePolicy) - 기존 정책에 대한 업데이트 |  Amazon RDS는 ` AWSServiceRoleForRDS` 서비스 연결 역할의 `AmazonRDSServiceRolePolicy`에서 `sns:Publish` 권한을 제거했습니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSServiceRolePolicy) 단원을 참조하십시오.  | 2024년 7월 2일 | 
| [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) - 기존 정책에 대한 업데이트 |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 이 새 권한을 통해 RDS Custom이 RDS Custom 인스턴스에 인스턴스 프로파일로 서비스 역할을 연결할 수 있습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  | 2024년 4월 19일 | 
| [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) - 기존 정책에 대한 업데이트 |  Amazon RDS는 RDS Custom for SQL Server가 기본 데이터베이스 호스트 인스턴스 유형을 수정할 수 있도록 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새 권한을 추가했습니다. 또한 RDS는 데이터베이스 호스트의 인스턴스 유형 정보를 가져올 수 있는 `ec2:DescribeInstanceTypes` 권한을 추가했습니다. 자세한 내용은 [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) 단원을 참조하십시오.  | 2024년 4월 8일 | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) - 새 정책  | Amazon RDS는 RDS Custom이 EC2 인스턴스 프로파일을 통해 자동화 작업 및 데이터베이스 관리 작업을 수행할 수 있도록 AmazonRDSCustomInstanceProfileRolePolicy로 이름이 지정된 새 관리형 정책을 추가했습니다. 자세한 내용은 [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) 단원을 참조하십시오. | 2024년 2월 27일 | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트 | Amazon RDS는 `AWSServiceRoleForRDS` 서비스 연결 역할의 `AmazonRDSServiceRolePolicy`에 새로운 문 ID를 추가했습니다. 자세한 내용은 [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) 단원을 참조하십시오.  |  2024년 1월 19일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) - 기존 정책에 대한 업데이트  |  `AmazonRDSPerformanceInsightsReadOnly` 및 `AmazonRDSPerformanceInsightsFullAccess` 관리형 정책에서 이제 정책 문에 `Sid`(문 ID)를 식별자로 포함합니다. 자세한 정보는 [AWS 관리형 정책: AmazonRDSPerformanceInsightsReadOnly](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsReadOnly) 및 [AWS 관리형 정책: AmazonRDSPerformanceInsightsFullAccess](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSPerformanceInsightsFullAccess) 섹션을 참조하세요.  |  2023년 10월 23일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 이 새로운 권한을 통해 RDS Custom for Oracle이 EventBridge 관리형 규칙을 생성, 수정 및 삭제할 수 있습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 9월 20일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) - 기존 정책에 대한 업데이트  |  Amazon RDS에서 `AmazonRDSFullAccess` 관리형 정책에 대한 새로운 권한을 추가했습니다. 이 권한을 통해 일정 기간 동안 성능 분석 보고서를 생성, 확인 및 삭제할 수 있습니다. 성능 개선 도우미의 액세스 정책 구성에 대한 자세한 내용은 [Performance Insights에 대한 액세스 정책 구성](USER_PerfInsights.access-control.md) 섹션을 참조하세요.  |  2023년 8월 17일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) – 신규 정책 및 기존 정책에 대한 업데이트  |  Amazon RDS에서 `AmazonRDSPerformanceInsightsReadOnly` 관리형 정책 및 `AmazonRDSPerformanceInsightsFullAccess`라는 신규 관리형 정책에 대한 새로운 권한을 추가했습니다. 이러한 권한을 통해 일정 기간 동안 성능 개선 도우미를 분석하고, 권장 사항과 함께 분석 결과를 보고, 보고서를 삭제할 수 있습니다. 성능 개선 도우미의 액세스 정책 구성에 대한 자세한 내용은 [Performance Insights에 대한 액세스 정책 구성](USER_PerfInsights.access-control.md) 섹션을 참조하세요.  |  2023년 8월 16일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 이 새로운 권한은 RDS Custom for Oracle이 DB 스냅샷을 사용하도록 허용합니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 6월 23일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 이 새로운 권한은 RDS Custom for Oracle이 DB 스냅샷을 사용하도록 허용합니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 6월 23일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. 이 새로운 권한은 RDS Custom이 네트워크 인터페이스를 생성하도록 허용합니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 5월 30일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. RDS Custom은 이러한 새 권한을 사용하여 Amazon EBS를 호출해 스토리지 할당량을 확인할 수 있습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 4월 18일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS Custom에 Amazon SQS와의 통합을 위해 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 대한 새로운 권한이 추가되었습니다. RDS Custom을 사용하려면 Amazon SQS와 통합하여 고객 계정의 SQS 대기열을 생성하고 관리해야 합니다. SQS 대기열 이름은 `do-not-delete-rds-custom-[identifier]` 형식을 따르며 `Amazon RDS Custom`이라는 태그가 지정됩니다. RDS Custom이 인스턴스에 연결된 볼륨에 대한 백업을 생성할 수 있도록 `ec2:CreateSnapshot`에 대한 권한도 추가되었습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2023년 4월 6일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) -기존 정책 업데이트  |  Amazon RDS에서는 새로운 Amazon CloudWatch 네임스페이스 `ListMetrics`를 `AmazonRDSFullAccess` 및 `AmazonRDSReadOnlyAccess`에 추가했습니다. 이 네임스페이스는 Amazon RDS가 특정한 리소스 사용량 지표를 나열하는 데 필요합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 리소스에 대한 액세스 권한 관리 개요](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-access-control-overview-cw.html)를 참조하세요.  |  2023년 4월 4일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) -기존 정책 업데이트  |  Amazon RDS는 RDS 콘솔에서 Amazon DevOps Guru를 사용할 수 있도록 `AmazonRDSFullAccess` 및 `AmazonRDSReadOnlyAccess` 관리형 정책에 새로운 권한을 추가했습니다. 이 권한은 DevOps Guru의 결과를 표시하는 데 필요합니다. 자세한 내용은 [AWS 관리형 정책에 대한 Amazon RDS 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-manpol-updates.html)를 참조하세요.  |  2023년 3월 30일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 AWS Secrets Manager와의 통합을 위해 `AWSServiceRoleForRDS` 서비스 연결 역할의 `AmazonRDSServiceRolePolicy`에 새로운 권한을 추가했습니다. Secrets Manager에서 마스터 사용자 암호를 관리하려면 RDS와 Secrets Manager의 통합이 필요합니다. 암호는 예약된 명명 규칙을 사용하며 고객 업데이트를 제한합니다. 자세한 내용은 [Amazon RDS 및 AWS Secrets Manager를 통한 암호 관리](rds-secrets-manager.md) 단원을 참조하십시오.  |  2022년 12월 22일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS는 `AWSServiceRoleForRDSCustom` 서비스 연결 역할의 `AmazonRDSCustomServiceRolePolicy`에 새로운 권한을 추가했습니다. RDS Custom은 DB 클러스터를 지원합니다. 정책의 이러한 새 권한을 통해 RDS Custom이 DB 클러스터를 대신하여 AWS 서비스를 호출할 수 있습니다. 자세한 내용은 [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) 단원을 참조하십시오.  |  2022년 11월 9일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) - 기존 정책에 대한 업데이트  |  Amazon RDS는 AWS Secrets Manager와의 통합을 위해 `AWSServiceRoleForRDS` 서비스 연결 역할에 새로운 권한을 추가했습니다. SSRS(SQL Server Reporting Services) 이메일이 RDS에서 작동하려면 Secrets Manager와 통합해야 합니다. SSRS 이메일은 고객을 대신하여 암호를 생성합니다. 암호는 예약된 명명 규칙을 사용하며 고객 업데이트를 제한합니다. 자세한 정보는 [SSRS 이메일을 사용하여 보고서 보내기](SSRS.Email.md)을 참조하세요.  |  2022년 8월 26일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS에서는 `PutMetricData`용 `AmazonRDSPreviewServiceRolePolicy`에 새로운 Amazon CloudWatch 네임스페이스를 추가했습니다. 이 네임스페이스는 Amazon RDS가 리소스 사용량 지표를 게시하는 데 필요합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [조건 키를 사용하여 CloudWatch 네임스페이스에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-cw-condition-keys-namespace.html)을 참조하세요.  |  2022년 6월 7일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS에서는 `PutMetricData`용 `AmazonRDSBetaServiceRolePolicy`에 새로운 Amazon CloudWatch 네임스페이스를 추가했습니다. 이 네임스페이스는 Amazon RDS가 리소스 사용량 지표를 게시하는 데 필요합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [조건 키를 사용하여 CloudWatch 네임스페이스에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-cw-condition-keys-namespace.html)을 참조하세요.  |  2022년 6월 7일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS에서는 `PutMetricData`용 `AWSServiceRoleForRDS`에 새로운 Amazon CloudWatch 네임스페이스를 추가했습니다. 이 네임스페이스는 Amazon RDS가 리소스 사용량 지표를 게시하는 데 필요합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [조건 키를 사용하여 CloudWatch 네임스페이스에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-cw-condition-keys-namespace.html)을 참조하세요.  |  2022년 4월 22일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  고객 소유 IP 풀 및 로컬 게이트웨이 라우팅 테이블(LGW-RTB)에 대한 권한을 관리하기 위해 Amazon RDS에서 `AWSServiceRoleForRDS` 서비스 연결 역할에 새 권한을 추가했습니다. 이 권한은 RDS on Outposts가 Outposts의 여러 로컬 네트워크에서 다중 AZ 복제를 수행하는 데 필요합니다. 자세한 내용은 [AWS Outposts의 Amazon RDS 다중 AZ 배포 작업](rds-on-outposts.maz.md) 단원을 참조하십시오.  |  2022년 4월 19일  | 
|  [ID 기반 정책](UsingWithRDS.IAM.md#security_iam_access-manage-id-based-policies) -기존 정책 업데이트  |  LGW-RTB에 대한 권한을 설명하기 위해 Amazon RDS에서 `AmazonRDSFullAccess` 관리형 정책에 새 권한을 추가했습니다. 이 권한은 RDS on Outposts가 Outposts의 여러 로컬 네트워크에서 다중 AZ 복제를 수행하기 위해 권한을 설명하는 데 필요합니다. 자세한 내용은 [AWS Outposts의 Amazon RDS 다중 AZ 배포 작업](rds-on-outposts.maz.md) 단원을 참조하십시오.  |  2022년 4월 19일  | 
|  [AWSAmazon RDS에 대한 관리형 정책](rds-security-iam-awsmanpol.md) - 새 정책  |  Amazon RDS에서는 Amazon RDS가 DB 인스턴스를 대신하여 AWS를 호출할 수 있도록 `AmazonRDSPerformanceInsightsReadOnly`라는 새로운 관리형 정책을 추가했습니다. 성능 개선 도우미의 액세스 정책 구성에 대한 자세한 내용은 [Performance Insights에 대한 액세스 정책 구성](USER_PerfInsights.access-control.md) 섹션을 참조하세요.  |  2022년 3월 10일  | 
|  [Amazon RDS에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#service-linked-role-permissions) -기존 정책 업데이트  |  Amazon RDS에서는 `PutMetricData`용 `AWSServiceRoleForRDS`에 새로운 Amazon CloudWatch 네임스페이스를 추가했습니다. Amazon DocumentDB(MongoDB 호환) 및 Amazon Neptune에서 CloudWatch 지표를 게시하려면 이러한 네임스페이스가 필요합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [조건 키를 사용하여 CloudWatch 네임스페이스에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/iam-cw-condition-keys-namespace.html)을 참조하세요.  |  2022년 3월 4일  | 
|  [Amazon RDS Custom에 대한 서비스 연결 역할 권한](UsingWithRDS.IAM.ServiceLinkedRoles.md#slr-permissions-custom) - 새 정책  |  Amazon RDS에서는 RDS Custom이 DB 인스턴스를 대신하여 AWS 서비스를 호출할 수 있도록 `AWSServiceRoleForRDSCustom`라는 새로운 서비스 연결 역할을 추가했습니다.  |  2021년 10월 26일  | 
|  Amazon RDS에서 변경 사항 추적 시작  |  Amazon RDS가 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  |  2021년 10월 26일  | 

# 교차 서비스 혼동된 대리자 문제 방지
<a name="cross-service-confused-deputy-prevention"></a>

*혼동된 대리자 문제*는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에 작업을 수행하도록 강요할 수 있는 보안 문제입니다. AWS에서는 교차 서비스 가장으로 인해 혼동된 대리자 문제가 발생할 수 있습니다.

교차 서비스 가장은 한 서비스(*직접 호출하는 서비스*)가 다른 서비스(*직접 호출되는 서비스*)를 직접 호출할 때 발생할 수 있습니다. 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 호출 서비스를 조작할 수 있습니다. 이를 방지하기 위해 AWS에서는 계정의 리소스에 대한 액세스 권한이 부여된 서비스 보안 주체를 사용하여 모든 서비스에 대한 데이터를 보호하는 데 도움이 되는 도구를 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 참조하세요.

Amazon RDS가 다른 서비스에 제공하는 리소스에 대한 권한을 제한하려면 리소스 정책에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다.

경우에 따라 `aws:SourceArn` 값에 계정 ID가 포함되지 않습니다. Amazon S3 버킷에 Amazon 리소스 이름(ARN)을 사용하는 경우를 예로 들 수 있습니다. 이러한 경우 두 전역 조건 컨텍스트 키를 모두 사용하여 권한을 제한해야 합니다. 경우에 따라 두 전역 조건 컨텍스트 키를 모두 사용하고 `aws:SourceArn` 값에 계정 ID가 포함됩니다. 이러한 경우 `aws:SourceAccount` 값과 `aws:SourceArn`의 계정이 동일한 정책 문에서 사용될 때 동일한 계정 ID를 사용하는지 확인합니다. 하나의 리소스만 교차 서비스 액세스와 연결되게 하려는 경우 `aws:SourceArn`을 사용합니다. 지정된 AWS 계정의 모든 리소스가 교차 서비스 사용과 연결되게 하려는 경우 `aws:SourceAccount`를 사용합니다.

`aws:SourceArn`의 값이 Amazon RDS 리소스 유형에 대한 ARN인지 확인하세요. 자세한 내용은 [Amazon RDS의 Amazon 리소스 이름(ARN)](USER_Tagging.ARN.md) 섹션을 참조하세요.

혼동된 대리인 문제로부터 보호하는 가장 효과적인 방법은 리소스의 전체 ARN이 포함된 `aws:SourceArn`글로벌 조건 컨텍스트 키를 사용하는 것입니다. 경우에 따라 리소스의 전체 ARN을 모르거나 여러 리소스를 지정하고 있을 수 있습니다. 이러한 경우 ARN의 알 수 없는 부분에 대해 와일드카드(`*`)와 함께 `aws:SourceArn` 전역 컨텍스트 조건 키를 사용하세요. 예를 들면, `arn:aws:rds:*:123456789012:*`입니다.

다음 예에서는 Amazon RDS에서 `aws:SourceArn` 및 `aws:SourceAccount` 전역 조건 컨텍스트 키를 사용하여 혼동된 대리자 문제를 방지하는 방법을 보여줍니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Sid": "ConfusedDeputyPreventionExamplePolicy",
    "Effect": "Allow",
    "Principal": {
      "Service": "rds.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:rds:us-east-1:123456789012:db:mydbinstance"
      },
      "StringEquals": {
        "aws:SourceAccount": "123456789012"
      }
    }
  }
}
```

------

`aws:SourceArn` 및 `aws:SourceAccount` 전역 조건 컨텍스트 키를 사용하는 정책의 추가 예는 다음 섹션을 참조하세요.
+ [Amazon SNS 주제에 알림을 게시할 권한 부여](USER_Events.GrantingPermissions.md)
+ [기본 백업 및 복원을 위한 IAM 역할 수동으로 만들기](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)
+ [SQL Server DB 인스턴스에 대한 Windows 인증 설정](USER_SQLServerWinAuth.SettingUp.md)
+ [RDS for SQL Server와 S3를 통합하기 위한 사전 요구 사항](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [수동으로 SQL Server Audit에 대한 IAM 역할 생성](Appendix.SQLServer.Options.Audit.IAM.md)
+ [Amazon S3와 RDS for Oracle 통합을 위한 IAM 권한 구성](oracle-s3-integration.preparing.md)
+ [Amazon S3 버킷에 대한 액세스 권한 설정](USER_PostgreSQL.S3Import.AccessPermission.md)(PostgreSQL 가져오기)
+ [Amazon S3 버킷에 대한 액세스 권한 설정](postgresql-s3-export-access-bucket.md)(PostgreSQL 내보내기)

# MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증
<a name="UsingWithRDS.IAMDBAuth"></a>

AWS Identity and Access Management(IAM) 데이터베이스 인증을 사용하여 DB 인스턴스에 인증할 수 있습니다. IAM 데이터베이스 인증은 MariaDB, MySQL, PostgreSQL과 함께 작동합니다. 이러한 인증 방식은 DB 인스턴스에 연결할 때 암호를 사용할 필요 없습니다. 대신에 인증 토큰을 사용합니다.

*인증 토큰*이란 요청이 있을 때 Amazon RDS가 생성하는 고유 문자열입니다. 인증 토큰은 AWS 서명 버전 4를 통해 생성됩니다. 각 토큰의 수명은 15분입니다. 인증을 외부에서 IAM을 사용해 관리하기 때문에 사용자 자격 증명을 데이터베이스에 저장할 필요도 없습니다. 또한 표준 데이터베이스 인증 방식도 사용 가능합니다. 토큰은 인증에만 사용되며 설정된 후에는 세션에 영향을 주지 않습니다.

IAM 데이터베이스 인증은 다음과 같은 이점이 있습니다.
+ 데이터베이스를 오가는 네트워크 트래픽은 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security)를 통해 암호화됩니다. Amazon RDS에서 SSL/TLS를 사용하는 방법에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하십시오.
+ 데이터베이스 리소스에 대한 액세스는 DB 인스턴스에서 개별적으로 관리할 필요 없이 IAM을 통해 중앙에서 관리할 수 있습니다.
+ Amazon EC2에서 실행되는 애플리케이션의 경우, 암호가 아닌 EC2 인스턴스용 프로파일 자격 증명을 사용해 데이터베이스에 액세스하기 때문에 보안을 더욱 강화하는 효과가 있습니다.

일반적으로 애플리케이션에서 초당 200개 미만의 연결을 생성하고 애플리케이션 코드에서 사용자 이름과 암호를 직접 관리하지 않으려는 경우 IAM 데이터베이스 인증을 사용하는 것이 좋습니다.

Amazon Web Services(AWS) JDBC 드라이버는 IAM 데이터베이스 인증을 지원합니다. 자세한 내용은 [Amazon Web Services (AWS) JDBC Driver GitHub repository](https://github.com/aws/aws-advanced-jdbc-wrapper)에서 [AWS IAM Authentication Plugin](https://github.com/aws/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheIamAuthenticationPlugin.md)을 참조하세요.

Amazon Web Services(AWS) Python 드라이버는 IAM 데이터베이스 인증을 지원합니다. 자세한 내용은 [Amazon Web Services (AWS) Python Driver GitHub repository](https://github.com/aws/aws-advanced-python-wrapper)에서 [AWS IAM Authentication Plugin](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheIamAuthenticationPlugin.md)을 참조하세요.

다음 주제를 탐색하여 DB 인증을 위한 IAM을 설정하는 프로세스를 알아봅니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)
+ [IAM 인증을 사용하여 DB 인스턴스에 연결](UsingWithRDS.IAMDBAuth.Connecting.md) 

## 리전 및 버전 사용 가능 여부
<a name="UsingWithRDS.IAMDBAuth.Availability"></a>

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전에 따라 다릅니다. Amazon RDS 및 IAM 데이터베이스 인증을 통한 엔진, 버전 및 리전 가용성에 대한 자세한 내용은 [Amazon RDS에서 IAM 데이터베이스 인증을 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.IamDatabaseAuthentication.md) 섹션을 참조하세요.

## CLI 및 SDK 지원
<a name="UsingWithRDS.IAMDBAuth.cli-sdk"></a>

[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/rds/generate-db-auth-token.html) 및 다음 언어별 AWS SDK에서 IAM 데이터베이스 인증을 사용할 수 있습니다.
+ [AWS SDK for .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/RDS/TRDSAuthTokenGenerator.html)
+ [AWS SDK for C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/class_aws_1_1_r_d_s_1_1_r_d_s_client.html#ae134ffffed5d7672f6156d324e7bd392)
+ [AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/api/service/rds/#pkg-overview)
+ [AWS SDK for Java](https://docs.aws.amazon.com/sdk-for-java/latest/reference/software/amazon/awssdk/services/rds/RdsUtilities.html)
+ [AWS SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_rds_signer.html)
+ [AWS SDK for PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Rds.AuthTokenGenerator.html)
+ [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#RDS.Client.generate_db_auth_token)
+ [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/RDS/AuthTokenGenerator.html)

## IAM 데이터베이스 인증 방식의 제한 사항
<a name="UsingWithRDS.IAMDBAuth.Limitations"></a>

IAM 데이터베이스 인증을 사용하는 경우, 다음 한도가 적용됩니다.
+ 현재 IAM 데이터베이스 인증은 모든 전역 조건 컨텍스트 키를 지원하지 않습니다.

  전역 조건 컨텍스트 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.
+ PostgreSQL의 경우 IAM 역할(`rds_iam`)이 사용자(마스터 사용자 RDS 포함)에 추가되면 IAM 인증이 암호 인증보다 우선하므로, 사용자는 IAM 사용자로 로그인해야 합니다.
+ PostgreSQL의 경우 Amazon RDS는 IAM 및 Kerberos 인증 방법을 모두 동시에 활성화하는 것을 지원하지 않습니다.
+ PostgreSQL의 경우 IAM 인증을 사용하여 복제 연결을 설정할 수 없습니다.
+ 인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.
+ CloudWatch와 CloudTrail은 IAM 인증을 로깅하지 않습니다. 이러한 서비스는 데이터베이스 연결을 활성화하도록 IAM 역할을 승인하는 `generate-db-auth-token` API 직접 호출을 추적하지 않습니다.
+ IAM DB 권한 부여에는 데이터베이스 인스턴스의 컴퓨팅 리소스가 필요합니다. 신뢰할 수 있는 연결을 위해 데이터베이스에 300MiB 및 1,000MiB 사이의 추가 메모리가 있어야 합니다. 워크로드에 필요한 메모리를 보려면 IAM DB 인증을 사용하기 전과 후에 확장 모니터링 프로세스 목록에서 RDS 프로세스에 대한 RES 열을 비교합니다. [RDS 콘솔에서 OS 지표 보기](USER_Monitoring.OS.Viewing.md)을(를) 참조하세요.

  버스트 가능 클래스 인스턴스를 사용하는 경우 버퍼 및 캐시와 같은 다른 파라미터에서 사용되는 메모리를 동일한 양만큼 줄여 메모리가 부족하지 않도록 합니다.
+ 엔진에 상관없이 RDS on Outposts에서는 IAM DB 인증이 지원되지 않습니다.

## IAM 데이터베이스 인증에 대한 권장 사항
<a name="UsingWithRDS.IAMDBAuth.ConnectionsPerSecond"></a>

IAM 데이터베이스 인증을 사용할 경우 다음을 따르는 게 좋습니다.
+ 애플리케이션에 초당 200개 미만의 새 IAM 데이터베이스 인증 연결이 필요한 경우에는 IAM 데이터베이스 인증 방식을 사용합니다.

  Amazon RDS에서 작동하는 데이터베이스 엔진은 초당 인증 횟수에 제한이 없습니다. 하지만 IAM 데이터베이스 인증 방식을 사용할 때는 애플리케이션이 인증 토큰을 생성해야 합니다. 이렇게 생성된 토큰은 애플리케이션이 DB 인스턴스에 연결하는 데 사용됩니다. 초당 허용되는 새 연결의 최대 수를 초과하면 IAM 데이터베이스 인증에 오버헤드가 추가로 발생하여 연결 병목 현상이 발생할 수 있습니다.

  지속적인 연결 생성을 줄이려면 애플리케이션에서 연결 풀링을 사용하는 것이 좋습니다. 이렇게 하면 IAM DB 인증으로 인한 오버헤드를 줄이고 애플리케이션이 기존 연결을 재사용할 수 있습니다. 또는 이러한 사용 사례에 RDS 프록시를 사용하는 것도 좋습니다. RDS 프록시에는 추가 비용이 부과됩니다. [RDS 프록시 요금](https://aws.amazon.com/rds/proxy/pricing/)을 참조하세요.
+ IAM 데이터베이스 인증 토큰의 크기는 IAM 태그 수, IAM 서비스 정책, ARN 길이, 기타 IAM 및 데이터베이스 속성 등 여러 요소에 따라 달라집니다. 이 토큰의 최소 크기는 일반적으로 약 1KB지만 더 클 수도 있습니다. 이 토큰은 IAM 인증을 사용하는 데이터베이스에 대한 연결 문자열에서 암호로 사용되므로 데이터베이스 드라이버(예: ODBC) 및/또는 어떤 도구도 크기로 인해 이 토큰을 제한하거나 자르지 않도록 해야 합니다. 토큰이 잘리면 데이터베이스와 IAM에서 수행하는 인증 검증이 실패합니다.
+ IAM 데이터베이스 인증 토큰을 생성할 때 임시 보안 인증 정보를 사용하는 경우, IAM 데이터베이스 인증 토큰을 사용하여 연결을 요청할 때 임시 보안 인증 정보가 여전히 유효해야 합니다.

## 지원되지 않는 AWS 전역 조건 컨텍스트 키
<a name="UsingWithRDS.IAMDBAuth.GlobalContextKeys"></a>

 IAM 데이터베이스 인증은 다음과 같은 AWS 전역 조건 컨텍스트 키의 하위 집합을 지원하지 않습니다.
+ `aws:Referer`
+ `aws:SourceIp`
+ `aws:SourceVpc`
+ `aws:SourceVpce`
+ `aws:UserAgent`
+ `aws:VpcSourceIp`

자세한 내용은 *IAM 사용 설명서*의 [AWS 글로벌 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.

# IAM 데이터베이스 인증의 활성화 및 비활성화
<a name="UsingWithRDS.IAMDBAuth.Enabling"></a>

DB 인스턴스에서는 기본적으로 IAM 데이터베이스 인증이 비활성화되어 있습니다. IAM 데이터베이스 인증은 AWS Management Console, AWS CLI 또는 API를 사용하여 활성화하거나 비활성화할 수 있습니다.

다음 작업 중 하나를 수행할 때 IAM 데이터베이스 인증을 활성화할 수 있습니다.
+ IAM 데이터베이스 인증이 활성화된 새 DB 인스턴스를 생성하려면 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ IAM 데이터베이스 인증을 사용하도록 DB 인스턴스를 수정하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+ IAM 데이터베이스 인증이 활성화된 스냅샷에서 DB 인스턴스를 복원하려면 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.
+ IAM 데이터베이스 인증이 사용 설정된 시점으로 DB 인스턴스를 복원하려면 [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md) 섹션을 참조하세요.

## 콘솔
<a name="UsingWithRDS.IAMDBAuth.Enabling.Console"></a>

각 생성 또는 수정 워크플로에는 IAM 데이터베이스 인증을 활성화하거나 비활성화할 수 있는 **데이터베이스 인증(Database authentication)** 섹션이 있습니다. 이 섹션에서 **암호 및 IAM 데이터베이스 인증(Password and IAM database authentication)**을 선택하여 IAM 데이터베이스 인증을 활성화합니다.

**기존 DB 인스턴스에서 IAM 데이터베이스 인증을 활성화하거나 비활성화하려면**

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 수정하려는 DB 인스턴스를 선택합니다.
**참고**  
 DB 인스턴스가 IAM 인증과 호환되는지 확인합니다. 호환성 요구 사항은 [리전 및 버전 사용 가능 여부](UsingWithRDS.IAMDBAuth.md#UsingWithRDS.IAMDBAuth.Availability) 섹션을 참조하십시오.

1. **수정**을 선택합니다.

1. **데이터베이스 인증** 섹션에서 **암호 및 IAM 데이터베이스 인증** 을 선택하여 IAM 데이터베이스 인증을 활성화합니다. **암호 인증** 또는 **암호 및 Kerberos 인증**을 선택하여 IAM 인증을 비활성화합니다.

1. 또한 CloudWatch Logs에 IAM DB 인증 로그 게시를 사용하도록 선택할 수 있습니다. **로그 내보내기**에서 **iam-db-auth-error 로그** 옵션을 선택합니다. CloudWatch Logs에 로그를 게시하면 스토리지가 사용되며 해당 스토리지에 대한 요금이 부과됩니다. 더 이상 필요하지 않은 CloudWatch Logs는 삭제해야 합니다.

1. [**Continue**]를 선택합니다.

1. 변경 사항을 즉시 적용하려면 **수정 예약(Scheduling of modifications)** 섹션에서 **즉시(Immediately)**를 선택합니다.

1. **DB 인스턴스 수정** 을 선택합니다.

## AWS CLI
<a name="UsingWithRDS.IAMDBAuth.Enabling.CLI"></a>

AWS CLI를 사용하여 새로운 DB 인스턴스를 IAM 인증 방식으로 생성하려면 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 명령을 사용하십시오. 다음 예제와 같이 `--enable-iam-database-authentication` 옵션을 지정합니다.

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.m3.medium \
    --engine MySQL \
    --allocated-storage 20 \
    --master-username masterawsuser \
    --manage-master-user-password \
    --enable-iam-database-authentication
```

기존 DB 인스턴스를 업데이트하여 IAM 인증을 사용하게 하거나 사용하지 않게 하려면 AWS CLI 명령 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)를 사용합니다. 상황에 따라 `--enable-iam-database-authentication` 또는 `--no-enable-iam-database-authentication` 옵션을 지정합니다.

**참고**  
 DB 인스턴스가 IAM 인증과 호환되는지 확인합니다. 호환성 요구 사항은 [리전 및 버전 사용 가능 여부](UsingWithRDS.IAMDBAuth.md#UsingWithRDS.IAMDBAuth.Availability) 섹션을 참조하십시오.

기본적으로 Amazon RDS는 다음 유지 관리 기간에 수정 작업을 수행합니다. 이러한 기본 설정을 무시하고 IAM DB 인증을 최대한 빠르게 활성화하려면 `--apply-immediately` 파라미터를 사용합니다.

다음은 기존 DB 인스턴스일 때 IAM 인증을 바로 활성화하는 방법을 설명한 예제입니다.

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --apply-immediately \
    --enable-iam-database-authentication
```

DB 인스턴스를 복원하는 경우에는 다음 AWS CLI 명령 중 하나를 사용하십시오.
+ `[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)`
+ `[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)`

IAM 데이터베이스 인증은 기본적으로 원본 스냅샷으로 기본 설정됩니다. 이 설정을 변경하려면 상황에 따라 `--enable-iam-database-authentication` 또는 `--no-enable-iam-database-authentication` 옵션을 설정합니다.

## RDS API
<a name="UsingWithRDS.IAMDBAuth.Enabling.API"></a>

API를 사용하여 새로운 DB 인스턴스를 IAM 인증 방식으로 생성하려면 API 작업 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)를 사용하십시오. `EnableIAMDatabaseAuthentication` 파라미터를 `true`로 설정합니다.

기존 DB 인스턴스를 업데이트하여 IAM 인증을 사용하게 하거나 사용하지 않게 하려면 API 작업 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html)를 사용합니다. `EnableIAMDatabaseAuthentication` 파라미터를 `true`로 설정하여 IAM 인증을 활성화하거나, `false`로 설정하여 비활성화합니다.

**참고**  
 DB 인스턴스가 IAM 인증과 호환되는지 확인합니다. 호환성 요구 사항은 [리전 및 버전 사용 가능 여부](UsingWithRDS.IAMDBAuth.md#UsingWithRDS.IAMDBAuth.Availability) 섹션을 참조하십시오.

DB 인스턴스를 복원하는 경우에는 다음 API 작업 중 하나를 사용하십시오.
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+  [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

IAM 데이터베이스 인증은 기본적으로 원본 스냅샷으로 기본 설정됩니다. 이 설정을 변경하려면 `EnableIAMDatabaseAuthentication` 파라미터를 `true`로 설정하여 IAM 인증을 활성화하거나, 혹은 `false`로 설정하여 비활성화합니다.

# IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용
<a name="UsingWithRDS.IAMDBAuth.IAMPolicy"></a>

사용자 또는 역할이 DB 인스턴스에 연결할 수 있도록 허용하려면 IAM 정책을 생성해야 합니다. 그런 다음 정책을 권한 세트 또는 역할에 연결합니다.

**참고**  
IAM 정책에 대한 자세한 정보는 [Amazon RDS의 자격 증명 및 액세스 관리](UsingWithRDS.IAM.md) 섹션을 참조하십시오.

다음은 사용자가 IAM 데이터베이스 인증 방식을 사용해 DB 인스턴스 에 연결할 수 있도록 허용하는 정책 예제입니다.

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

****  

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

------

**중요**  
관리자 권한이 있는 사용자는 IAM 정책에서 명시적 권한 없이도 DB 인스턴스에 액세스할 수 있습니다. DB 인스턴스에 대한 관리자 액세스를 제한하고 싶은 경우에는 더 적은 적정 권한을 가진 IAM 역할을 생성하고 이를 관리자에게 할당할 수 있습니다.

**참고**  
`rds-db:` 접두사를 `rds:`로 시작하는 다른 RDS API 작업 접두사와 혼동하지 마십시오. `rds-db:` 접두사와 `rds-db:connect` 작업은 IAM 데이터베이스 인증 전용입니다. 다른 컨텍스트에서는 유효하지 않습니다.

위의 예제 정책에는 다음 요소와 함께 단일 문이 포함되어 있습니다.
+ `Effect` – `Allow`를 지정하여 DB 인스턴스에 대한 액세스를 부여합니다. 액세스를 명시적으로 허용하지 않으면 액세스가 기본적으로 거부됩니다.
+ `Action` – `rds-db:connect`를 지정하여 DB 인스턴스에 대한 연결을 허용합니다.
+ `Resource` – 하나의 DB 인스턴스의 한 데이터베이스 계정을 기술하는 Amazon 리소스 이름(ARN)을 지정합니다. ARN 형식은 다음과 같습니다.

  ```
  arn:aws:rds-db:region:account-id:dbuser:DbiResourceId/db-user-name
  ```

  이 형식에서 다음 항목을 교체합니다.
  + `region`은 DB 인스턴스의 AWS 리전입니다. 정책 예제에서 사용되는 AWS 리전은 `us-east-2`입니다.
  + `account-id`은 DB 인스턴스의 AWS 계정 번호입니다. 정책 예제에서 사용되는 계정 번호는 `1234567890`입니다. 사용자는 DB 인스턴스의 계정과 동일한 계정에 있어야 합니다.

    크로스 계정 액세스를 수행하려면 DB 인스턴스의 계정에서 위에 있는 정책을 사용하여 IAM 역할을 생성하고 다른 계정이 해당 역할을 맡도록 허용합니다.
  + `DbiResourceId`는 DB 인스턴스의 식별자입니다. 이 식별자는 AWS 리전에 고유하며, 절대로 바뀌지 않습니다. 정책 예제에서 사용되는 식별자는 `db-ABCDEFGHIJKL01234`입니다.

    Amazon RDS용 AWS Management Console에서 인스턴스 리소스 ID를 찾으려면 DB 인스턴스를 선택하여 세부 정보를 확인하세요. 그런 다음 **구성** 탭을 선택합니다. 그러면 **리소스 ID**가 **구성** 섹션에 표시됩니다.

    그 밖에 다음과 같이 AWS CLI 명령을 사용하여 현재 AWS 리전에 속한 모든 DB 인스턴스의 식별자와 리소스 ID 목록을 조회하는 방법도 있습니다.

    ```
    aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]"
    ```

    Amazon Aurora를 사용하는 경우 `DbiResourceId` 대신 `DbClusterResourceId`를 지정하세요. 자세한 내용은 *Amazon Aurora 사용 설명서*에서 [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html)을 참조하세요.
**참고**  
RDS 프록시를 통해 데이터베이스에 연결하는 경우, 프록시 리소스 ID(예: `prx-ABCDEFGHIJKL01234`)를 지정합니다. RDS 프록시에서 IAM 데이터베이스 인증을 사용하는 방법에 대한 자세한 내용은 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam) 섹션을 참조하십시오.
  + `db-user-name`은 IAM 인증과 연결할 데이터베이스 계정 이름입니다. 정책 예제에서 사용되는 데이터베이스 계정은 `db_user`입니다.

다른 ARN을 구성하여 다양한 액세스 패턴을 지원할 수 있습니다. 다음 정책에서는 DB 인스턴스에서 서로 다른 데이터베이스 계정 2개에 대한 액세스를 허용합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "rds-db:connect"
         ],
         "Resource": [
             "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/jane_doe",
             "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/mary_roe"
         ]
      }
   ]
}
```

------

다음 정책에서는 "\$1" 문자를 사용하여 특정 AWS 계정과 AWS 리전의 모든 DB 인스턴스 및 데이터베이스 계정을 일치시킵니다.

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

****  

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

------

다음 정책은 특정 AWS 계정과 AWS 리전의 모든 DB 인스턴스를 일치시킵니다. 하지만 정책에 따라 `jane_doe` 데이터베이스 계정을 가지고 있는 DB 인스턴스에게만 액세스 권한이 부여됩니다.

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

****  

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

------

사용자 또는 역할은 데이터베이스 사용자가 액세스할 수 있는 데이터베이스에만 액세스할 수 있습니다. 예를 들어 DB 인스턴스에 이름이 *dev*인 데이터베이스와 *test*인 데이터베이스가 있다고 가정하겠습니다. 이때 데이터베이스 사용자인 `jane_doe`가 *dev*에 대한 액세스 권한만 가지고 있다면 사용자 `jane_doe`와 함께 해당 DB 인스턴스에 액세스하는 모든 사용자 또는 역할도 *dev* 액세스 권한만 갖게 됩니다. 이러한 액세스 제한은 테이블, 뷰 등 다른 데이터베이스 객체에 대해서도 똑같이 적용됩니다.

관리자는 지정된 필요한 리소스에서 특정 API 작업을 수행할 수 있는 권한을 엔티티에 부여하는 IAM 정책을 생성해야 합니다. 그런 다음 관리자는 해당 권한이 필요한 권한 세트 또는 역할에 이러한 정책을 연결해야 합니다. 정책에 대한 예시는 [Amazon RDS 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md) 섹션을 참조하십시오.

## 권한 세트 또는 역할에 IAM 정책 연결
<a name="UsingWithRDS.IAMDBAuth.IAMPolicy.Attaching"></a>

데이터베이스 인증을 위한 IAM 정책을 생성하였으면 이제 정책을 권한 세트 또는 역할에 연결해야 합니다. 이번 주제에 대한 자습서는 *IAM 사용자 안내서*의 [첫 번째 고객 관리형 정책 생성 및 연결](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)을 참조하십시오.

자습서를 읽어보면 이번 단원에서 소개하는 정책 예제 중 한 가지를 출발점으로 자신만의 요건에 따라 지정하여 사용할 수 있습니다. 자습서를 끝까지 따르다 보면 연결된 정책을 통해 `rds-db:connect` 작업이 가능한 권한 세트를 얻게 될 것입니다.

**참고**  
여러 권한 세트 또는 역할을 동일한 데이터베이스 사용자 계정에 매핑할 수 있습니다. 예를 들어 IAM 정책이 다음과 같은 리소스 ARN을 지정하였다고 가정하겠습니다.  

```
arn:aws:rds-db:us-east-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe
```
*Jane*, *Bob* 및 *Diego*에게 정책을 연결하면 각 사용자는 `jane_doe` 데이터베이스 계정을 사용하여 지정된 DB 인스턴스에 연결할 수 있습니다.

# IAM 인증을 사용하여 데이터베이스 계정 생성
<a name="UsingWithRDS.IAMDBAuth.DBAccounts"></a>

IAM 데이터베이스 인증 방식에서는 데이터베이스 암호를 사용자 계정에 할당할 필요 없습니다. 데이터베이스 계정에 매핑되어 있는 사용자를 제거할 경우에는 `DROP USER` 문으로 데이터베이스 계정도 제거해야 합니다.

**참고**  
IAM 인증에 사용되는 사용자 이름은 데이터베이스에 있는 사용자 이름과 대소문자가 일치해야 합니다.

**Topics**
+ [

## MariaDB 및 MySQL에서 IAM 인증 사용
](#UsingWithRDS.IAMDBAuth.DBAccounts.MySQL)
+ [

## PostgreSQL에서 IAM 인증 사용
](#UsingWithRDS.IAMDBAuth.DBAccounts.PostgreSQL)

## MariaDB 및 MySQL에서 IAM 인증 사용
<a name="UsingWithRDS.IAMDBAuth.DBAccounts.MySQL"></a>

MariaDB 및 MySQL에서는 AWS에서 제공하는 플러그인인 `AWSAuthenticationPlugin`에서 인증을 처리합니다. 이 플러그인은 IAM과 원활하게 연동되어 사용자를 인증합니다. 마스터 사용자 또는 사용자를 생성하고 권한을 부여할 수 있는 다른 사용자로 DB 인스턴스에 연결합니다. 연결한 후 다음 예제와 같이 `CREATE USER` 문을 실행합니다.

```
CREATE USER 'jane_doe' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; 
```

`IDENTIFIED WITH` 절을 사용하면 MariaDB 및 MySQL이 `AWSAuthenticationPlugin`을 통해 데이터베이스 계정(`jane_doe`)을 인증할 수 있습니다. `AS 'RDS'` 절은 인증 방법을 참조합니다. 지정한 데이터베이스 사용자 이름이 IAM 데이터베이스 액세스에 대한 IAM 정책의 리소스와 같은지 확인합니다. 자세한 내용은 [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md) 섹션을 참조하세요.

**참고**  
다음과 같은 메시지가 표시되면 현재 DB 인스턴스에서 AWS 제공 플러그인을 사용할 수 없는 것입니다.  
`ERROR 1524 (HY000): Plugin 'AWSAuthenticationPlugin' is not loaded`  
위와 같은 오류 문제를 해결하려면 지원되는 구성을 사용하고 있는지, 그리고 DB 인스턴스 에서 IAM 데이터베이스 인증이 활성화되어 있는지 확인하십시오. 자세한 내용은 [리전 및 버전 사용 가능 여부](UsingWithRDS.IAMDBAuth.md#UsingWithRDS.IAMDBAuth.Availability) 및 [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md) 단원을 참조하십시오.

`AWSAuthenticationPlugin`을 사용하여 계정을 생성한 이후 계정 관리 방법은 다른 데이터베이스 계정과 동일합니다. 예를 들어 `GRANT` 및 `REVOKE` 문으로 계정 권한을 수정하거나, 혹은 `ALTER USER` 문으로 여러 가지 계정 속성을 변경할 수 있습니다.

IAM을 사용하는 경우 데이터베이스 네트워크 트래픽은 SSL/TLS를 사용하여 암호화됩니다. SSL 연결을 허용하려면 다음 명령을 사용해 사용자 계정을 수정합니다.

```
ALTER USER 'jane_doe'@'%' REQUIRE SSL;     
```

 

## PostgreSQL에서 IAM 인증 사용
<a name="UsingWithRDS.IAMDBAuth.DBAccounts.PostgreSQL"></a>

 PostgreSQL에서 IAM 인증을 사용하려면 마스터 사용자 또는 사용자를 생성하고 권한을 부여할 수 있는 다른 사용자로 DB 인스턴스에 연결해야 합니다. 연결한 후 데이터베이스 사용자를 생성하고 다음 예제에 나온 것처럼 사용자에게 `rds_iam` 역할을 부여합니다.

```
CREATE USER db_userx; 
GRANT rds_iam TO db_userx;
```

지정한 데이터베이스 사용자 이름이 IAM 데이터베이스 액세스에 대한 IAM 정책의 리소스와 같은지 확인합니다. 자세한 내용은 [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md) 섹션을 참조하세요. IAM 인증을 사용하려면 `rds_iam` 역할을 부여해야 합니다. 중첩된 멤버십이나 역할의 간접 부여도 사용할 수 있습니다.

# IAM 인증을 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting"></a>

IAM 데이터베이스 인증 방식에서는 DB 인스턴스 에 연결할 때 인증 토큰을 사용합니다. *인증 토큰*이란 암호 대신 사용하는 문자열을 말합니다. 인증 토큰은 생성 후 15분 동안만 유효하며 이 시간이 지나면 만료됩니다. 만료된 토큰을 사용하여 연결하려고 하면 연결 요청이 거부됩니다.

모든 인증 토큰은 AWS 서명 버전 4를 사용하여 유효한 서명이 있어야 합니다. (자세한 내용은 *AWS 일반 참조*의 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.) AWS SDK for Java 또는 AWS SDK for Python (Boto3)와 같은 AWS CLI 및 AWS SDK는 사용자가 생성한 각 토큰에 자동으로 서명할 수 있습니다.

AWS Lambda와 같은 AWS 서비스에서 Amazon RDS에 연결할 때 인증 토큰을 사용할 수 있습니다. 토큰을 사용하면 코드에 암호를 넣지 않아도 됩니다. 그 밖에 AWS SDK를 사용하여 인증 토큰을 프로그래밍 방식으로 생성하고 프로그래밍 방식으로 서명하는 방법도 있습니다.

IAM 인증 토큰에 서명까지 마쳤으면 이제 Amazon RDS DB 인스턴스에 연결할 수 있습니다. 다음 섹션에서는 명령줄 도구 또는 AWS SDK(예: AWS SDK for Java 또는 AWS SDK for Python (Boto3))를 사용하여 연결하는 방법에 대해 알아보겠습니다.

자세한 내용은 다음 블로그 게시물을 참조하십시오.
+ [IAM 인증을 사용하여 SQL Workbench/J를 Aurora MySQL 또는 Amazon RDS for MySQL에 연결](https://aws.amazon.com/blogs/database/use-iam-authentication-to-connect-with-sql-workbenchj-to-amazon-aurora-mysql-or-amazon-rds-for-mysql/)
+ [Using IAM authentication to connect with pgAdmin Amazon Aurora PostgreSQL or Amazon RDS for PostgreSQL](https://aws.amazon.com/blogs/database/using-iam-authentication-to-connect-with-pgadmin-amazon-aurora-postgresql-or-amazon-rds-for-postgresql/)

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**Topics**
+ [

# AWS 드라이버와 함께 IAM 인증을 사용하여 DB 인스턴스에 연결
](IAMDBAuth.Connecting.Drivers.md)
+ [

# 명령줄에서 IAM 인증을 사용하여 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트
](UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.md)
+ [

# 명령줄: AWS CLI 및 psql Client에서 IAM 인증을 사용하여 DB 인스턴스에 연결
](UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.PostgreSQL.md)
+ [

# IAM 인증 및 AWS SDK for .NET를 사용하여 DB 인스턴스에 연결
](UsingWithRDS.IAMDBAuth.Connecting.NET.md)
+ [

# IAM 인증 및 AWS SDK for Go를 사용하여 DB 인스턴스에 연결
](UsingWithRDS.IAMDBAuth.Connecting.Go.md)
+ [

# IAM 인증 및 AWS SDK for Java를 사용하여 DB 인스턴스에 연결
](UsingWithRDS.IAMDBAuth.Connecting.Java.md)
+ [

# IAM 인증 및 AWS SDK for Python (Boto3)를 사용하여 DB 인스턴스에 연결
](UsingWithRDS.IAMDBAuth.Connecting.Python.md)

# AWS 드라이버와 함께 IAM 인증을 사용하여 DB 인스턴스에 연결
<a name="IAMDBAuth.Connecting.Drivers"></a>

더 빠른 전환 및 장애 조치 시간, AWS Secrets Manager, AWS Identity and Access Management(IAM) 및 페더레이션 ID를 사용한 인증을 지원하도록 설계된 AWS 드라이버 제품군입니다. AWS 드라이버는 DB 인스턴스 상태 모니터링과 인스턴스 토폴로지 파악을 통해 새 라이터를 결정합니다. 이 접근 방식은 전환 및 장애 조치 시간을 오픈 소스 드라이버의 경우 수십 초였던 것에 비해 10초 미만으로 단축합니다.

AWS 드라이버에 대한 자세한 내용은 [RDS for MariaDB](MariaDB.Connecting.Drivers.md#MariaDB.Connecting.JDBCDriver), [RDS for MySQL](MySQL.Connecting.Drivers.md#MySQL.Connecting.JDBCDriver) 또는 [RDS for PostgreSQL](PostgreSQL.Connecting.JDBCDriver.md) DB 인스턴스에 대한 해당 언어 드라이버를 참조하세요.

**참고**  
RDS for MariaDB에서 지원되는 유일한 기능은 AWS Secrets Manager, AWS Identity and Access Management(IAM) 및 페더레이션 ID를 사용한 인증입니다.

# 명령줄에서 IAM 인증을 사용하여 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI"></a>

아래 설명과 같이 AWS CLI 및 `mysql` 명령줄 도구를 사용하여 명령줄에서 Amazon RDS DB 인스턴스로 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**참고**  
IAM 인증을 통한 SQL Workbench/J를 사용하여 데이터베이스에 연결하는 방법에 대한 자세한 내용은 블로그 게시물 [IAM 인증을 사용하여 SQL Workbench/J를 Aurora MySQL 또는 Amazon RDS for MySQL에 연결](https://aws.amazon.com/blogs/database/use-iam-authentication-to-connect-with-sql-workbenchj-to-amazon-aurora-mysql-or-amazon-rds-for-mysql/)을 참조하세요.

**Topics**
+ [

## IAM 인증 토크 생성
](#UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.AuthToken)
+ [

## DB 인스턴스에 연결
](#UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.Connect)

## IAM 인증 토크 생성
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.AuthToken"></a>

다음은 AWS CLI를 사용하여 서명이 되어 있는 인증 토큰을 생성하는 방법을 설명한 예제입니다.

```
aws rds generate-db-auth-token \
   --hostname rdsmysql.123456789012.us-west-2.rds.amazonaws.com \
   --port 3306 \
   --region us-west-2 \
   --username jane_doe
```

위의 예제에서 각 파라미터는 다음과 같습니다.
+ `--hostname` – 액세스할 DB 인스턴스의 호스트 이름입니다.
+ `--port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `--region` - DB 인스턴스가 실행되는 AWS 리전입니다.
+ `--username` – 액세스할 데이터베이스 계정입니다.

토큰에서 가장 앞의 일부 문자는 다음과 같은 모습입니다.

```
rdsmysql.123456789012.us-west-2.rds.amazonaws.com:3306/?Action=connect&DBUser=jane_doe&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900...
```

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

## DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.Connect"></a>

일반적인 연결 형식은 다음과 같습니다.

```
mysql --host=hostName --port=portNumber --ssl-ca=full_path_to_ssl_certificate --enable-cleartext-plugin --user=userName --password=authToken
```

파라미터는 다음과 같습니다.
+ `--host` – 액세스할 DB 인스턴스의 호스트 이름입니다.
+ `--port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `--ssl-ca` - 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로

  MariaDB용 SSL/TLS 지원 방법에 대한 자세한 내용은 [Amazon RDS의 MariaDB DB 인스턴스에 대한 SSL/TLS 지원](MariaDB.Concepts.SSLSupport.md) 섹션을 참조하세요.

  MySQL용 SSL/TLS 지원 방법에 대한 자세한 내용은 [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md) 섹션을 참조하세요.

  SSL 인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.
+ `--enable-cleartext-plugin` – 현재 연결에서 `AWSAuthenticationPlugin`을 사용하도록 지정하는 값입니다.

  MariaDB 클라이언트를 사용하는 경우 `--enable-cleartext-plugin` 옵션이 필요하지 않습니다.
+ `--user` – 액세스할 데이터베이스 계정입니다.
+ `--password` – 서명된 IAM 인증 토큰입니다.

인증 토큰은 수백 자의 문자로 구성됩니다. 그렇기 때문에 명령줄에서는 다루지 불편할 수도 있습니다. 이러한 문제를 해결하기 위해 토큰을 환경 변수로 저장한 후 연결할 때 이 변수를 사용하는 것도 한 가지 방법입니다. 다음은 이러한 문제 해결 방법을 설명한 예제입니다. 이 예에서 */sample\$1dir/*는 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로입니다.

```
RDSHOST="mysqldb.123456789012.us-east-1.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username jane_doe )"

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN
```

`AWSAuthenticationPlugin`을 사용하여 연결할 때는 SSL을 통해 보안을 유지합니다. 이러한 보안 여부를 확인하려면 `mysql>` 명령 프롬프트에 다음과 같이 입력합니다.

```
show status like 'Ssl%';
```

그러면 출력 시 다음과 같이 자세하게 표시됩니다.

```
+---------------+-------------+
| Variable_name | Value                                                                                                                                                                                                                                |
+---------------+-------------+
| ...           | ...
| Ssl_cipher    | AES256-SHA                                                                                                                                                                                                                           |
| ...           | ...
| Ssl_version   | TLSv1.1                                                                                                                                                                                                                              |
| ...           | ...
+-----------------------------+
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# 명령줄: AWS CLI 및 psql Client에서 IAM 인증을 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.PostgreSQL"></a>

아래 설명과 같이 AWS CLI 및 psql 명령줄 도구를 사용하여 명령줄에서 Amazon RDS for PostgreSQL DB 인스턴스에 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**참고**  
IAM 인증을 통한 pgAdmin을 사용하여 데이터베이스에 연결하는 방법에 대한 자세한 내용은 블로그 게시물 [Using IAM authentication to connect with pgAdmin Amazon Aurora PostgreSQL or Amazon RDS for PostgreSQL](https://aws.amazon.com/blogs/database/using-iam-authentication-to-connect-with-pgadmin-amazon-aurora-postgresql-or-amazon-rds-for-postgresql/)을 참조하세요.

**Topics**
+ [

## IAM 인증 토크 생성
](#UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.AuthToken.PostgreSQL)
+ [

## Amazon RDS PostgreSQL 인스턴스 에 연결
](#UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.Connect.PostgreSQL)

## IAM 인증 토크 생성
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.AuthToken.PostgreSQL"></a>

인증 토큰은 수백 자의 문자로 구성되므로 명령줄에서는 다루기 불편할 수 있습니다. 이러한 문제를 해결하기 위해 토큰을 환경 변수로 저장한 후 연결할 때 이 변수를 사용하는 것도 한 가지 방법입니다. 다음 예제는 AWS CLI에서 `generate-db-auth-token` 명령을 사용하여 서명된 인증 토큰을 받고 이를 `PGPASSWORD` 환경 변수에 저장하는 방법을 보여 줍니다.

```
export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com"
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )"
```

예제에서 `generate-db-auth-token` 명령에 대한 파라미터는 다음과 같습니다.
+ `--hostname` – 액세스할 DB 인스턴스의 호스트 이름입니다.
+ `--port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `--region` - DB 인스턴스가 실행되는 AWS 리전입니다.
+ `--username` – 액세스할 데이터베이스 계정입니다.

생성된 토큰에서 처음 몇 글자는 다음과 같은 모습입니다.

```
rdspostgres.123456789012.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=jane_doe&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900...
```

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

## Amazon RDS PostgreSQL 인스턴스 에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.Connect.PostgreSQL"></a>

psql을 사용한 일반적인 연결 형식은 다음과 같습니다.

```
psql "host=hostName port=portNumber sslmode=verify-full sslrootcert=full_path_to_ssl_certificate dbname=DBName user=userName password=authToken"
```

파라미터는 다음과 같습니다.
+ `host` – 액세스할 DB 인스턴스의 호스트 이름입니다.
+ `port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `sslmode` – 사용할 SSL 모드입니다.

  `sslmode=verify-full`을 사용하면 SSL 연결에서 SSL 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인합니다.
+ `sslrootcert` - 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로

  자세한 내용은 [PostgreSQL DB 인스턴스와 함께 SSL 사용](PostgreSQL.Concepts.General.SSL.md) 섹션을 참조하세요.

  SSL 인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.
+ `dbname` – 액세스할 데이터베이스입니다.
+ `user` – 액세스할 데이터베이스 계정입니다.
+ `password` – 서명된 IAM 인증 토큰입니다.

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

다음 예제는 psql을 사용하여 연결하는 방법을 보여줍니다. 예에서 psql은 호스트에 대해 환경 변수 `RDSHOST`를 사용하고 생성된 토큰에 대해 환경 변수 `PGPASSWORD`를 사용합니다. 또한 */sample\$1dir/*은 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로입니다.

```
export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com"
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )"
                    
psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=/sample_dir/global-bundle.pem dbname=DBName user=jane_doe password=$PGPASSWORD"
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# IAM 인증 및 AWS SDK for .NET를 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.NET"></a>

아래 설명과 같이 AWS SDK for .NET를 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**예제**  
다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.

이 코드 예제를 실행하려면 [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net/)가 필요하며 이는 AWS 사이트에서 받을 수 있습니다. `AWSSDK.CORE` 및 `AWSSDK.RDS` 패키지가 필요합니다. DB 인스턴스에 연결하려면 DB 엔진용 .NET 데이터베이스 커넥터(예: MariaDB 또는 MySQL용 MySQL커넥터 또는 PostgreSQL용 Npgsql)를 사용합니다.

이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결됩니다. 필요하다면 다음 변수 값을 변경합니다.
+ `server` - 액세스할 DB 인스턴스의 엔드포인트입니다.
+ `user` – 액세스할 데이터베이스 계정입니다.
+ `database` – 액세스할 데이터베이스입니다.
+ `port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `SslMode` – 사용할 SSL 모드입니다.

  `SslMode=Required`을 사용하면 SSL 연결에서 SSL 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인합니다.
+ `SslCa` - Amazon RDS에 대한 SSL 인증서의 전체 경로입니다.

  인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

```
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using Amazon;

namespace ubuntu
{
  class Program
  {
    static void Main(string[] args)
    {
      var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "mysqldb.123456789012.us-east-1.rds.amazonaws.com", 3306, "jane_doe");
      // for debug only Console.Write("{0}\n", pwd);  //this verifies the token is generated

      MySqlConnection conn = new MySqlConnection($"server=mysqldb.123456789012.us-east-1.rds.amazonaws.com;user=jane_doe;database=mydB;port=3306;password={pwd};SslMode=Required;SslCa=full_path_to_ssl_certificate");
      conn.Open();

      // Define a query
      MySqlCommand sampleCommand = new MySqlCommand("SHOW DATABASES;", conn);

      // Execute a query
      MySqlDataReader mysqlDataRdr = sampleCommand.ExecuteReader();

      // Read all rows and output the first column in each row
      while (mysqlDataRdr.Read())
        Console.WriteLine(mysqlDataRdr[0]);

      mysqlDataRdr.Close();
      // Close connection
      conn.Close();
    }
  }
}
```

이 코드는 PostgreSQL DB 인스턴스에 연결됩니다.

필요하다면 다음 변수 값을 변경합니다.
+ `Server` - 액세스할 DB 인스턴스의 엔드포인트입니다.
+ `User ID` – 액세스할 데이터베이스 계정입니다.
+ `Database` – 액세스할 데이터베이스입니다.
+ `Port` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `SSL Mode` – 사용할 SSL 모드입니다.

  `SSL Mode=Required`을 사용하면 SSL 연결에서 SSL 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인합니다.
+ `Root Certificate` - Amazon RDS에 대한 SSL 인증서의 전체 경로입니다.

  인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

```
using System;
using Npgsql;
using Amazon.RDS.Util;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var pwd = RDSAuthTokenGenerator.GenerateAuthToken("postgresmydb.123456789012.us-east-1.rds.amazonaws.com", 5432, "jane_doe");
// for debug only Console.Write("{0}\n", pwd);  //this verifies the token is generated

            NpgsqlConnection conn = new NpgsqlConnection($"Server=postgresmydb.123456789012.us-east-1.rds.amazonaws.com;User Id=jane_doe;Password={pwd};Database=mydb;SSL Mode=Require;Root Certificate=full_path_to_ssl_certificate");
            conn.Open();

            // Define a query
                   NpgsqlCommand cmd = new NpgsqlCommand("select count(*) FROM pg_user", conn);

            // Execute a query
            NpgsqlDataReader dr = cmd.ExecuteReader();

            // Read all rows and output the first column in each row
            while (dr.Read())
                Console.Write("{0}\n", dr[0]);

            // Close connection
            conn.Close();
        }
    }
}
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# IAM 인증 및 AWS SDK for Go를 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.Go"></a>

아래 설명과 같이 AWS SDK for Go를 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**예제**  
이 코드 예제를 실행하려면 [AWS SDK for Go](https://aws.amazon.com/sdk-for-go/)가 필요하며 이는 AWS 사이트에서 받을 수 있습니다.

필요하다면 다음 변수 값을 변경합니다.
+ `dbName` – 액세스할 데이터베이스입니다.
+ `dbUser` – 액세스할 데이터베이스 계정입니다.
+ `dbHost` - 액세스할 DB 인스턴스의 엔드포인트입니다.
**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.
+ `dbPort` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `region` - DB 인스턴스가 실행되는 AWS 리전입니다.

또한 샘플 코드에서 가져온 라이브러리가 시스템에 있는지 확인합니다.

**중요**  
이 섹션의 예에서는 다음 코드를 사용하여 로컬 환경에서 데이터베이스에 액세스하는 자격 증명을 제공합니다.  
`creds := credentials.NewEnvCredentials()`  
Amazon EC2 또는 Amazon ECS 같은 AWS 서비스에서 데이터베이스에 액세스하는 경우 코드를 다음 코드로 바꿀 수 있습니다.  
`sess := session.Must(session.NewSession())`  
`creds := sess.Config.Credentials`  
이 변경 작업을 수행하는 경우 다음 가져오기를 추가해야 합니다.  
`"github.com/aws/aws-sdk-go/aws/session"`

**Topics**
+ [

## IAM 인증 및 AWS SDK for Go V2를 사용하여 연결
](#UsingWithRDS.IAMDBAuth.Connecting.GoV2)
+ [

## IAM 인증 및 AWS SDK for Go V1을 사용하여 연결
](#UsingWithRDS.IAMDBAuth.Connecting.GoV1)

## IAM 인증 및 AWS SDK for Go V2를 사용하여 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.GoV2"></a>

IAM 인증 및 AWS SDK for Go V2를 사용하여 DB 인스턴스에 연결할 수 있습니다.

다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.

이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결됩니다.

```
package main
                
import (
     "context"
     "database/sql"
     "fmt"

     "github.com/aws/aws-sdk-go-v2/config"
     "github.com/aws/aws-sdk-go-v2/feature/rds/auth"
     _ "github.com/go-sql-driver/mysql"
)

func main() {

     var dbName string = "DatabaseName"
     var dbUser string = "DatabaseUser"
     var dbHost string = "mysqldb.123456789012.us-east-1.rds.amazonaws.com"
     var dbPort int = 3306
     var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort)
     var region string = "us-east-1"

    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
    	panic("configuration error: " + err.Error())
    }

    authenticationToken, err := auth.BuildAuthToken(
    	context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials)
    if err != nil {
	    panic("failed to create authentication token: " + err.Error())
    }

    dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true",
        dbUser, authenticationToken, dbEndpoint, dbName,
    )

    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }
}
```

이 코드는 PostgreSQL DB 인스턴스에 연결됩니다.

```
package main

import (
     "context"
     "database/sql"
     "fmt"

     "github.com/aws/aws-sdk-go-v2/config"
     "github.com/aws/aws-sdk-go-v2/feature/rds/auth"
     _ "github.com/lib/pq"
)

func main() {

     var dbName string = "DatabaseName"
     var dbUser string = "DatabaseUser"
     var dbHost string = "postgresmydb.123456789012.us-east-1.rds.amazonaws.com"
     var dbPort int = 5432
     var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort)
     var region string = "us-east-1"

    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
    	panic("configuration error: " + err.Error())
    }

    authenticationToken, err := auth.BuildAuthToken(
    	context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials)
    if err != nil {
	    panic("failed to create authentication token: " + err.Error())
    }

    dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s",
        dbHost, dbPort, dbUser, authenticationToken, dbName,
    )

    db, err := sql.Open("postgres", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }
}
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

## IAM 인증 및 AWS SDK for Go V1을 사용하여 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.GoV1"></a>

IAM 인증 및 AWS SDK for Go V1을 사용하여 DB 인스턴스에 연결할 수 있습니다.

다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.

이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결됩니다.

```
package main
         
import (
    "database/sql"
    "fmt"
    "log"

    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/service/rds/rdsutils"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    dbName := "app"
    dbUser := "jane_doe"
    dbHost := "mysqldb.123456789012.us-east-1.rds.amazonaws.com"
    dbPort := 3306
    dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort)
    region := "us-east-1"

    creds := credentials.NewEnvCredentials()
    authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds)
    if err != nil {
        panic(err)
    }

    dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true",
        dbUser, authToken, dbEndpoint, dbName,
    )

    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }
}
```

이 코드는 PostgreSQL DB 인스턴스에 연결됩니다.

```
package main

import (
	"database/sql"
	"fmt"

	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/service/rds/rdsutils"
	_ "github.com/lib/pq"
)

func main() {
    dbName := "app"
    dbUser := "jane_doe"
    dbHost := "postgresmydb.123456789012.us-east-1.rds.amazonaws.com"
    dbPort := 5432
    dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort)
    region := "us-east-1"

    creds := credentials.NewEnvCredentials()
    authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds)
    if err != nil {
        panic(err)
    }

    dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s",
        dbHost, dbPort, dbUser, authToken, dbName,
    )

    db, err := sql.Open("postgres", dsn)
    if err != nil {
        panic(err)
    }

    err = db.Ping()
    if err != nil {
        panic(err)
    }
}
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# IAM 인증 및 AWS SDK for Java를 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.Java"></a>

아래 설명과 같이 AWS SDK for Java를 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)
+ [AWS SDK for Java 설정](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-install.html)

Java 2.x용 SDK를 사용하는 방법에 대한 예제는 [Java 2.x용 SDK를 사용한 Amazon RDS 예제](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_rds_code_examples.html)를 참조하세요. 또한 AWS 고급 JDBC 래퍼를 사용할 수 있습니다. [AWS Advanced JDBC Wrapper documentation](https://github.com/aws/aws-advanced-jdbc-wrapper/blob/main/docs/Documentation.md)을 참조하세요.

**Topics**
+ [

## IAM 인증 토크 생성
](#UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken)
+ [

## IAM 인증 토큰 수동 구성
](#UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken2)
+ [

## DB 인스턴스에 연결
](#UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken.Connect)

## IAM 인증 토크 생성
<a name="UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken"></a>

AWS SDK for Java로 프로그램을 개발할 때는 `RdsIamAuthTokenGenerator` 클래스를 사용하여 서명된 인증 토큰을 가져올 수 있습니다. 이 클래스를 사용하려면 AWS 자격 증명을 입력해야 합니다. 이렇게 하려면 `DefaultAWSCredentialsProviderChain` 클래스의 인스턴스를 생성합니다. `DefaultAWSCredentialsProviderChain`은 [기본 자격 증명 공급자 체인](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default)에서 찾은 첫 번째 AWS 액세스 키와 보안 키를 사용합니다. AWS 액세스 키에 대한 자세한 내용은 [사용자의 액세스 키 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)를 참조하세요.

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

`RdsIamAuthTokenGenerator` 인스턴스를 생성한 후에는 `getAuthToken` 메서드를 호출하여 서명된 토큰을 가져올 수 있습니다. 이때 AWS 리전, 호스트 이름, 포트 이름 및 사용자 이름을 입력합니다. 다음은 각 정보의 입력 방법을 설명한 코드 예제입니다.

```
package com.amazonaws.codesamples;

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.rds.auth.GetIamAuthTokenRequest;
import com.amazonaws.services.rds.auth.RdsIamAuthTokenGenerator;

public class GenerateRDSAuthToken {

    public static void main(String[] args) {

	    String region = "us-west-2";
	    String hostname = "rdsmysql.123456789012.us-west-2.rds.amazonaws.com";
	    String port = "3306";
	    String username = "jane_doe";
	
	    System.out.println(generateAuthToken(region, hostname, port, username));
    }

    static String generateAuthToken(String region, String hostName, String port, String username) {

	    RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
		    .credentials(new DefaultAWSCredentialsProviderChain())
		    .region(region)
		    .build();

	    String authToken = generator.getAuthToken(
		    GetIamAuthTokenRequest.builder()
		    .hostname(hostName)
		    .port(Integer.parseInt(port))
		    .userName(username)
		    .build());
	    
	    return authToken;
    }

}
```

## IAM 인증 토큰 수동 구성
<a name="UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken2"></a>

Java에서 인증 토큰을 가장 쉽게 생성할 수 있는 방법은 `RdsIamAuthTokenGenerator`를 사용하는 것입니다. 이 클래스는 인증 토큰을 생성한 후 AWS 서명 버전 4를 사용해 서명까지 마칩니다. (자세한 내용은 *AWS 일반 참조*의 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.)

그 밖에 다음 코드 예제와 같이 인증 토큰을 수동으로 구성하여 서명하는 방법도 있습니다.

```
package com.amazonaws.codesamples;

import com.amazonaws.SdkClientException;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.auth.SigningAlgorithm;
import com.amazonaws.util.BinaryUtils;
import org.apache.commons.lang3.StringUtils;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SortedMap;
import java.util.TreeMap;

import static com.amazonaws.auth.internal.SignerConstants.AWS4_TERMINATOR;
import static com.amazonaws.util.StringUtils.UTF8;

public class CreateRDSAuthTokenManually {
    public static String httpMethod = "GET";
    public static String action = "connect";
    public static String canonicalURIParameter = "/";
    public static SortedMap<String, String> canonicalQueryParameters = new TreeMap();
    public static String payload = StringUtils.EMPTY;
    public static String signedHeader = "host";
    public static String algorithm = "AWS4-HMAC-SHA256";
    public static String serviceName = "rds-db";
    public static String requestWithoutSignature;

    public static void main(String[] args) throws Exception {

        String region = "us-west-2";
        String instanceName = "rdsmysql.123456789012.us-west-2.rds.amazonaws.com";
        String port = "3306";
        String username = "jane_doe";
	
        Date now = new Date();
        String date = new SimpleDateFormat("yyyyMMdd").format(now);
        String dateTimeStamp = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'").format(now);
        DefaultAWSCredentialsProviderChain creds = new DefaultAWSCredentialsProviderChain();
	    String awsAccessKey = creds.getCredentials().getAWSAccessKeyId();
	    String awsSecretKey = creds.getCredentials().getAWSSecretKey();
        String expiryMinutes = "900";
        
        System.out.println("Step 1:  Create a canonical request:");
        String canonicalString = createCanonicalString(username, awsAccessKey, date, dateTimeStamp, region, expiryMinutes, instanceName, port);
        System.out.println(canonicalString);
        System.out.println();

        System.out.println("Step 2:  Create a string to sign:");        
        String stringToSign = createStringToSign(dateTimeStamp, canonicalString, awsAccessKey, date, region);
        System.out.println(stringToSign);
        System.out.println();

        System.out.println("Step 3:  Calculate the signature:");        
        String signature = BinaryUtils.toHex(calculateSignature(stringToSign, newSigningKey(awsSecretKey, date, region, serviceName)));
        System.out.println(signature);
        System.out.println();

        System.out.println("Step 4:  Add the signing info to the request");                
        System.out.println(appendSignature(signature));
        System.out.println();
        
    }

    //Step 1: Create a canonical request date should be in format YYYYMMDD and dateTime should be in format YYYYMMDDTHHMMSSZ
    public static String createCanonicalString(String user, String accessKey, String date, String dateTime, String region, String expiryPeriod, String hostName, String port) throws Exception {
        canonicalQueryParameters.put("Action", action);
        canonicalQueryParameters.put("DBUser", user);
        canonicalQueryParameters.put("X-Amz-Algorithm", "AWS4-HMAC-SHA256");
        canonicalQueryParameters.put("X-Amz-Credential", accessKey + "%2F" + date + "%2F" + region + "%2F" + serviceName + "%2Faws4_request");
        canonicalQueryParameters.put("X-Amz-Date", dateTime);
        canonicalQueryParameters.put("X-Amz-Expires", expiryPeriod);
        canonicalQueryParameters.put("X-Amz-SignedHeaders", signedHeader);
        String canonicalQueryString = "";
        while(!canonicalQueryParameters.isEmpty()) {
            String currentQueryParameter = canonicalQueryParameters.firstKey();
            String currentQueryParameterValue = canonicalQueryParameters.remove(currentQueryParameter);
            canonicalQueryString = canonicalQueryString + currentQueryParameter + "=" + currentQueryParameterValue;
            if (!currentQueryParameter.equals("X-Amz-SignedHeaders")) {
                canonicalQueryString += "&";
            }
        }
        String canonicalHeaders = "host:" + hostName + ":" + port + '\n';
        requestWithoutSignature = hostName + ":" + port + "/?" + canonicalQueryString;

        String hashedPayload = BinaryUtils.toHex(hash(payload));
        return httpMethod + '\n' + canonicalURIParameter + '\n' + canonicalQueryString + '\n' + canonicalHeaders + '\n' + signedHeader + '\n' + hashedPayload;

    }

    //Step 2: Create a string to sign using sig v4
    public static String createStringToSign(String dateTime, String canonicalRequest, String accessKey, String date, String region) throws Exception {
        String credentialScope = date + "/" + region + "/" + serviceName + "/aws4_request";
        return algorithm + '\n' + dateTime + '\n' + credentialScope + '\n' + BinaryUtils.toHex(hash(canonicalRequest));

    }

    //Step 3: Calculate signature
    /**
     * Step 3 of the &AWS; Signature version 4 calculation. It involves deriving
     * the signing key and computing the signature. Refer to
     * http://docs.aws.amazon
     * .com/general/latest/gr/sigv4-calculate-signature.html
     */
    public static byte[] calculateSignature(String stringToSign,
                                            byte[] signingKey) {
        return sign(stringToSign.getBytes(Charset.forName("UTF-8")), signingKey,
                SigningAlgorithm.HmacSHA256);
    }

    public static byte[] sign(byte[] data, byte[] key,
                          SigningAlgorithm algorithm) throws SdkClientException {
        try {
            Mac mac = algorithm.getMac();
            mac.init(new SecretKeySpec(key, algorithm.toString()));
            return mac.doFinal(data);
        } catch (Exception e) {
            throw new SdkClientException(
                    "Unable to calculate a request signature: "
                            + e.getMessage(), e);
        }
    }

    public static byte[] newSigningKey(String secretKey,
                                   String dateStamp, String regionName, String serviceName) {
        byte[] kSecret = ("AWS4" + secretKey).getBytes(Charset.forName("UTF-8"));
        byte[] kDate = sign(dateStamp, kSecret, SigningAlgorithm.HmacSHA256);
        byte[] kRegion = sign(regionName, kDate, SigningAlgorithm.HmacSHA256);
        byte[] kService = sign(serviceName, kRegion,
                SigningAlgorithm.HmacSHA256);
        return sign(AWS4_TERMINATOR, kService, SigningAlgorithm.HmacSHA256);
    }

    public static byte[] sign(String stringData, byte[] key,
                       SigningAlgorithm algorithm) throws SdkClientException {
        try {
            byte[] data = stringData.getBytes(UTF8);
            return sign(data, key, algorithm);
        } catch (Exception e) {
            throw new SdkClientException(
                    "Unable to calculate a request signature: "
                            + e.getMessage(), e);
        }
    }

    //Step 4: append the signature
    public static String appendSignature(String signature) {
        return requestWithoutSignature + "&X-Amz-Signature=" + signature;
    }

    public static byte[] hash(String s) throws Exception {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(s.getBytes(UTF8));
            return md.digest();
        } catch (Exception e) {
            throw new SdkClientException(
                    "Unable to compute hash while signing request: "
                            + e.getMessage(), e);
        }
    }
}
```

## DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.Java.AuthToken.Connect"></a>

다음은 인증 토큰을 생성하고, 이를 사용하여 MariaDB 또는 MySQL을 실행하는 인스턴스에 연결하는 방법을 보여주는 코드 예입니다.

이 코드 예제를 실행하려면 [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)가 필요하며 이는 AWS 사이트에서 받을 수 있습니다. 또한 다음이 필요합니다.
+ MySQL Connector/J. 이 코드 예제는 `mysql-connector-java-5.1.33-bin.jar`로 테스트됩니다.
+ AWS 리전에 고유한 Amazon RDS에 대한 중간 인증서입니다. (자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.) 예제가 실행되면 클래스 로더가 쉽게 찾을 수 있도록 이 Java 코드 예제와 동일한 디렉터리에서 인증서를 찾기 시작합니다.
+ 필요하다면 다음 변수 값을 변경합니다.
  + `RDS_INSTANCE_HOSTNAME` – 액세스할 DB 인스턴스의 호스트 이름입니다.
  + `RDS_INSTANCE_PORT` - PostgreSQL DB 인스턴스에 연결할 때 사용할 포트 이름입니다.
  + `REGION_NAME` - DB 인스턴스가 실행되는 AWS 리전입니다.
  + `DB_USER` – 액세스할 데이터베이스 계정입니다.
  + `SSL_CERTIFICATE` - AWS 리전에 고유한 Amazon RDS에 대한 SSL 인증서입니다.

    AWS 리전에 대한 인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요. SSL 인증서는 예제 실행 시 클래스 로더가 인증서를 찾을 수 있도록 이 Java 프로그램 파일과 동일한 디렉터리에 설치합니다.

다음은 [기본 자격 증명 공급자 체인](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default)에서 AWS 자격 증명을 가져오는 코드 예제입니다.

**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외에 `DEFAULT_KEY_STORE_PASSWORD`에 대한 암호를 지정하는 것이 좋습니다.

```
package com.amazonaws.samples;

import com.amazonaws.services.rds.auth.RdsIamAuthTokenGenerator;
import com.amazonaws.services.rds.auth.GetIamAuthTokenRequest;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.auth.AWSStaticCredentialsProvider;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

import java.net.URL;

public class IAMDatabaseAuthenticationTester {
    //&AWS; Credentials of the IAM user with policy enabling IAM Database Authenticated access to the db by the db user.
    private static final DefaultAWSCredentialsProviderChain creds = new DefaultAWSCredentialsProviderChain();
    private static final String AWS_ACCESS_KEY = creds.getCredentials().getAWSAccessKeyId();
    private static final String AWS_SECRET_KEY = creds.getCredentials().getAWSSecretKey();

    //Configuration parameters for the generation of the IAM Database Authentication token
    private static final String RDS_INSTANCE_HOSTNAME = "rdsmysql.123456789012.us-west-2.rds.amazonaws.com";
    private static final int RDS_INSTANCE_PORT = 3306;
    private static final String REGION_NAME = "us-west-2";
    private static final String DB_USER = "jane_doe";
    private static final String JDBC_URL = "jdbc:mysql://" + RDS_INSTANCE_HOSTNAME + ":" + RDS_INSTANCE_PORT;

    private static final String SSL_CERTIFICATE = "rds-ca-2019-us-west-2.pem";

    private static final String KEY_STORE_TYPE = "JKS";
    private static final String KEY_STORE_PROVIDER = "SUN";
    private static final String KEY_STORE_FILE_PREFIX = "sys-connect-via-ssl-test-cacerts";
    private static final String KEY_STORE_FILE_SUFFIX = ".jks";
    private static final String DEFAULT_KEY_STORE_PASSWORD = "changeit";

    public static void main(String[] args) throws Exception {
        //get the connection
        Connection connection = getDBConnectionUsingIam();

        //verify the connection is successful
        Statement stmt= connection.createStatement();
        ResultSet rs=stmt.executeQuery("SELECT 'Success!' FROM DUAL;");
        while (rs.next()) {
        	    String id = rs.getString(1);
            System.out.println(id); //Should print "Success!"
        }

        //close the connection
        stmt.close();
        connection.close();
        
        clearSslProperties();
        
    }

    /**
     * This method returns a connection to the db instance authenticated using IAM Database Authentication
     * @return
     * @throws Exception
     */
    private static Connection getDBConnectionUsingIam() throws Exception {
        setSslProperties();
        return DriverManager.getConnection(JDBC_URL, setMySqlConnectionProperties());
    }

    /**
     * This method sets the mysql connection properties which includes the IAM Database Authentication token
     * as the password. It also specifies that SSL verification is required.
     * @return
     */
    private static Properties setMySqlConnectionProperties() {
        Properties mysqlConnectionProperties = new Properties();
        mysqlConnectionProperties.setProperty("verifyServerCertificate","true");
        mysqlConnectionProperties.setProperty("useSSL", "true");
        mysqlConnectionProperties.setProperty("user",DB_USER);
        mysqlConnectionProperties.setProperty("password",generateAuthToken());
        return mysqlConnectionProperties;
    }

    /**
     * This method generates the IAM Auth Token.
     * An example IAM Auth Token would look like follows:
     * btusi123---cmz7kenwo2ye---rds---cn-north-1.amazonaws.com.rproxy.goskope.com.cn:3306/?Action=connect&DBUser=iamtestuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20171003T010726Z&X-Amz-SignedHeaders=host&X-Amz-Expires=899&X-Amz-Credential=AKIAPFXHGVDI5RNFO4AQ%2F20171003%2Fcn-north-1%2Frds-db%2Faws4_request&X-Amz-Signature=f9f45ef96c1f770cdad11a53e33ffa4c3730bc03fdee820cfdf1322eed15483b
     * @return
     */
    private static String generateAuthToken() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);

        RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
                .credentials(new AWSStaticCredentialsProvider(awsCredentials)).region(REGION_NAME).build();
        return generator.getAuthToken(GetIamAuthTokenRequest.builder()
                .hostname(RDS_INSTANCE_HOSTNAME).port(RDS_INSTANCE_PORT).userName(DB_USER).build());
    }

    /**
     * This method sets the SSL properties which specify the key store file, its type and password:
     * @throws Exception
     */
    private static void setSslProperties() throws Exception {
        System.setProperty("javax.net.ssl.trustStore", createKeyStoreFile());
        System.setProperty("javax.net.ssl.trustStoreType", KEY_STORE_TYPE);
        System.setProperty("javax.net.ssl.trustStorePassword", DEFAULT_KEY_STORE_PASSWORD);
    }

    /**
     * This method returns the path of the Key Store File needed for the SSL verification during the IAM Database Authentication to
     * the db instance.
     * @return
     * @throws Exception
     */
    private static String createKeyStoreFile() throws Exception {
        return createKeyStoreFile(createCertificate()).getPath();
    }

    /**
     *  This method generates the SSL certificate
     * @return
     * @throws Exception
     */
    private static X509Certificate createCertificate() throws Exception {
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        URL url = new File(SSL_CERTIFICATE).toURI().toURL();
        if (url == null) {
            throw new Exception();
        }
        try (InputStream certInputStream = url.openStream()) {
            return (X509Certificate) certFactory.generateCertificate(certInputStream);
        }
    }

    /**
     * This method creates the Key Store File
     * @param rootX509Certificate - the SSL certificate to be stored in the KeyStore
     * @return
     * @throws Exception
     */
    private static File createKeyStoreFile(X509Certificate rootX509Certificate) throws Exception {
        File keyStoreFile = File.createTempFile(KEY_STORE_FILE_PREFIX, KEY_STORE_FILE_SUFFIX);
        try (FileOutputStream fos = new FileOutputStream(keyStoreFile.getPath())) {
            KeyStore ks = KeyStore.getInstance(KEY_STORE_TYPE, KEY_STORE_PROVIDER);
            ks.load(null);
            ks.setCertificateEntry("rootCaCertificate", rootX509Certificate);
            ks.store(fos, DEFAULT_KEY_STORE_PASSWORD.toCharArray());
        }
        return keyStoreFile;
    }
    
    /**
     * This method clears the SSL properties.
     * @throws Exception
     */
    private static void clearSslProperties() throws Exception {
           System.clearProperty("javax.net.ssl.trustStore");
           System.clearProperty("javax.net.ssl.trustStoreType");
           System.clearProperty("javax.net.ssl.trustStorePassword"); 
    }
    
}
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# IAM 인증 및 AWS SDK for Python (Boto3)를 사용하여 DB 인스턴스에 연결
<a name="UsingWithRDS.IAMDBAuth.Connecting.Python"></a>

아래 설명과 같이 AWS SDK for Python (Boto3)를 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.

**사전 조건**  
다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.
+ [IAM 데이터베이스 인증의 활성화 및 비활성화](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [IAM 인증을 사용하여 데이터베이스 계정 생성](UsingWithRDS.IAMDBAuth.DBAccounts.md)

또한 샘플 코드에서 가져온 라이브러리가 시스템에 있는지 확인합니다.

**예제**  
코드 예제에서는 공유 자격 증명에 프로필을 사용합니다. 자격 증명 지정에 대한 자세한 내용은 AWS SDK for Python (Boto3) 설명서의 [자격 증명](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html)을 참조하십시오.

다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.

이 코드 예제를 실행하려면 [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)가 필요하며 이는 AWS 사이트에서 받을 수 있습니다.

필요하다면 다음 변수 값을 변경합니다.
+ `ENDPOINT` - 액세스할 DB 인스턴스의 엔드포인트입니다.
+ `PORT` – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.
+ `USER` – 액세스할 데이터베이스 계정입니다.
+ `REGION` - DB 인스턴스가 실행되는 AWS 리전입니다.
+ `DBNAME` – 액세스할 데이터베이스입니다.
+ `SSLCERTIFICATE` - Amazon RDS에 대한 SSL 인증서의 전체 경로입니다.

  `ssl_ca`의 경우 SSL 인증서를 지정합니다. SSL 인증서를 다운로드하려면 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 섹션을 참조하세요.

**참고**  
인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결됩니다.

이 코드를 실행하기 전에 [Python Package 색인](https://pypi.org/project/PyMySQL/)에 있는 지침에 따라 PyMySQL 드라이버를 설치하세요.

```
import pymysql
import sys
import boto3
import os

ENDPOINT="mysqldb.123456789012.us-east-1.rds.amazonaws.com"
PORT="3306"
USER="jane_doe"
REGION="us-east-1"
DBNAME="mydb"
os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1'

#gets the credentials from .aws/credentials
session = boto3.Session(profile_name='default')
client = session.client('rds')

token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION)

try:
    conn =  pymysql.connect(auth_plugin_map={'mysql_clear_password':None},host=ENDPOINT, user=USER, password=token, port=PORT, database=DBNAME, ssl_ca='SSLCERTIFICATE', ssl_verify_identity=True, ssl_verify_cert=True)
    cur = conn.cursor()
    cur.execute("""SELECT now()""")
    query_results = cur.fetchall()
    print(query_results)
except Exception as e:
    print("Database connection failed due to {}".format(e))
```

이 코드는 PostgreSQL DB 인스턴스에 연결됩니다.

이 코드를 실행하기 전에 [Psycopg 설명서](https://pypi.org/project/psycopg2/)의 지침에 따라 `psycopg2`를 설치하세요.

```
import psycopg2
import sys
import boto3
import os

ENDPOINT="postgresmydb.123456789012.us-east-1.rds.amazonaws.com"
PORT="5432"
USER="jane_doe"
REGION="us-east-1"
DBNAME="mydb"

#gets the credentials from .aws/credentials
session = boto3.Session(profile_name='RDSCreds')
client = session.client('rds')

token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION)

try:
    conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USER, password=token, sslrootcert="SSLCERTIFICATE")
    cur = conn.cursor()
    cur.execute("""SELECT now()""")
    query_results = cur.fetchall()
    print(query_results)
except Exception as e:
    print("Database connection failed due to {}".format(e))
```

프록시를 통해 DB 인스턴스에 연결하려는 경우 [IAM 인증을 사용하여 데이터베이스에 연결](rds-proxy-connecting.md#rds-proxy-connecting-iam)을 참조하세요.

# IAM DB 인증 문제 해결
<a name="UsingWithRDS.IAMDBAuth.Troubleshooting"></a>

여기에서는 몇 가지 일반적인 IAM DB 인증 문제에 대한 문제 해결 아이디어와 IAM DB 인증에 대한 CloudWatch 로그 관련 정보를 확인할 수 있습니다.

## IAM DB 인증 오류 로그를 CloudWatch Logs로 내보내기
<a name="UsingWithRDS.IAMDBAuth.Troubleshooting.ErrorLogs"></a>

IAM DB 인증 오류 로그는 데이터베이스 호스트에 저장되며 이러한 로그를 CloudWatch Logs 계정으로 내보낼 수 있습니다. 이 페이지의 로그 및 문제 해결 방법을 사용하여 IAM DB 인증 문제를 해결합니다.

콘솔, AWS CLI 및 RDS API에서 CloudWatch Logs로 로그 내보내기를 사용 설정할 수 있습니다. 콘솔 지침은 [Amazon CloudWatch Logs에 데이터베이스 로그 게시](USER_LogAccess.Procedural.UploadtoCloudWatch.md)(을)를 참조하세요.

AWS CLI에서 DB 인스턴스 를 만들 때 IAM DB 인증 오류 로그를 CloudWatch Logs로 내보내려면 다음 명령을 사용합니다.

```
aws rds create-db-instance --db-instance-identifier mydbinstance \
--region us-east-1 \
--db-instance-class db.t3.large \
--allocated-storage 50 \
--engine postgres \
--engine-version 16 \
--port 5432 \
--master-username master \
--master-user-password password \
--publicly-accessible \
--enable-iam-database-authentication \
--enable-cloudwatch-logs-exports=iam-db-auth-error
```

AWS CLI에서 DB 인스턴스 를 수정할 때 IAM DB 인증 오류 로그를 CloudWatch Logs로 내보내려면 다음 명령을 사용합니다.

```
aws rds modify-db-instance --db-instance-identifier mydbinstance \
--region us-east-1 \
--cloudwatch-logs-export-configuration '{"EnableLogTypes":["iam-db-auth-error"]}'
```

DB 인스턴스 가 IAM DB 인증 로그를 CloudWatch Logs로 내보내고 있는지 확인하려면 `describe-db-instances` 명령의 출력에서 `EnabledCloudwatchLogsExports` 파라미터가 `iam-db-auth-error`로 설정되어 있는지 확인합니다.

```
aws rds describe-db-instances --region us-east-1 --db-instance-identifier mydbinstance
            ...
            
             "EnabledCloudwatchLogsExports": [
                "iam-db-auth-error"
            ],
            ...
```

## IAM DB 인증 CloudWatch 지표
<a name="UsingWithRDS.IAMDBAuth.Troubleshooting.CWMetrics"></a>

Amazon RDS 는 IAM DB 인증에 대한 실시간에 가까운 지표를 Amazon CloudWatch 계정에 제공합니다. 다음 표에는 CloudWatch를 사용하여 사용할 수 있는 IAM DB 인증 지표가 나열되어 있습니다.


| 지표 | 설명 | 
| --- | --- | 
|  `IamDbAuthConnectionRequests`  |  IAM DB 인증으로 구성된 총 연결 요청 개수입니다.  | 
|  `IamDbAuthConnectionSuccess`  |  성공한 IAM DB 인증 요청의 총 개수입니다.  | 
|  `IamDbAuthConnectionFailure`  |  실패한 IAM DB 인증 요청의 총 개수입니다.  | 
|  `IamDbAuthConnectionFailureInvalidToken`  | 유효하지 않은 토큰으로 인해 실패한 IAM DB 인증 요청의 총 개수입니다. | 
|  `IamDbAuthConnectionFailureInsufficientPermissions`  |  잘못된 정책 또는 권한으로 인해 실패한 IAM DB 인증 요청의 총 개수입니다.  | 
|  `IamDbAuthConnectionFailureThrottling`  |  IAM DB 인증 스로틀링으로 인해 실패한 IAM DB 인증 요청의 총 개수입니다.  | 
|  `IamDbAuthConnectionFailureServerError`  |  IAM DB 인증 기능의 내부 서버 오류로 인해 실패한 IAM DB 인증 요청의 총 개수입니다.  | 

## 일반적인 문제 및 해결 방법
<a name="UsingWithRDS.IAMDBAuth.Troubleshooting.IssuesSolutions"></a>

 IAM DB 인증 사용 시 다음과 같은 문제가 발생할 수 있습니다. 표에 나와 있는 문제 해결 단계를 사용하여 문제를 해결합니다.


| 오류 | 지표 | 원인 | 솔루션 | 
| --- | --- | --- | --- | 
|  `[ERROR] Failed to authenticate the connection request for user db_user because the provided token is malformed or otherwise invalid. (Status Code: 400, Error Code: InvalidToken)`  |  `IamDbAuthConnectionFailure` `IamDbAuthConnectionFailureInvalidToken`  |  연결 요청의 IAM DB 인증 토큰이 유효한 SigV4a 토큰이 아니거나 올바른 형식이 아닙니다.  |  애플리케이션에서 토큰 생성 전략을 확인합니다. 경우에 따라 토큰을 유효한 형식으로 전달해야 합니다. 토큰을 잘라내거나 잘못된 문자열 형식으로 지정하면 토큰이 무효화됩니다.  | 
|  `[ERROR] Failed to authenticate the connection request for user db_user because the token age is longer than 15 minutes. (Status Code: 400, Error Code:ExpiredToken)`  |  `IamDbAuthConnectionFailure` `IamDbAuthConnectionFailureInvalidToken`  |  IAM DB 인증 토큰이 만료되었습니다. 토큰은 15분 동안만 유효합니다.  |  애플리케이션에서 토큰 캐싱 및/또는 토큰 재사용 로직을 확인합니다. 15분보다 오래된 토큰은 재사용해서는 안 됩니다.  | 
|  `[ERROR] Failed to authorize the connection request for user db_user because the IAM policy assumed by the caller 'arn:aws:sts::123456789012:assumed-role/ <RoleName>/ <RoleSession>' is not authorized to perform `rds-db:connect` on the DB instance. (Status Code: 403, Error Code:NotAuthorized)`  |  `IamDbAuthConnectionFailure` `IamDbAuthConnectionFailureInsufficientPermissions`  |  이 오류는 다음과 같은 이유 때문일 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Troubleshooting.html)  |  애플리케이션에서 수임하는 IAM 역할 및/또는 정책을 확인합니다. DB에 연결할 때와 동일한 정책을 수임하여 토큰을 생성해야 합니다.  | 
|  `[ERROR] Failed to authorize the connection request for user db_user due to IAM DB authentication throttling. (Status Code: 429, Error Code: ThrottlingException)`  |  `IamDbAuthConnectionFailure` `IamDbAuthConnectionFailureThrottling`  | 짧은 시간 내에 DB에 너무 많은 연결 요청을 하고 있습니다. IAM DB 인증 스로틀링 한도는 초당 200개의 연결입니다. |  IAM 인증으로 새 연결을 설정하는 속도를 줄입니다. 애플리케이션에서 설정된 연결을 재사용하려면 RDS 프록시를 사용하여 연결 풀링을 구현하는 것이 좋습니다.  | 
|  `[ERROR] Failed to authorize the connection request for user db_user due to an internal IAM DB authentication error. (Status Code: 500, Error Code: InternalError)`  |  `IamDbAuthConnectionFailure` `IamDbAuthConnectionFailureThrottling` |  IAM DB 인증으로 DB 연결을 승인하는 동안 내부 오류가 발생했습니다.  |  문제를 조사하려면 https://aws.amazon.com/premiumsupport/를 통해 문의하시기 바랍니다.  | 

# Amazon RDS 자격 증명 및 액세스 문제 해결
<a name="security_iam_troubleshoot"></a>

다음 정보를 사용하여 Amazon RDS 및 IAM에서 발생할 수 있는 공통적인 문제를 진단하고 수정할 수 있습니다.

**Topics**
+ [

## Amazon RDS에서 작업을 수행할 권한이 없음
](#security_iam_troubleshoot-no-permissions)
+ [

## iam:PassRole을 수행하도록 인증되지 않음
](#security_iam_troubleshoot-passrole)
+ [

## 내 AWS 계정 외부의 사용자가 내 Amazon RDS 리소스에 액세스할 수 있도록 하려고 합니다.
](#security_iam_troubleshoot-cross-account-access)

## Amazon RDS에서 작업을 수행할 권한이 없음
<a name="security_iam_troubleshoot-no-permissions"></a>

AWS Management Console에서 작업을 수행할 권한이 없다는 메시지가 나타나는 경우 관리자에게 문의하여 도움을 받아야 합니다. 관리자는 로그인 보안 인증 정보를 제공한 사람입니다.

다음 예제 오류는 `mateojackson` 사용자가 콘솔을 사용하여 *위젯*에 대한 세부 정보를 보려고 하지만 `rds:GetWidget` 권한이 없는 경우에 발생합니다.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: rds:GetWidget on resource: my-example-widget
```

이 경우, Mateo는 `my-example-widget` 작업을 사용하여 `rds:GetWidget` 리소스에 액세스하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

## iam:PassRole을 수행하도록 인증되지 않음
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` 태스크를 수행할 권한이 없다는 오류가 수신되면 관리자에게 문의하여 도움을 받아야 합니다. 관리자는 로그인 보안 인증 정보를 제공한 사람입니다. 역할을 Amazon RDS로 전달하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

일부 AWS 서비스에서는 새 서비스 역할 또는 서비스 연결 역할을 생성하는 대신, 해당 서비스에 기존 역할을 전달할 수 있습니다. 이렇게 하려면 사용자가 서비스에 역할을 전달할 수 있는 권한을 가지고 있어야 합니다.

다음 예제 오류는 이름이 `marymajor`인 사용자가 콘솔을 사용하여 Amazon RDS에서 작업을 수행하려고 하는 경우에 발생합니다. 하지만 태스크를 수행하려면 서비스에 서비스 역할이 부여한 권한이 있어야 합니다. Mary는 서비스에 역할을 전달할 수 있는 권한을 가지고 있지 않습니다.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

이 경우 Mary는 `iam:PassRole` 태스크를 수행하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

## 내 AWS 계정 외부의 사용자가 내 Amazon RDS 리소스에 액세스할 수 있도록 하려고 합니다.
<a name="security_iam_troubleshoot-cross-account-access"></a>

다른 계정의 사용자 또는 조직 외부의 사람이 리소스에 액세스할 때 사용할 수 있는 역할을 생성할 수 있습니다. 역할을 수임할 신뢰할 수 있는 사람을 지정할 수 있습니다. 리소스 기반 정책 또는 액세스 제어 목록(ACL)을 지원하는 서비스의 경우, 이러한 정책을 사용하여 다른 사람에게 리소스에 대한 액세스 권한을 부여할 수 있습니다.

자세히 알아보려면 다음을 참조하십시오.
+ Amazon RDS에서 이러한 기능을 지원하는지 여부를 알아보려면 [Amazon RDS에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 단원을 참조하십시오.
+ 소유하고 있는 AWS 계정의 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [자신이 소유한 다른 AWS 계정의 IAM 사용자에 대한 액세스 권한 제공](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)을 참조하세요.
+ 리소스에 대한 액세스 권한을 서드 파티 AWS 계정에게 제공하는 방법을 알아보려면 *IAM 사용 설명서의 [서드 파티](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)가 소유한 AWS 계정에 대한 액세스 제공*을참조하세요.
+ ID 페더레이션을 통해 액세스 권한을 제공하는 방법을 알아보려면 *IAM 사용 설명서*의 [외부에서 인증된 사용자에게 액세스 권한 제공(ID 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)을 참조하십시오.
+ 교차 계정 액세스를 위한 역할과 리소스 기반 정책 사용의 차이점을 알아보려면 *IAM 사용 설명서*의 [IAM 역할과 리소스 기반 정책의 차이](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)를 참조하십시오.

# Amazon RDS 의 로깅 및 모니터링
<a name="Overview.LoggingAndMonitoring"></a>

모니터링은 Amazon RDS 와 AWS 솔루션의 신뢰성, 가용성 및 성능을 유지하는 중요한 역할을 합니다. 다중 지점 실패가 발생할 경우 보다 쉽게 디버깅할 수 있도록 AWS 솔루션의 모든 부분으로부터 모니터링 데이터를 수집해야 합니다. AWS는 Amazon RDS 리소스를 모니터링하고 잠재적 인시던트에 대응하기 위한 여러 도구를 제공합니다.

**Amazon CloudWatch 경보**  
Amazon CloudWatch 경보를 사용하면 지정한 기간 동안 단일 지표를 감시합니다. 지표가 지정된 임계값을 초과하면 Amazon SNS 주제 또는 AWS Auto Scaling 정책으로 알림이 전송됩니다. CloudWatch 경보는 단순히 특정 상태에 있다고 해서 작업을 호출하지 않습니다. 대신, 상태가 변경되어 지정된 기간 동안 유지되어야 합니다.

**AWS CloudTrail 로그**  
CloudTrail은 Amazon RDS 에서 사용자, 역할 또는 AWS 서비스가 수행한 작업의 기록을 제공합니다. CloudTrail은 콘솔의 호출과 Amazon RDS API 작업에 대한 코드 호출을 포함하여 Amazon RDS 에 대한 모든 API 직접 호출을 이벤트로 캡처합니다. CloudTrail에서 수집하는 정보를 사용하여 Amazon RDS 에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다. 자세한 내용은 섹션을 참조하세요[AWS CloudTrail에서 Amazon RDS API 호출 모니터링](logging-using-cloudtrail.md)

**확장 모니터링**  
 Amazon RDS 는 DB 인스턴스 가 실행되는 운영 체제(OS)에 대한 측정치를 실시간으로 제공합니다. 콘솔을 사용하여 DB 인스턴스 에 대한 측정치를 보거나, 선택한 모니터링 시스템의 Amazon CloudWatch Logs에서 확장 모니터링 JSON 출력을 사용할 수 있습니다. 자세한 내용은 섹션을 참조하세요[Enhanced Monitoring을 사용하여 OS 지표 모니터링](USER_Monitoring.OS.md)

**Amazon RDS 성능 개선 도우미**  
성능 개선 도우미는 기존 Amazon RDS 모니터링 기능을 확장한 것으로서 데이터베이스 성능을 표시하여 영향을 미치는 성능 문제를 분석하는 데 효과적입니다. 성능 개선 도우미 대시보드가 데이터베이스 부하를 시각화하여 대기 시간, SQL 문, 호스트 또는 사용자를 기준으로 부하를 필터링합니다. 자세한 내용은 섹션을 참조하세요[성능 개선 도우미를 통한 Amazon RDS 모니터링](USER_PerfInsights.md)

**데이터베이스 로그**  
AWS Management Console 콘솔, AWS CLI 또는 RDS API를 사용하여 데이터베이스 로그를 보고 다운로드하고 조사할 수 있습니다. 자세한 내용은 섹션을 참조하세요[Amazon RDS 로그 파일 모니터링](USER_LogAccess.md)

** Amazon RDS 권장 사항**  
 Amazon RDS 에서 데이터베이스 리소스에 대한 자동 권장 사항을 제공합니다. 이러한 권장 사항은 DB 인스턴스 구성, 사용량 및 성능 데이터 분석을 통해 모범 사례 지침을 제공합니다. 자세한 내용은 섹션을 참조하세요[Amazon RDS의 권장 사항](monitoring-recommendations.md)

** Amazon RDS 이벤트 알림**  
 Amazon RDS 는 Amazon RDS 이벤트 발생 시 Amazon Simple Notification Service(Amazon SNS)를 사용하여 알림 서비스를 제공합니다. 이 서비스는 AWS 리전에 따라 Amazon SNS가 지원하는 알림 메시지 형식에 따라 이메일, 문자 또는 HTTP 엔드포인트 호출 등이 될 수 있습니다. 자세한 내용은 섹션을 참조하세요[Amazon RDS 이벤트 알림 작업](USER_Events.md)

**AWS Trusted Advisor**  
Trusted Advisor는 수십만 명의 AWS 고객에게 서비스를 제공하면서 익힌 모범 사례를 활용합니다. Trusted Advisor는 AWS 환경을 검사한 후 비용 절감, 시스템 가용성 및 성능 향상 또는 보안 격차를 해결할 기회가 있을 때 권장 사항을 제시합니다. 모든 AWS 고객은 5개의 Trusted Advisor 점검 항목에 액세스할 수 있습니다. Business 또는 Enterprise Support 플랜을 보유한 고객은 모든 Trusted Advisor 점검 항목을 볼 수 있습니다.  
Trusted Advisor에는 다음과 같이 Amazon RDS 관련 검사가 있습니다.  
+  Amazon RDS 유휴 DB 인스턴스
+  Amazon RDS 보안 그룹 액세스 위험
+  Amazon RDS 백업
+  Amazon RDS 다중 AZ
이러한 사항에 대한 자세한 정보를 알고 싶다면 [Trusted Advisor Best Practices (Checks)](https://aws.amazon.com/premiumsupport/trustedadvisor/best-practices/) 단원을 참조하십시오.

Amazon RDS 모니터링에 대한 자세한 내용은 [Amazon RDS 인스턴스에서 지표 모니터링](CHAP_Monitoring.md) 섹션을 참조하세요.

# Amazon RDS의 규정 준수 확인
<a name="RDS-compliance"></a>

서드 파티 감사자는 여러 AWS 규정 준수 프로그램의 일환으로 Amazon RDS의 보안 및 규정 준수를 평가합니다. 여기에는 SOC, PCI, FedRAMP, HIPAA 등이 포함됩니다.

특정 규정 준수 프로그램 범위에 속하는 AWS 서비스의 목록은 [규정 준수 프로그램 제공 AWS 범위 내 서비스](https://aws.amazon.com/compliance/services-in-scope/)를 참조하세요. 일반 정보는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/)을 참조하세요.

AWS Artifact를 사용하여 제3자 감사 보고서를 다운로드할 수 있습니다. 자세한 내용은 [AWS Artifact의 보고서 다운로드](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)를 참조하십시오.

Amazon RDS 사용 시 규정 준수 책임은 데이터의 민감도, 조직의 규정 준수 목표 및 관련 법률과 규정에 따라 결정됩니다. AWS에서는 규정 준수를 지원할 다음과 같은 리소스를 제공합니다.
+ [보안 및 규정 준수 빠른 시작 안내서](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance) – 이 배포 안내서에서는 아키텍처 고려 사항에 대해 설명하고 보안 및 규정 준수에 중점을 둔 기본 AWS 환경을 배포하기 위한 단계를 제공합니다.
+ [Architecting for HIPAA Security and Compliance on Amazon Web Services](https://docs.aws.amazon.com/pdfs/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.pdf)(Amazon Web Services에서 HIPAA 보안 및 규정 준수를 위한 설계) - 이 백서는 기업에서 AWS를 사용하여 HIPAA를 준수하는 애플리케이션을 생성하는 방법을 설명합니다.
+ [AWS 규정 준수 리소스](https://aws.amazon.com/compliance/resources/) 이 워크북 및 안내서는 귀사의 산업 및 위치에 적용될 수 있습니다.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) – 이 AWS 서비스로 리소스 구성이 내부 관행, 업계 지침 및 규정을 준수하는 정도를 평가할 수 있습니다.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) – 이 AWS 서비스(은)는 AWS 내 보안 상태에 대한 포괄적인 보기를 제공합니다. Security Hub CSPM은 보안 컨트롤을 사용하여 AWS 리소스를 평가하고 보안 업계 표준 및 모범 사례에 대한 규정 준수를 확인합니다. 지원되는 서비스 및 제어 목록은 [Security Hub CSPM 제어 참조](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-controls-reference.html)를 참조하세요.

# Amazon RDS의 복원성
<a name="disaster-recovery-resiliency"></a>

AWS 글로벌 인프라는 AWS 리전 및 가용 영역을 중심으로 구축됩니다. AWS 리전은 물리적으로 분리되고 격리된 다수의 가용 리전을 제공하며 이러한 가용 리전은 짧은 지연 시간, 높은 처리량 및 높은 중복성을 갖춘 네트워크에 연결되어 있습니다. 가용 영역을 사용하면 중단 없이 가용 영역 간에 자동으로 장애 조치가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또는 다중 데이터 센터 인프라보다 가용성, 내결함성, 확장성이 뛰어납니다.

AWS 리전 및 가용 영역에 대한 자세한 내용은 [AWS 글로벌 인프라](https://aws.amazon.com/about-aws/global-infrastructure/)를 참조하십시오.

AWS 글로벌 인프라 외에 Amazon RDS도 데이터 복원성과 백업 요구 사항을 지원하는 여러 가지 기능을 제공합니다.

## 백업 및 복원
<a name="disaster-recovery-resiliency.backup-restore"></a>

Amazon RDS는 DB 인스턴스의 자동 백업을 생성하고 저장합니다. Amazon RDS는 개별 데이터베이스가 아닌 전체 DB 인스턴스를 백업하여 DB 인스턴스의 스토리지 볼륨 스냅샷을 생성합니다.

Amazon RDS는 DB 인스턴스 백업 기간 동안 DB 인스턴스의 자동 백업을 생성합니다. Amazon RDS는 사용자가 지정한 백업 보존 기간에 따라 DB 인스턴스의 자동 백업을 저장합니다. 필요할 경우 백업 보존 기간 중 어느 특정 시점으로든 데이터베이스를 복구할 수 있습니다. 또한 수동으로 DB 스냅샷을 생성하여 DB 인스턴스를 백업할 수도 있습니다.

원본 DB 인스턴스가 장애로 중단될 경우 재해 복구 솔루션인 이 DB 스냅샷에서 복원하여 DB 인스턴스를 생성할 수 있습니다.

자세한 내용은 [데이터 백업, 복원 및 내보내기](CHAP_CommonTasks.BackupRestore.md) 섹션을 참조하세요.

## 복제
<a name="disaster-recovery-resiliency.replication"></a>

Amazon RDS는 MariaDB, MySQL, Oracle 및 PostgreSQL DB 엔진의 기본 복제 기능을 사용하여 원본 DB 인스턴스의 읽기 전용 복제본이라고 하는 특수한 유형의 DB 인스턴스를 생성할 수 있습니다. 원본 DB 인스턴스에 적용된 업데이트는 읽기 전용 복제본에 비동기식으로 적용됩니다. 애플리케이션에서 읽기 전용 복제본으로 읽기 쿼리를 라우팅하여 원본 DB 인스턴스의 로드를 줄일 수 있습니다. 읽기 전용 복제본을 사용하면 읽기 중심의 데이터베이스 워크로드에 대한 단일 DB 인스턴스의 용량 제한에서 벗어나 탄력적으로 늘릴 수 있습니다. 원본 DB 인스턴스가 실패할 경우 재해 복구 솔루션으로 읽기 전용 복제본을 독립형 인스턴스로 승격할 수 있습니다. 일부 DB 엔진의 경우, Amazon RDS에서도 다른 복제 옵션이 지원됩니다.

자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 섹션을 참조하세요.

## Failover
<a name="disaster-recovery-resiliency.failover"></a>

Amazon RDS는 다중 AZ 배포를 사용해 DB 인스턴스에 고가용성과 장애 조치 기능을 지원합니다. Amazon RDS는 다양한 기술을 이용해 장애 조치 지원을 제공합니다. Oracle, PostgreSQL, MySQL 및 MariaDB DB 인스턴스용 다중 AZ 배포는 Amazon의 장애 조치 기술을 사용합니다. SQL Server DB 인스턴스는 SQL Server 데이터베이스 미러링(DBM)을 사용합니다.

자세한 내용은 [Amazon RDS에 대한 다중 AZ 배포 구성 및 관리](Concepts.MultiAZ.md) 섹션을 참조하세요.

# Amazon RDS의 인프라 보안
<a name="infrastructure-security"></a>

관리형 서비스인 Amazon Relational Database Service는 AWS 전역 네트워크 보안으로 보호됩니다. AWS 보안 서비스와 AWS의 인프라 보호 방법에 대한 자세한 내용은 [AWS 클라우드 보안](https://aws.amazon.com/security/)을 참조하세요. 인프라 보안에 대한 모범 사례를 사용하여 AWS 환경을 설계하려면 *보안 원칙 AWS Well‐Architected Framework*의 [인프라 보호](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)를 참조하세요.

AWS에서 게시한 API 호출을 사용하여 네트워크를 통해 Amazon RDS에 액세스합니다. 고객은 다음을 지원해야 합니다.
+ Transport Layer Security(TLS) TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군 Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

또한 Amazon RDS는 인프라 보안을 지원하는 기능을 제공합니다.

## 보안 그룹
<a name="infrastructure-security.security-groups"></a>

보안 그룹은 DB 인스턴스에서 송수신되는 트래픽에 대한 액세스를 제어합니다. 기본적으로 DB 인스턴스에 대한 네트워크 액세스는 해제되어 있습니다. IP 주소 범위, 포트 또는 보안 그룹에서 액세스를 허용하는 보안 그룹의 규칙을 지정할 수 있습니다. 수신 규칙이 설정되면 동일한 규칙이 해당 보안 그룹과 연결된 모든 DB 인스턴스에 적용됩니다.

자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하세요.

## 퍼블릭 액세스 가능성
<a name="infrastructure-security.publicly-accessible"></a>

Amazon VPC 서비스 기반 Virtual Private Cloud(VPC)에서 DB 인스턴스를 시작할 때 해당 DB 인스턴스의 퍼블릭 액세스를 켜거나 끌 수 있습니다. *퍼블릭 액세스 가능성* 파라미터를 사용하여 사용자가 생성한 DB 인스턴스가 퍼블릭 IP 주소로 확인되는 DNS 이름을 가지도록 지정할 수 있습니다. 이 파라미터를 사용하여 DB 인스턴스에 대한 퍼블릭 액세스 여부를 지정할 수 있습니다. *Public accessibility* 파라미터를 수정하여 퍼블릭 액세스 가능성을 켜거나 끄도록 DB 인스턴스를 수정할 수 있습니다.

자세한 내용은 [VPC에 있는 DB 인스턴스를 인터넷에서 숨기기](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Hiding) 섹션을 참조하세요.

**참고**  
DB 인스턴스가 VPC에 있지만 공개적으로 액세스할 수 없는 경우 AWS Site-to-Site VPN 연결 또는 Direct Connect 연결을 사용하여 프라이빗 네트워크에서 액세스할 수도 있습니다. 자세한 내용은 [인터네트워크 트래픽 개인 정보](inter-network-traffic-privacy.md) 단원을 참조하세요.

# Amazon RDS API 및 인터페이스 VPC 엔드포인트(AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

*인터페이스VPC 엔드포인트*를 생성하여 VPC와 Amazon RDS API 엔드포인트 간에 프라이빗 연결을 설정할 수 있습니다. 인터페이스 엔드포인트는 로 구동됩니다[AWS PrivateLink](https://aws.amazon.com/privatelink) 

AWS PrivateLink를 사용하면 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 Direct Connect 연결 없이 Amazon RDS API 작업에 비공개로 액세스할 수 있습니다. VPC의 DB 인스턴스는 DB 인스턴스 를 시작, 수정 또는 종료하기 위해 Amazon RDS API 엔드포인트와 통신하는 데 퍼블릭 IP 주소가 필요하지 않습니다. 또한 DB 인스턴스가 사용 가능한 RDS API 작업을 사용하기 위해 퍼블릭 IP 주소가 필요하지 않습니다. VPC와 Amazon RDS 간의 트래픽은 Amazon 네트워크를 벗어나지 않습니다.

각 인터페이스 엔드포인트는 서브넷에서 하나 이상의 탄력적 네트워크 인터페이스로 표현됩니다. 탄력적 네트워크 인터페이스에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [탄력적 네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)를 참조하세요.

VPC 엔드포인트에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 VPC 엔드포인트(AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)를 참조하세요. RDS API 작업에 대한 자세한 내용은 [Amazon RDS API 참조](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/)를 참조하세요.

DB 인스턴스에 연결하기 위해 인터페이스 VPC 엔드포인트가 필요하지 않습니다. 자세한 내용은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md)을 참조하세요.

## VPC 엔드포인트에 대한 고려 사항
<a name="vpc-endpoint-considerations"></a>

Amazon RDS API 엔드포인트에 대한 인터페이스 VPC 엔드포인트를 설정하기 전에 *Amazon VPC 사용 설명서*에서 [인터페이스 엔드포인트 속성 및 제한 사항](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations)을 검토해야 합니다.

Amazon RDS 리소스 관리와 관련된 모든 RDS API 작업은 AWS PrivateLink를 사용하여 VPC에서 사용할 수 있습니다.

VPC 엔드포인트 정책은 RDS API 엔드포인트에 대해 지원됩니다. 기본적으로, 엔드포인트를 통해 RDS API 작업에 대한 전체 액세스가 허용됩니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)를 참조하세요.

## 가용성
<a name="rds-and-vpc-interface-endpoints-availability"></a>

현재 Amazon RDS API가 VPC 엔드포인트를 지원하는 AWS 리전은 다음과 같습니다.
+ 미국 동부(오하이오)
+ 미국 동부(버지니아 북부)
+ 미국 서부(캘리포니아 북부)
+ 미국 서부(오리건)
+ 아프리카(케이프타운)
+ 아시아 태평양(홍콩)
+ 아시아 태평양(뭄바이)
+ 아시아 태평양(뉴질랜드)
+ 아시아 태평양(오사카)
+ 아시아 태평양(서울)
+ 아시아 태평양(싱가포르)
+ 아시아 태평양(시드니)
+ 아시아 태평양(타이베이)
+ 아시아 태평양(태국)
+ 아시아 태평양(도쿄)
+ 캐나다(중부)
+ 캐나다 서부(캘거리)
+ 중국(베이징)
+ 중국(닝샤)
+ 유럽(프랑크푸르트)
+ 유럽(취리히)
+ 유럽(아일랜드)
+ 유럽(런던)
+ 유럽(파리)
+ 유럽(스톡홀름)
+ 유럽(밀라노)
+ 이스라엘(텔아비브)
+ 멕시코(중부)
+ 중동(바레인)
+ 남아메리카(상파울루)
+ AWS GovCloud(미국 동부)
+ AWS GovCloud(미국 서부)

## Amazon RDS API에 대한 인터페이스 VPC 엔드포인트 생성
<a name="vpc-endpoint-create"></a>

Amazon VPC 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Amazon RDS API에 대한 VPC 엔드포인트를 생성할 수 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)을 참조하십시오.

서비스 이름 `com.amazonaws.region.rds`을 사용하여 Amazon RDS API에 대한 VPC 엔드포인트를 생성합니다.

중국의 AWS 리전을 제외하고, 엔드포인트에 프라이빗 DNS를 활성화한 경우 AWS 리전에 대한 기본 DNS 이름(예:`rds.us-east-1.amazonaws.com`)을 사용하여 VPC 엔드포인트를 통해 Amazon RDS에 API 요청을 수행할 수 있습니다. 중국(베이징) 및 중국(닝샤) AWS 리전의 경우 각각 `rds-api---cn-north-1.amazonaws.com.rproxy.goskope.com.cn` 및 `rds-api---cn-northwest-1.amazonaws.com.rproxy.goskope.com.cn`을 사용하여 VPC 엔드포인트를 통해 API 요청을 수행할 수 있습니다.

자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 엔드포인트를 통해 서비스 액세스](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#access-service-though-endpoint)를 참조하십시오.

## Amazon RDS API에 대한 VPC 엔드포인트 정책 생성
<a name="vpc-endpoint-policy"></a>

Amazon RDS API에 대한 액세스를 제어하는 VPC 엔드포인트에 엔드포인트 정책을 연결할 수 있습니다. 이 정책은 다음 정보를 지정합니다.
+ 작업을 수행할 수 있는 보안 주체.
+ 수행할 수 있는 작업.
+ 작업을 수행할 수 있는 리소스.

자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)를 참조하십시오.

**예제: Amazon RDS API 작업에 대한 VPC 엔드포인트 정책**  
다음은 Amazon RDS API에 대한 엔드포인트 정책의 예입니다. 이 정책은 엔드포인트에 연결될 때 모든 리소스의 모든 보안 주체에 대한 액세스 권한을 나열된 Amazon RDS API 작업에 부여합니다.

```
{
   "Statement":[
      {
         "Principal":"*",
         "Effect":"Allow",
         "Action":[
            "rds:CreateDBInstance",
            "rds:ModifyDBInstance",
            "rds:CreateDBSnapshot"
         ],
         "Resource":"*"
      }
   ]
}
```

**예제: 지정된 AWS 계정의 모든 액세스를 거부하는 VPC 엔드포인트 정책**  
다음 VPC 엔드포인트 정책은 AWS 계정 `123456789012`가 엔드포인트를 사용하는 리소스에 대한 모든 액세스를 거부합니다. 이 정책은 다른 계정의 모든 작업을 허용합니다.

```
{
  "Statement": [
    {
      "Action": "*",
      "Effect": "Allow",
      "Resource": "*",
      "Principal": "*"
    },
    {
      "Action": "*",
      "Effect": "Deny",
      "Resource": "*",
      "Principal": { "AWS": [ "123456789012" ] }
     }
   ]
}
```

# Amazon RDS 의 보안 모범 사례
<a name="CHAP_BestPractices.Security"></a>

AWS Identity and Access Management(IAM) 계정을 사용해 Amazon RDS API 작업, 특히 Amazon RDS 리소스를 만들거나, 수정하거나, 삭제하는 작업에 대한 액세스를 제어합니다. 이러한 리소스 중에는 DB 인스턴스 , 보안 그룹 및 파라미터 그룹이 있습니다. 또한 IAM 을 사용해 DB 인스턴스 백업 및 복구 같은 공통 관리 작업을 수행하는 작업을 제어합니다.
+ 본인을 포함하여 Amazon RDS 리소스를 관리하는 각 개인에 대해 개별 사용자를 만듭니다. AWS 루트 자격 증명을 사용하여 Amazon RDS 리소스를 관리하지 마세요.
+ 각 사용자에게 각자의 임무를 수행하는 데 필요한 최소 권한 집합을 부여합니다.
+ IAM 그룹을 사용해 여러 사용자에 대한 권한을 효과적으로 관리합니다.
+ IAM 자격 증명을 정기적으로 순환합니다.
+ Amazon RDS 보안 암호를 자동으로 교체할 수 있도록 AWS Secrets Manager를 구성합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*에서 [AWS Secrets Manager 비밀 교체](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)를 참조하세요. AWS Secrets Manager 프로그래밍 방식에서 자격 증명을 검색할 수도 있습니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [비밀 값 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_retrieve-secret.html)을 참조하세요.

Amazon RDS 보안에 대한 자세한 내용은 [Amazon RDS 의 보안](UsingWithRDS.md) 섹션을 참조하세요. IAM에 대한 자세한 내용은 [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/Welcome.html) 단원을 참조하십시오. IAM 모범 사례에 대한 자세한 내용은 [IAM 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPractices.html) 단원을 참조하십시오.

AWS Security Hub CSPM는 보안 제어를 사용하여 리소스 구성 및 보안 표준을 평가하여 다양한 규정 준수 프레임워크를 준수할 수 있도록 지원합니다. Security Hub CSPM을 사용하여 RDS 리소스를 평가하는 방법에 대한 자세한 내용은 AWS Security Hub 사용 설명서의 [Amazon Relational Database Service 제어](https://docs.aws.amazon.com/securityhub/latest/userguide/rds-controls.html)를 참조하세요.

Security Hub CSPM을 사용하여 보안 모범 사례와 관련된 RDS의 사용량을 모니터링할 수 있습니다. 자세한 내용은 [AWS Security Hub CSPM란 무엇인가요?](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)를 참조하세요.

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 마스터 사용자의 암호를 변경합니다. SQL 클라이언트 등과 같은 다른 도구를 사용하여 마스터 사용자 암호를 변경할 경우 의도치 않게 사용자에 대해 권한이 취소될 수 있습니다.

# 보안 그룹을 통한 액세스 제어
<a name="Overview.RDSSecurityGroups"></a>

VPC 보안 그룹은 DB 인스턴스 에서 송수신되는 트래픽에 대한 액세스를 제어합니다. 기본적으로 DB 인스턴스 에 대한 네트워크 액세스는 해제되어 있습니다. IP 주소 범위, 포트 또는 보안 그룹에서 액세스를 허용하는 보안 그룹의 규칙을 지정할 수 있습니다. 수신 규칙이 설정되면 동일한 규칙이 해당 보안 그룹과 연결된 모든 DB 인스턴스 에 적용됩니다. 보안 그룹에서 최대 20개의 규칙을 지정할 수 있습니다.

## VPC 보안 그룹 개요
<a name="Overview.RDSSecurityGroups.VPCSec"></a>

각 VPC 보안 그룹 규칙을 설정하면 특정 소스가 해당 VPC 보안 그룹과 연결되어 있는 VPC의 DB 인스턴스 에 액세스할 수 있습니다. 소스는 주소 범위(예: 203.0.113.0/24) 또는 다른 VPC 보안 그룹일 수 있습니다. VPC 보안 그룹을 소스로 지정하면 소스 VPC 보안 그룹을 사용하는 모든 인스턴스(일반적으로 애플리케이션 서버)에서 수신 트래픽이 허용됩니다. VPC 보안 그룹에는 인바운드 및 아웃바운드 트래픽을 모두 제어하는 규칙이 있을 수 있습니다. 그러나 아웃바운드 트래픽 규칙은 일반적으로 DB 인스턴스 에 적용되지 않습니다. 아웃바운드 트래픽 규칙은 DB 인스턴스 가 클라이언트 역할을 하는 경우에만 적용됩니다. 예를 들면 아웃바운드 트래픽 규칙은 아웃바운드 데이터베이스 링크가 있는 Oracle DB 인스턴스에 적용됩니다. [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html)를 사용하거나, 혹은 VPC 콘솔에서 **보안 그룹** 옵션을 선택하여 VPC 보안 그룹을 생성해야 합니다.

VPC의 인스턴스 에 대한 액세스를 허용하는 VPC 보안 그룹과 관련된 규칙을 만들 때 그 규칙이 액세스를 허용하는 주소들의 각 범위에 대해 포트를 지정해야 합니다. 예를 들어, VPC의 인스턴스에 대한 Secure Shell(SSH) 액세스를 활성화하고 싶다면 지정된 주소 범위와 관련해 TCP 포트 22에 대한 액세스를 허용하는 규칙을 생성합니다.

VPC의 서로 다른 인스턴스에게 서로 다른 포트에 대한 액세스를 허용하는 여러 개의 VPC 보안 그룹을 구성할 수 있습니다. 예를 들어 VPC의 웹 서버에 대해서는 TCP 포트 80으로 액세스가 가능하도록 VPC 보안 그룹을 생성합니다. 그런 다음 VPC의 RDS for MySQL DB 인스턴스에 대해서는 TCP 포트 3306으로 액세스할 수 있도록 다른 VPC 보안 그룹을 만들면 됩니다.

VPC 보안 그룹에 관한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하십시오.

**참고**  
DB 인스턴스 가 VPC에 있지만 공개적으로 액세스할 수 없는 경우 AWS Site-to-Site VPN 연결 또는 Direct Connect 연결을 사용하여 프라이빗 네트워크에서 액세스할 수도 있습니다. 자세한 내용은 섹션을 참조하세요[인터네트워크 트래픽 개인 정보](inter-network-traffic-privacy.md)

## 보안 그룹 시나리오
<a name="Overview.RDSSecurityGroups.Scenarios"></a>

VPC에서 DB 인스턴스 를 사용하는 일반적인 사례는 동일한 VPC의 Amazon EC2 인스턴스에서 실행 중이며 VPC 외부의 클라이언트 애플리케이션에서 액세스한 애플리케이션 서버를 사용하여 데이터를 공유하는 것입니다. 이러한 시나리오에서는 AWS Management Console의 RDS 및 VPC 페이지를 사용하거나, 혹은 RDS 및 EC2 API 작업을 사용하여 필요한 인스턴스와 보안 그룹을 생성합니다.

1. VPC 보안 그룹(예: `sg-0123ec2example`)을 생성하고 클라이언트 애플리케이션의 IP 주소를 소스로 사용하는 인바운드 규칙을 생성합니다. 이 보안 그룹에서는 클라이언트 애플리케이션이 이 보안 그룹을 사용하는 VPC의 EC2 인스턴스에 연결할 수 있습니다.

1. 애플리케이션에 대한 EC2 인스턴스를 생성하고 이전 단계에서 생성한 VPC 보안 그룹(`sg-0123ec2example`)에 EC2 인스턴스를 추가합니다.

1. 두 번째 VPC 보안 그룹(예: `sg-6789rdsexample`)을 생성하고 1단계에서 만든 VPC 보안 그룹(`sg-0123ec2example`)을 소스로 지정해 새 규칙을 생성합니다.

1. 새 DB 인스턴스 를 만들고 이전 단계에서 만든 VPC 보안 그룹(`sg-6789rdsexample`)에 DB 인스턴스 를 추가합니다. DB 인스턴스 를 만들 때 3단계에서 생성한 VPC 보안 그룹(`sg-6789rdsexample`) 규칙에 대해 지정한 것과 동일한 보안 포트 번호를 사용합니다.

다음 다이어그램은 이 시나리오를 보여 줍니다.

![\[VPC의 DB 인스턴스 및 EC2 인스턴스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


이 시나리오의 VPC 구성에 대한 자세한 지침은 [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md) 섹션을 참조하세요. VPC 사용에 대한 자세한 내용은 [Amazon VPC 및 Amazon RDS](USER_VPC.md) 섹션을 참조하세요.

## VPC 보안 그룹 생성
<a name="Overview.RDSSecurityGroups.Create"></a>

VPC 콘솔을 사용하여 DB 인스턴스에 대한 VPC 보안 그룹을 생성할 수 있습니다. 보안 그룹 생성에 대한 자세한 내용은 [보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup) 및 *Amazon Virtual Private Cloud 사용 설명서*의 [보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하십시오.

## 보안 그룹과 DB 인스턴스의 연결
<a name="Overview.RDSSecurityGroups.Associate"></a>

보안 그룹은 RDS 콘솔의 [**수정(Modify)**] 옵션을 사용하거나, `ModifyDBInstance` Amazon RDS API 또는 `modify-db-instance` AWS CLI 명령을 사용해 DB 인스턴스와 연결할 수 있습니다.

다음 CLI 예제는 특정 VPC 보안 그룹을 연결하고 DB 인스턴스에서 DB 보안 그룹을 제거합니다.

```
aws rds modify-db-instance --db-instance-identifier dbName --vpc-security-group-ids sg-ID
```

 DB 인스턴스 수정에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요. DB 인스턴스를 DB 스냅샷에서 복원할 때 보안 그룹에서 고려해야 할 사항은 [보안 그룹 고려 사항](USER_RestoreFromSnapshot.md#USER_RestoreFromSnapshot.Security) 섹션을 참조하세요.

**참고**  
포트 값이 기본값이 아닌 값으로 구성된 경우 RDS 콘솔은 데이터베이스에 대해 다른 보안 그룹 규칙 이름을 표시합니다.

Oracle DB 인스턴스용 RDS의 경우 Oracle Enterprise Manager Database Express(OEM), Oracle Management Agent for Enterprise Manager Cloud Control(OEM 에이전트) 및 Oracle Secure Sockets Layer 옵션에 대한 보안 그룹 옵션 설정을 채워 추가 보안 그룹을 연결할 수 있습니다. 이 경우 DB 인스턴스와 연결된 보안 그룹과 옵션 설정이 모두 DB 인스턴스에 적용됩니다. 이러한 옵션 그룹에 대한 자세한 내용은 [Oracle Enterprise Manager](Oracle.Options.OEM.md), [Oracle Management Agent for Enterprise Manager Cloud Control](Oracle.Options.OEMAgent.md) 및 [Oracle 보안 소켓 Layer](Appendix.Oracle.Options.SSL.md) 섹션을 참조하세요.

# 마스터 사용자 계정 권한
<a name="UsingWithRDS.MasterAccounts"></a>

새로운 DB 인스턴스 를 만들 때 사용되는 기본 마스터 사용자는 해당 DB 인스턴스 에 대한 특정 권한을 갖습니다. DB 인스턴스 가 만들어진 후에는 마스터 사용자 이름을 변경할 수 없습니다.

**중요**  
애플리케이션에서 직접 마스터 사용자를 사용하지 않는 것이 좋습니다. 대신에 애플리케이션에 필요한 최소 권한으로 생성한 데이터베이스 사용자를 사용하는 모범 사례를 준수하십시오.

**참고**  
마스터 사용자의 권한을 실수로 삭제한 경우, DB 인스턴스 를 수정하고 새 마스터 사용자 암호를 설정하여 복원할 수 있습니다. DB 인스턴스 를 수정하는 것에 대한 자세한 내용은  [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md)  섹션을 참조하세요.

다음 표에는 마스터 사용자가 각 데이터베이스 엔진에 대해 갖는 권한 및 데이터베이스 역할이 나와 있습니다.


|  데이터베이스 엔진  |  시스템 권한  |  데이터베이스 역할  | 
| --- | --- | --- | 
|  RDS for Db2  |  마스터 사용자는 `masterdba` 그룹에 할당되고 `master_user_role`을 받습니다.  `SYSMON`,`DBADM`과 `DATAACCESS` 및 `ACCCESSCTRL`, `BINDADD`,`CONNECT`, `CREATETAB`,`CREATE_SECURE_OBJECT`, `EXPLAIN`,`IMPLICIT_SCHEMA`, `LOAD`,`SQLADM`,`WLMADM`  |   `DBA`,`DBA_RESTRICTED`, `DEVELOPER`,`ROLE_NULLID_PACKAGES`, `ROLE_PROCEDURES`,`ROLE_TABLESPACES`  자세한 내용은 섹션을 참조하세요[Amazon RDS for Db2 기본 역할](db2-default-roles.md)  | 
|  RDS for MariaDB  |   `SELECT`,`INSERT`,`UPDATE`,`DELETE`, `CREATE`,`DROP`,`RELOAD`, `PROCESS`,`REFERENCES`,`INDEX`, `ALTER`,`SHOW DATABASES`,`CREATE TEMPORARY TABLES`,`LOCK TABLES`, `EXECUTE`,`REPLICATION CLIENT`,`CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`, `ALTER ROUTINE`,`CREATE USER`, `EVENT`,`TRIGGER`,`REPLICATION SLAVE`  RDS for MariaDB 버전 11.4부터 마스터 사용자에게도 `SHOW CREATE ROUTINE` 권한이 부여됩니다.  |  —  | 
|  RDS for MySQL 8.0.36 이상  |   `SELECT`,`INSERT`,`UPDATE`, `DELETE`,`CREATE`,`DROP`, `RELOAD`,`PROCESS`, `REFERENCES`,`INDEX`,`ALTER`, `SHOW DATABASES`,`CREATE TEMPORARY TABLES`,`LOCK TABLES`,`EXECUTE`, `REPLICATION SLAVE`,`REPLICATION CLIENT`, `CREATE VIEW`,`SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`CREATE USER`,`EVENT`,`TRIGGER`, `CREATE ROLE`,`DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `ROLE_ADMIN`,`SET_USER_ID`, `XA_RECOVER_ADMIN`   |   `rds_superuser_role`  `rds_superuser_role`에 대한 자세한 정보는 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 섹션을 참조하세요.  | 
|  RDS for MySQL 버전 8.0.36 미만  |   `SELECT`,`INSERT`,`UPDATE`, `DELETE`,`CREATE`,`DROP`, `RELOAD`,`PROCESS`, `REFERENCES`,`INDEX`,`ALTER`, `SHOW DATABASES`,`CREATE TEMPORARY TABLES`,`LOCK TABLES`,`EXECUTE`, `REPLICATION CLIENT`,`CREATE VIEW`, `SHOW VIEW`,`CREATE ROUTINE`,`ALTER ROUTINE`,`CREATE USER`,`EVENT`, `TRIGGER`,`REPLICATION SLAVE`   |  —  | 
|  RDS for PostgreSQL  |   `CREATE ROLE`,`CREATE DB`, `PASSWORD VALID UNTIL INFINITY`,`CREATE EXTENSION`,`ALTER EXTENSION`,`DROP EXTENSION`,`CREATE TABLESPACE`,`ALTER <OBJECT> OWNER`,`CHECKPOINT`, `PG_CANCEL_BACKEND()`, `PG_TERMINATE_BACKEND()`,`SELECT PG_STAT_REPLICATION`,`EXECUTE PG_STAT_STATEMENTS_RESET()`,`OWN POSTGRES_FDW_HANDLER()`,`OWN POSTGRES_FDW_VALIDATOR()`,`OWN POSTGRES_FDW`, `EXECUTE PG_BUFFERCACHE_PAGES()`,`SELECT PG_BUFFERCACHE`   |   `RDS_SUPERUSER`  RDS\$1SUPERUSER에 대한 자세한 내용은 [PostgreSQL 역할 및 권한 이해](Appendix.PostgreSQL.CommonDBATasks.Roles.md) 섹션을 참조하세요.  | 
|  RDS for Oracle  |   `ADMINISTER DATABASE TRIGGER`,`ALTER DATABASE LINK`,`ALTER PUBLIC DATABASE LINK`, `AUDIT SYSTEM`,`CHANGE NOTIFICATION`, `DROP ANY DIRECTORY`,`EXEMPT ACCESS POLICY`,`EXEMPT IDENTITY POLICY`,`EXEMPT REDACTION POLICY`,`FLASHBACK ANY TABLE`, `GRANT ANY OBJECT PRIVILEGE`,`RESTRICTED SESSION`,`SELECT ANY TABLE`,`UNLIMITED TABLESPACE`   |   `DBA`   `DBA` 역할은 다음 권한에서 제외됩니다.  `ALTER DATABASE`,`ALTER SYSTEM`, `CREATE ANY DIRECTORY`,`CREATE EXTERNAL JOB`,`CREATE PLUGGABLE DATABASE`, `GRANT ANY PRIVILEGE`,`GRANT ANY ROLE`,`READ ANY FILE GROUP`    | 
|  Amazon RDS for Microsoft SQL Server  |   `ADMINISTER BULK OPERATIONS`,`ALTER ANY CONNECTION`,`ALTER ANY CREDENTIAL`, `ALTER ANY EVENT SESSION`,`ALTER ANY LINKED SERVER`,`ALTER ANY LOGIN`,`ALTER ANY SERVER AUDIT`,`ALTER ANY SERVER ROLE`, `ALTER SERVER STATE`,`ALTER TRACE`, `CONNECT SQL`,`CREATE ANY DATABASE`, `VIEW ANY DATABASE`,`VIEW ANY DEFINITION`,`VIEW SERVER STATE`,`ALTER ON ROLE SQLAgentOperatorRole`   |   `DB_OWNER`(데이터베이스 수준 역할), `PROCESSADMIN`(서버 수준 역할), `SETUPADMIN`(서버 수준 역할), `SQLAgentUserRole`(데이터베이스 수준 역할), `SQLAgentReaderRole`(데이터베이스 수준 역할) 및 `SQLAgentOperatorRole`(데이터베이스 수준 역할)  | 

# Amazon RDS에 서비스 연결 역할 사용
<a name="UsingWithRDS.IAM.ServiceLinkedRoles"></a>

Amazon RDS는 AWS Identity and Access Management(IAM) [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role) 사용 서비스 연결 역할은 Amazon RDS에 직접 연결된 고유한 유형의 IAM 역할입니다. 서비스 연결 역할은 Amazon RDS에서 사전 정의하며 서비스에서 다른 AWS 서비스를 자동으로 호출하기 위해 필요한 모든 권한을 포함합니다.

필요한 권한을 수동으로 추가할 필요가 없으므로 서비스 연결 역할은 Amazon RDS를 더 쉽게 설정할 수 있습니다. Amazon RDS에서 서비스 연결 역할의 권한을 정의하므로 다르게 정의되지 않으면, Amazon RDS만 해당 역할을 수임할 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함되며, 이 권한 정책은 다른 IAM 엔터티에 연결할 수 없습니다.

먼저 역할의 관련 리소스를 삭제해야만 역할을 삭제할 수 있습니다. 이렇게 하면 리소스에 대한 액세스 권한을 부주의로 삭제할 수 없기 때문에 Amazon RDS 리소스가 보호됩니다.

서비스 연결 역할을 지원하는 기타 서비스에 대한 자세한 내용은 [IAM으로 작업하는 AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하고 **서비스 연결 역할** 열에 **예**가 표시된 서비스를 찾으십시오. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예** 링크를 선택합니다.

## Amazon RDS에 대한 서비스 연결 역할 권한
<a name="service-linked-role-permissions"></a>

Amazon RDS에서는 AWSServiceRoleForRDS라는 서비스 연결 역할을 사용하여 Amazon RDS가 DB 인스턴스를 대신하여 AWS 서비스를 호출하도록 허용합니다.

AWSServiceRoleForRDS 서비스 연결 역할은 역할을 수임하기 위해 다음 서비스를 신뢰합니다.
+ `rds.amazonaws.com`

이 서비스 연결 역할에는 계정에서 운영할 수 있는 권한을 부여하는 `AmazonRDSServiceRolePolicy`라는 권한 정책이 연결되어 있습니다.

JSON 정책 문서를 포함하여 이 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 안내서*의 [AmazonRDSServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSServiceRolePolicy.html)를 참조하세요.

**참고**  
IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 다음 오류 메시지가 표시되는 경우:  
**리소스를 만들 수 없습니다. 서비스 연결 역할을 생성할 권한이 있는지 확인하십시오. 그렇지 않은 경우 기다렸다가 나중에 다시 시도하십시오.**  
 다음 권한이 활성화되어 있는지 확인하십시오.  

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"rds.amazonaws.com"
        }
    }
}
```
 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

### Amazon RDS에 대한 서비스 연결 역할 생성
<a name="create-service-linked-role"></a>

서비스 연결 역할은 수동으로 생성할 필요가 없습니다. DB 인스턴스를 생성하면 Amazon RDS에서 서비스 연결 역할을 다시 생성합니다.

**중요**  
서비스 연결 역할을 지원하기 시작한 2017년 12월 1일 이전에 Amazon RDS 서비스를 사용하고 있었다면, Amazon RDS가 계정에 AWSServiceRoleForRDS 역할을 생성했습니다. 자세한 내용은 [내 AWS 계정에 표시되는 새 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)을 참조하세요.

이 서비스 연결 역할을 삭제한 다음 다시 생성해야 하는 경우 동일한 프로세스를 사용하여 계정에서 역할을 다시 생성할 수 있습니다. DB 인스턴스를 생성하면 Amazon RDS에서 서비스 연결 역할을 다시 생성합니다.

### Amazon RDS에 대한 서비스 연결 역할 편집
<a name="edit-service-linked-role"></a>

Amazon RDS는 AWSServiceRoleForRDS 서비스 연결 역할을 편집하도록 허용하지 않습니다. 서비스 연결 역할을 생성한 후에는 다양한 개체가 역할을 참조할 수 있기 때문에 역할 이름을 변경할 수 없습니다. 하지만 IAM을 사용하여 역할의 설명을 편집할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 편집](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)을 참조하십시오.

### Amazon RDS에 대한 서비스 연결 역할 삭제
<a name="delete-service-linked-role"></a>

서비스 연결 역할이 필요한 기능 또는 서비스가 더 이상 필요 없는 경우에는 해당 역할을 삭제할 것을 권합니다. 이렇게 하면 적극적으로 모니터링하거나 유지 관리하지 않은 미사용 엔터티가 없습니다. 그러나 서비스 연결 역할을 삭제하려면 먼저 모든 DB 인스턴스 를 삭제해야 합니다.

#### 서비스 연결 역할 정리
<a name="service-linked-role-review-before-delete"></a>

IAM을 사용하여 서비스 연결 역할을 삭제하기 전에 먼저 역할에 활성 세션이 없는지 확인하고 역할에서 사용되는 리소스를 모두 제거해야 합니다.

**IAM 콘솔에서 서비스 연결 역할에 활성 세션이 있는지 확인하려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택합니다. 그런 다음 AWSServiceRoleForRDS 역할의 이름(확인란 아님)을 선택합니다.

1. 선택한 역할의 **요약** 페이지에서 **마지막 액세스** 탭을 선택합니다.

1. **마지막 액세스** 탭에서 서비스 연결 역할의 최근 활동을 검토합니다.
**참고**  
Amazon RDS에서 AWSServiceRoleForRDS 역할을 사용하는지 잘 모를 경우에는 역할을 삭제할 수 있습니다. 서비스에서 역할을 사용하는 경우에는 삭제가 안 되어 역할이 사용 중인 AWS 리전을 볼 수 있습니다. 역할이 사용 중인 경우에는 세션이 종료될 때까지 기다렸다가 역할을 삭제해야 합니다. 서비스 연결 역할에 대한 세션은 취소할 수 없습니다.

AWSServiceRoleForRDS 역할을 제거하려면 먼저 *모든* DB 인스턴스 를 삭제해야 합니다.

##### 모든 인스턴스 삭제
<a name="delete-service-linked-role.delete-rds-instances"></a>

이러한 절차 중 하나에 따라 각 인스턴스를 삭제합니다.

**인스턴스를 삭제하려면(콘솔)**

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 삭제하려는 인스턴스를 선택합니다.

1. [** Actions**]에 대해 [**Delete**]를 선택합니다.

1. **최종 스냅샷 생성?** 메시지가 표시되는 경우 **예** 또는 **아니요**를 선택합니다.

1. 이전 단계에서 **예**를 선택한 경우 **최종 스냅샷 이름**에 최종 스냅샷 이름을 입력합니다.

1. **Delete**(삭제)를 선택합니다.

**인스턴스를 삭제하려면(CLI)**  
*AWS CLI 명령 참조*에서 `[delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)` 섹션을 참조하세요.

**인스턴스를 삭제하려면(API)**  
*Amazon RDS API Reference*의 `[DeleteDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBInstance.html)` 참조.

IAM 콘솔, IAM CLI 또는 IAM API를 사용하여 AWSServiceRoleForRDS 서비스 연결 역할을 삭제할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 [서비스 연결 역할 삭제](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)**를 참조하십시오.

## Amazon RDS Custom에 대한 서비스 연결 역할 권한
<a name="slr-permissions-custom"></a>

Amazon RDS Custom은 `AWSServiceRoleForRDSCustom`이라는 서비스 연결 역할을 사용하여 RDS Custom이 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출하도록 허용합니다.

AWSServiceRoleForRDSCustom 서비스 연결 역할은 역할을 수임하기 위해 다음 서비스를 신뢰합니다.
+ `custom.rds.amazonaws.com`

이 서비스 연결 역할에는 계정에서 운영할 수 있는 권한을 부여하는 `AmazonRDSCustomServiceRolePolicy`라는 권한 정책이 연결되어 있습니다.

RDS Custom에 대한 서비스 연결 역할을 생성, 편집 또는 삭제 작업은 Amazon RDS와 동일하게 작동합니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSCustomServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSCustomServiceRolePolicy) 섹션을 참조하세요.

**참고**  
IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 다음 오류 메시지가 표시되는 경우:  
**리소스를 만들 수 없습니다. 서비스 연결 역할을 생성할 권한이 있는지 확인하십시오. 그렇지 않은 경우 기다렸다가 나중에 다시 시도하십시오.**  
 다음 권한이 활성화되어 있는지 확인하십시오.  

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/custom.rds.amazonaws.com/AmazonRDSCustomServiceRolePolicy",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"custom.rds.amazonaws.com"
        }
    }
}
```
 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

## Amazon RDS 베타에 대한 서비스 연결 역할 권한
<a name="slr-permissions-rdsbeta"></a>

Amazon RDS는 `AWSServiceRoleForRDSBeta`라는 서비스 연결 역할을 사용하여 Amazon RDS가 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출할 수 있도록 지원합니다.

AWSServiceRoleForRDSBeta 서비스 연결 역할은 역할을 수임하기 위해 다음 서비스를 신뢰합니다.
+ `rds.amazonaws.com`

이 서비스 연결 역할에는 계정에서 운영할 수 있는 권한을 부여하는 `AmazonRDSBetaServiceRolePolicy`라는 권한 정책이 연결되어 있습니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSBetaServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSBetaServiceRolePolicy) 섹션을 참조하세요.

**참고**  
IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 다음 오류 메시지가 표시되는 경우:  
**리소스를 만들 수 없습니다. 서비스 연결 역할을 생성할 권한이 있는지 확인하십시오. 그렇지 않은 경우 기다렸다가 나중에 다시 시도하십시오.**  
 다음 권한이 활성화되어 있는지 확인하십시오.  

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/custom.rds.amazonaws.com/AmazonRDSBetaServiceRolePolicy",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"custom.rds.amazonaws.com"
        }
    }
}
```
 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

## Amazon RDS 미리 보기에 대한 서비스 연결 역할
<a name="slr-permissions-rdspreview"></a>

Amazon RDS는 `AWSServiceRoleForRDSPreview`라는 서비스 연결 역할을 사용하여 Amazon RDS가 RDS DB 리소스를 대신하여 AWS 서비스를 직접 호출할 수 있도록 지원합니다.

AWSServiceRoleForRDSPreview 서비스 연결 역할은 역할을 수임하기 위해 다음 서비스를 신뢰합니다.
+ `rds.amazonaws.com`

이 서비스 연결 역할에는 계정에서 운영할 수 있는 권한을 부여하는 `AmazonRDSPreviewServiceRolePolicy`라는 권한 정책이 연결되어 있습니다. 자세한 내용은 [AWS 관리형 정책: AmazonRDSPreviewServiceRolePolicy](rds-security-iam-awsmanpol.md#rds-security-iam-awsmanpol-AmazonRDSPreviewServiceRolePolicy) 섹션을 참조하세요.

**참고**  
IAM 엔터티(사용자, 그룹, 역할 등)가 서비스 연결 역할을 생성하고 편집하거나 삭제할 수 있도록 권한을 구성할 수 있습니다. 다음 오류 메시지가 표시되는 경우:  
**리소스를 만들 수 없습니다. 서비스 연결 역할을 생성할 권한이 있는지 확인하십시오. 그렇지 않은 경우 기다렸다가 나중에 다시 시도하십시오.**  
 다음 권한이 활성화되어 있는지 확인하십시오.  

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/custom.rds.amazonaws.com/AmazonRDSPreviewServiceRolePolicy",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"custom.rds.amazonaws.com"
        }
    }
}
```
 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)을 참조하세요.

# Amazon VPC 및 Amazon RDS
<a name="USER_VPC"></a>

Amazon Virtual Private Cloud(Amazon VPC)를 사용하면 Amazon RDS DB 인스턴스와 같은 AWS 리소스를 Virtual Private Cloud(VPC)로 시작할 수 있습니다.

VPC를 사용하면 가상 네트워킹 환경을 완벽하게 제어할 수 있습니다. 자기만의 IP 주소 범위를 선택하고, 서브넷을 생성하고, 라우팅 및 액세스 제어 목록을 구성할 수 있습니다. DB 인스턴스를 VPC에서 실행하는 데는 추가 비용이 들지 않습니다.

계정에는 기본 VPC가 있습니다. 달리 지정하지 않는 한 새 DB 인스턴스는 모두 기본 VPC에서 생성됩니다.

**Topics**
+ [

# VPC에서 DB 인스턴스를 사용한 작업
](USER_VPC.WorkingWithRDSInstanceinaVPC.md)
+ [

# DB 인스턴스에 대한 VPC 업데이트
](USER_VPC.VPC2VPC.md)
+ [

# VPC에서 DB 인스턴스에 액세스하는 시나리오
](USER_VPC.Scenarios.md)
+ [

# 자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)
](CHAP_Tutorials.WebServerDB.CreateVPC.md)
+ [

# 자습서: DB 인스턴스(듀얼 스택 모드)에 사용할 VPC 생성
](CHAP_Tutorials.CreateVPCDualStack.md)
+ [

# VPC에 있지 않은 DB 인스턴스를 VPC로 이동
](USER_VPC.Non-VPC2VPC.md)

다음에서는 Amazon RDS DB 인스턴스와 관련된 VPC 기능에 대한 토론을 찾을 수 있습니다. Amazon VPC 대한 자세한 내용은 [Amazon VPC 시작 안내서](https://docs.aws.amazon.com/AmazonVPC/latest/GettingStartedGuide/) 및 [Amazon VPC 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/)를 참조하세요.

# VPC에서 DB 인스턴스를 사용한 작업
<a name="USER_VPC.WorkingWithRDSInstanceinaVPC"></a>

DB 인스턴스는 Virtual Private Cloud(VPC) 내에 있어야 합니다. VPC 는 AWS 클라우드의 다른 가상 네트워크에서 논리적으로 격리된 가상 네트워크입니다. Amazon VPC를 사용하면 Amazon RDS DB 인스턴스 또는 Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC로 시작할 수 있습니다. VPC는 계정과 함께 제공되는 기본 VPC일 수도 있고, 사용자가 만들 수도 있습니다. 모든 VPC는 AWS 계정과 연결됩니다.

기본 VPC에는 VPC 내의 리소스를 격리하는 데 사용할 수 있는 3개의 서브넷이 있습니다. 또한 VPC 외부에서 VPC 내부의 리소스에 액세스할 수 있도록 하는 데 사용할 수 있는 인터넷 게이트웨이도 있습니다.

VPC 내부와 외부의 Amazon RDS DB 인스턴스를 포함하는 시나리오 목록은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md) 섹션을 참조하세요.

**Topics**
+ [

## VPC에서 DB 인스턴스를 사용한 작업
](#Overview.RDSVPC.Create)
+ [

## VPC 암호화 제어
](#USER_VPC.EncryptionControl)
+ [

## DB 서브넷 그룹을 사용한 작업
](#USER_VPC.Subnets)
+ [

## 공유 서브넷
](#USER_VPC.Shared_subnets)
+ [

## Amazon RDS IP 주소 지정
](#USER_VPC.IP_addressing)
+ [

## VPC에 있는 DB 인스턴스를 인터넷에서 숨기기
](#USER_VPC.Hiding)
+ [

## VPC에 DB 인스턴스 만들기
](#USER_VPC.InstanceInVPC)

다음 자습서에서는 일반적인 Amazon RDS 시나리오에 사용할 수 있는 VPC를 생성하는 방법을 배울 수 있습니다.
+ [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md)
+ [자습서: DB 인스턴스(듀얼 스택 모드)에 사용할 VPC 생성](CHAP_Tutorials.CreateVPCDualStack.md)

## VPC에서 DB 인스턴스를 사용한 작업
<a name="Overview.RDSVPC.Create"></a>

다음은 VPC에서 DB 인스턴스를 사용하여 작업할 때 유용한 몇 가지 팁입니다.
+ VPC는 최소 2개 이상의 서브넷을 보유해야 합니다. 이러한 서브넷은 DB 인스턴스를 배포하고자 하는 AWS 리전에 있는 2개의 다른 가용 영역에 있어야 합니다. *서브넷*은 사용자가 지정할 수 있고 보안 및 운영상의 필요를 바탕으로 인스턴스를 그룹화할 수 있게 해주는 VPC IP 주소 범위의 한 부분입니다.

  다중 AZ 배포의 경우, AWS 리전에 있는 두 개 이상의 가용 영역에 대한 서브넷을 정의하면 Amazon RDS가 필요에 따라 다른 가용 영역에 새로운 예비 복제본을 만들 수 있습니다. 단일 AZ 배포의 경우도 어느 시점에 단일 AZ 배포를 다중 AZ 배포로 변환하려면 이 작업을 수행해야 합니다.
**참고**  
로컬 영역의 DB 서브넷 그룹에는 서브넷이 하나만 있을 수 있습니다.
+ VPC에서 DB 인스턴스에 공개적으로 액세스할 수 있도록 하려면 VPC 속성인 *DNS 호스트 이름*과 *DNS 확인*을 활성화해야 합니다.
+ VPC에는 사용자가 만드는 DB 서브넷 그룹이 있어야 합니다. 생성한 서브넷을 지정하여 DB 서브넷 그룹을 생성합니다. Amazon RDS는 DB 인스턴스와 연결할 서브넷 그룹 내의 서브넷과 IP 주소를 선택합니다. DB 인스턴스는 서브넷이 포함된 가용 영역을 사용합니다.
+ VPC에는 DB 인스턴스에 대한 액세스를 허용하는 VPC 보안 그룹이 있어야 합니다.

  자세한 내용은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md) 섹션을 참조하세요.
+ 각 서브넷의 CIDR 블록은 장애 조치와 컴퓨팅 조정을 포함한 유지 관리 활동 중에 Amazon RDS가 사용할 예비 IP 주소를 수용할 만큼 충분히 커야 합니다. 예를 들어, 일반적으로 10.0.0.0/24 및 10.0.1.0/24와 같은 범위는 충분히 큽니다.
+ VPC의 *인스턴스 테넌시* 속성 값은 *기본* 또는 *전용* 중 하나일 수 있습니다. 모든 기본 VPC에서는 인스턴스 테넌시 속성이 기본값으로 설정되어 있으며, 기본 VPC는 어떤 DB 인스턴스 클래스라도 지원할 수 있습니다.

  인스턴스 테넌시 속성이 전용으로 설정된 전용 VPC에 DB 인스턴스를 사용하도록 선택한 경우 DB 인스턴스의 DB 인스턴스 클래스는 승인된 Amazon EC2 전용 인스턴스 유형 중 하나여야 합니다. 예를 들어 r5.large EC2 전용 인스턴스는 db.r5.large DB 인스턴스 클래스에 해당합니다. VPC의 인스턴스 테넌시에 대한 자세한 내용은 *Amazon Elastic Compute Cloud 사용 설명서*의 [전용 인스턴스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)를 참조하세요.

  전용 인스턴스에 존재할 수 있는 인스턴스 유형에 대한 자세한 내용은 Amazon EC2 요금 페이지에서 [Amazon EC2 전용 인스턴스](https://aws.amazon.com/ec2/purchasing-options/dedicated-instances/)를 참조하세요.
**참고**  
인스턴스 테넌시 속성을 DB 인스턴스에 대해 전용으로 설정하면 DB 인스턴스가 전용 호스트에서 실행된다는 보장이 없습니다.
+ 옵션 그룹이 DB 인스턴스에 할당되면 DB 인스턴스의 VPC와 연결됩니다. 이 연결은 DB 인스턴스를 다른 VPC로 복원하려는 경우 DB 인스턴스에 할당된 옵션 그룹을 사용할 수 없음을 의미합니다.
+ DB 인스턴스를 다른 VPC로 복원하는 경우 기본 옵션 그룹을 DB 인스턴스에 할당하거나, 해당 VPC에 연결된 옵션 그룹을 할당하거나, 새 옵션 그룹을 생성하여 DB 인스턴스에 할당해야 합니다. Oracle TDE와 같은 지속적 또는 영구적 옵션의 경우 DB 인스턴스를 다른 VPC로 복구할 때 지속적 또는 영구적 옵션을 포함하는 새 옵션 그룹을 생성해야 합니다.

## VPC 암호화 제어
<a name="USER_VPC.EncryptionControl"></a>

VPC 암호화 제어를 사용하면 VPC 내의 모든 네트워크 트래픽에 전송 중 데이터 암호화를 적용할 수 있습니다. 암호화 제어를 사용하여 지정된 VPC에 암호화 기능을 지원하는 Nitro 기반 하드웨어만 프로비저닝되도록 함으로써 규정 준수 요구 사항을 충족합니다. 또한 암호화 제어는 프로비저닝 중이 아닌 API 요청 시 호환성 문제를 포착합니다. 기존 워크로드는 계속 작동하며 호환되지 않는 새 요청만 차단됩니다.

VPC 제어 모드를 다음으로 설정하여 VPC 암호화 제어를 설정합니다.
+ *비활성화*(기본값)
+ * 모니터링*
+ *적용됨*

VPC의 현재 제어 모드를 확인하려면 AWS Management Console 또는 [DescribeVpcs](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/API_DescribeVpcs.html) CLI 또는 API 명령을 사용합니다.

VPC가 암호화를 적용하는 경우 해당 VPC에서 전송 중 암호화를 지원하는 Nitro 기반 DB 인스턴스만 프로비저닝할 수 있습니다. 자세한 내용은 [DB 인스턴스 클래스 유형](Concepts.DBInstanceClass.Types.md) 섹션을 참조하세요. Nitro 인스턴스에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [AWS Nitro System 기반 인스턴스](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)를 참조하세요.

**참고**  
암호화가 적용된 VPC에서 호환되지 않는 DB 인스턴스를 프로비저닝하려고 하면 Amazon RDS가 `VpcEncryptionControlViolationException` 예외를 반환합니다.

## DB 서브넷 그룹을 사용한 작업
<a name="USER_VPC.Subnets"></a>

*서브넷*은 사용자가 보안 및 운영상의 필요를 바탕으로 리소스를 그룹화하기 위해 지정하는 VPC IP 주소 범위의 특정 부분입니다. *DB 서브넷 그룹*은 사용자가 VPC에서 만든 다음 DB 인스턴스에 대해 지정하는 서브넷(일반적으로 프라이빗)의 모음입니다. DB 서브넷 그룹을 사용하면 AWS CLI 또는 API를 사용하여 DB 인스턴스를 생성할 때 특정 VPC를 지정할 수 있습니다. 콘솔을 사용하는 경우 사용할 VPC와 서브넷 그룹을 선택할 수 있습니다.

각 DB 서브넷 그룹은 지정된 AWS 리전에서 두 개 이상의 가용 영역에 서브넷이 있어야 합니다. VPC에서 DB 인스턴스를 생성할 때 이에 대한 DB 서브넷 그룹을 선택합니다. DB 서브넷 그룹에서 Amazon RDS는 의 DB 인스턴스와 연결할 서브넷과 해당 서브넷 내의 IP 주소를 선택합니다. DB는 서브넷이 포함된 가용 영역을 사용합니다. Amazon RDS는 항상 사용 가능한 IP 주소 공간이 있는 서브넷에서 IP 주소를 할당합니다.

다중 AZ 배포의 기본 DB 인스턴스에 오류가 있을 경우 Amazon RDS는 해당 스탠바이를 승격한 후 나중에 다른 가용 영역 중 하나에서 서브넷의 IP 주소를 사용하여 새 스탠바이를 만들 수 있습니다.

DB 서브넷 그룹의 서브넷은 퍼블릭 또는 프라이빗입니다. 서브넷은 네트워크 액세스 제어 목록(ACL) 및 라우팅 테이블에 대해 설정한 구성에 따라 퍼블릭 또는 프라이빗입니다. DB 인스턴스에 공개적으로 액세스할 수 있도록 하려면 DB 서브넷 그룹의 모든 서브넷이 퍼블릭이어야 합니다. 공개적으로 액세스할 수 있는 DB 인스턴스와 연결된 서브넷이 퍼블릭에서 프라이빗으로 변경되면 DB 인스턴스 가용성에 영향을 줄 수 있습니다.

듀얼 스택 모드를 지원하는 DB 서브넷 그룹을 만들려면 DB 서브넷 그룹에 추가하는 각 서브넷에 인터넷 프로토콜 버전 6(IPv6) CIDR 블록이 연결되어 있는지 확인합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [Amazon RDS IP 주소 지정](#USER_VPC.IP_addressing) 및 [IPv6로 마이그레이션](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)을 참조하세요.

**참고**  
로컬 영역의 DB 서브넷 그룹에는 서브넷이 하나만 있을 수 있습니다.

Amazon RDS가 VPC에 DB 인스턴스를 생성할 때는 DB 서브넷 그룹의 IP 주소를 사용하여 DB 인스턴스에 네트워크 인터페이스를 할당합니다. 하지만 기본 IP 주소가 장애 조치 중에 바뀌기 때문에 DB 인스턴스에 연결할 때 반드시 도메인 이름 시스템(DNS) 이름을 사용하는 것이 좋습니다. 장애 조치 중에 기본 IP 주소가 변경되므로 이 방법을 사용하는 것이 좋습니다.

**참고**  
VPC에서 실행하는 각각의 DB 인스턴스에 대해 Amazon RDS가 복구 작업에 사용할 수 있도록 DB 서브넷 그룹의 각 서브넷에 한 개 이상의 주소를 예약해야 합니다.

## 공유 서브넷
<a name="USER_VPC.Shared_subnets"></a>

공유 VPC에서 DB 인스턴스를 생성할 수 있습니다.

공유 VPC를 사용할 때 염두에 두어야 할 몇 가지 고려 사항은 다음과 같습니다.
+ DB 인스턴스를 공유 VPC 서브넷에서 비공유 VPC 서브넷으로 또는 그 반대로 이동할 수 있습니다.
+ 공유 VPC의 참여자는 VPC에 보안 그룹을 만들어야 DB 인스턴스를 생성할 수 있습니다.
+ 공유 VPC의 소유자와 참여자는 SQL 쿼리를 사용하여 데이터베이스에 액세스할 수 있습니다. 그러나 리소스 생성자만 리소스에 대한 API 호출을 수행할 수 있습니다.



## Amazon RDS IP 주소 지정
<a name="USER_VPC.IP_addressing"></a>

IP 주소가 있으면 VPC 내의 리소스가 서로 통신하고, 인터넷을 통해 다른 리소스와 통신할 수 있습니다. Amazon RDS는 IPv4와 IPv6 주소 지정 프로토콜을 모두 지원합니다. 기본적으로 Amazon RDS와 Amazon VPC는 IPv4 주소 지정 프로토콜을 사용합니다. 이 동작은 끌 수 없습니다. VPC를 생성할 때 VPC에 IPv4 CIDR 블록(프라이빗 IPv4 주소)를 지정해야 합니다. IPv6 CIDR 블록을 VPC와 서브넷에 할당하고 그 블록에 속한 IPv6 주소를 서브넷의 DB 인스턴스에 할당할 수도 있습니다.

IPv6 프로토콜을 지원하면 지원되는 IP 주소 수가 늘어납니다. IPv6 프로토콜을 사용하면 향후에 인터넷이 성장할 때를 대비해 사용 가능한 주소를 충분히 확보할 수 있습니다. 신규 및 기존 RDS 리소스는 VPC 내에서 IPv4 및 IPv6 주소를 사용할 수 있습니다. 애플리케이션의 다른 부분에서 사용되는 두 프로토콜 간의 네트워크 트래픽을 구성, 보안 및 변환하면 운영 오버헤드가 발생할 수 있습니다. Amazon RDS 리소스의 IPv6 프로토콜을 표준화하여 네트워크 구성을 간소화할 수 있습니다.

**Topics**
+ [

### IPv4 주소
](#USER_VPC.IP_addressing.IPv4)
+ [

### IPv6 주소
](#USER_VPC.IP_addressing.IPv6)
+ [

### 듀얼 스택 모드
](#USER_VPC.IP_addressing.dual-stack-mode)

### IPv4 주소
<a name="USER_VPC.IP_addressing.IPv4"></a>

VPC를 생성할 때 VPC의 IPv4 주소 범위를 `10.0.0.0/16`와 같은 CIDR 블록 형태로 지정해야 합니다. *DB 서브넷 그룹*은 이 CIDR 블록에서 DB 인스턴스가 사용할 수 있는 IP 주소의 범위를 정의합니다. 이 IP 주소는 프라이빗 또는 퍼블릭일 수 있습니다.

프라이빗 IPv4 주소는 인터넷을 통해 연결할 수 없는 IP 주소입니다. 프라이빗 IPv4 주소는 DB인스턴스 및 같은 VPC 내의 Amazon EC2 인스턴스와 같은 기타 리소스 간의 통신을 위해 사용될 수 있습니다. 각 DB 인스턴스에는 VPC 내 통신을 위한 프라이빗 IP 주소가 있습니다.

퍼블릭 IP 주소는 인터넷을 통해 연결할 수 있는 IPv4 주소입니다. 퍼블릭 주소는 DB 인스턴스 및 SQL 클라이언트와 같이 인터넷상 리소스 간의 통신을 위해 사용될 수 있습니다. DB 인스턴스 가 퍼블릭 IP 주소를 수신할지 여부를 제어할 수 있습니다.

Amazon RDS는 공개적으로 액세스 가능한 데이터베이스 인스턴스에 EC2의 공용 IPv4 주소 풀에서 제공되는 공용 탄력적 IPv4 주소를 사용합니다. 이러한 IP 주소는 `describe-addresses` CLI, API를 사용하거나 AWS Management Console의 탄력적 IP(EIP) 섹션을 볼 때 AWS 계정에 표시됩니다. 각 RDS 관리형 IP 주소는 `"rds"`로 설정된 `service_managed` 속성으로 표시됩니다.

이러한 IP는 계정에 표시되지만 Amazon RDS에서 완전히 관리되며 수정하거나 릴리스할 수 없습니다. Amazon RDS는 더 이상 사용하지 않을 때 퍼블릭 IPv4 주소 풀로 IP를 다시 릴리스합니다.

CloudTrail은 `AllocateAddress`와 같은 RDS의 EIP와 관련된 API 직접 호출을 로깅합니다. 이러한 API 직접 호출은 서비스 보안 주체 `rds.amazonaws.com`에 의해 간접적으로 호출됩니다.

**참고**  
Amazon RDS에서 할당한 IP 계정의 EIP 한도에 포함되지 않습니다.

일반 Amazon RDS 시나리오에서 사용할 수 있는 IPv4 주소만을 사용하여 VPC를 생성하는 방법을 보여 주는 자습서는 [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md) 섹션을 참조하세요.

### IPv6 주소
<a name="USER_VPC.IP_addressing.IPv6"></a>

IPv6 CIDR 블록을 VPC와 서브넷에 연결하고 그 블록에 속한 IPv6 주소를 VPC의 리소스에 할당할 수도 있습니다. 각 IPv6 주소는 전역적으로 고유합니다.

VPC에 대한 IPv6 CIDR 블록은 Amazon의 IPv6 주소 풀에서 자동으로 할당되므로 범위를 직접 선택할 수는 없습니다.

IPv6 주소에 연결할 때 다음 조건이 충족되는지 확인하세요.
+ IPv6를 통한 클라이언트에서 데이터베이스로의 트래픽이 허용되도록 클라이언트가 구성됩니다.
+ DB 인스턴스에서 사용하는 RDS 보안 그룹은 IPv6를 통한 클라이언트에서 데이터베이스로의 트래픽이 허용되도록 올바르게 구성됩니다.
+ 클라이언트 운영 체제 스택은 IPv6 주소의 트래픽을 허용하며 운영 체제 드라이버 및 라이브러리는 올바른 기본 DB 인스턴스 엔드포인트(IPv4 또는 IPv6)를 선택하도록 구성됩니다.

IPv6에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [IP 주소 지정](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html) 섹션을 참조하세요.

### 듀얼 스택 모드
<a name="USER_VPC.IP_addressing.dual-stack-mode"></a>

DB 인스턴스는 IPv4 및 IPv6 주소 지정 프로토콜 모두를 통해 통신할 수 있을 때 듀얼 스택 모드로 실행됩니다. 그런 다음 리소스는 IPv4, IPv6 또는 두 프로토콜을 모두 사용하여 DB 인스턴스와 통신할 수 있습니다. 프라이빗 듀얼 스택 모드 DB 인스턴스에는 RDS가 VPC 액세스로만 제한하는 IPv6 엔드포인트가 있으므로 IPv6 엔드포인트가 프라이빗으로 유지됩니다. 퍼블릭 듀얼 스택 모드 DB 인스턴스는 인터넷에서 액세스할 수 있는 IPv4 및 IPv6 엔드포인트를 모두 제공합니다.

**Topics**
+ [

#### 듀얼 스택 모드 및 DB 서브넷 그룹
](#USER_VPC.IP_addressing.dual-stack-db-subnet-groups)
+ [

#### 듀얼 스택 모드 DB 인스턴스 작업
](#USER_VPC.IP_addressing.dual-stack-working-with)
+ [

#### 듀얼 스택 모드를 사용하도록 IPv4 전용 DB 인스턴스 수정
](#USER_VPC.IP_addressing.dual-stack-modifying-ipv4)
+ [

#### 리전 및 버전 사용 가능 여부
](#USER_VPC.IP_addressing.RegionVersionAvailability)
+ [

#### 듀얼 스택 네트워크 DB 인스턴스에 대한 제한 사항
](#USER_VPC.IP_addressing.dual-stack-limitations)

일반 Amazon RDS 시나리오에서 사용할 수 있는 IPv4와 IPv6 주소 모두를 사용하여 VPC를 생성하는 방법을 보여 주는 자습서는 [자습서: DB 인스턴스(듀얼 스택 모드)에 사용할 VPC 생성](CHAP_Tutorials.CreateVPCDualStack.md) 섹션을 참조하세요.

#### 듀얼 스택 모드 및 DB 서브넷 그룹
<a name="USER_VPC.IP_addressing.dual-stack-db-subnet-groups"></a>

듀얼 스택 모드를 사용하려면 DB 인스턴스와 연결하는 DB 서브넷 그룹의 각 서브넷에 IPv6 CIDR 블록이 연결되어 있어야 합니다. 새 DB 서브넷 그룹을 생성하거나 기존 DB 서브넷 그룹을 수정하여 이 요구 사항을 충족하도록 수정할 수 있습니다. DB 인스턴스 가 듀얼 스택 모드가 된 후에는 클라이언트가 정상적으로 연결할 수 있습니다. 클라이언트 보안 방화벽과 RDS DB 인스턴스 보안 그룹이 IPv6을 통한 트래픽을 허용하도록 정확하게 구성되어 있는지 확인합니다. 연결하기 위해 클라이언트는 DB 인스턴스의 엔드포인트를 사용합니다. 클라이언트 애플리케이션은 데이터베이스에 연결할 때 기본 프로토콜을 지정할 수 있습니다. 듀얼 스택 모드에서 DB 인스턴스는 클라이언트의 기본 네트워크 프로토콜(IPv4 또는 IPv6)을 감지하고 연결에 해당 프로토콜을 사용합니다.

서브넷 삭제 또는 CIDR 연결 해제로 인해 DB 서브넷 그룹이 듀얼 스택 모드 지원을 중지하는 경우 DB 서브넷 그룹과 연결된 DB 인스턴스에 대해 네트워크 상태가 호환되지 않을 위험이 있습니다. 또한 새 듀얼 스택 모드 DB 인스턴스를 생성할 때 DB 서브넷 그룹을 사용할 수 없습니다.

AWS Management Console을 사용하여 DB 서브넷 그룹이 듀얼 스택 모드를 지원하는지 알아보려면 DB 서브넷 그룹의 세부 정보 페이지에서 **네트워크 유형(Network type)**을 확인합니다. AWS CLI를 사용하여 DB 서브넷 그룹이 듀얼 스택 모드를 지원하는지 알아보려면 [describe-db-subnet-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-subnet-groups.html) 명령을 실행하고 출력에서 `SupportedNetworkTypes`를 확인합니다.

읽기 전용 복제본은 독립적인 DB 인스턴스로 취급되며 기본 DB 인스턴스와 다른 네트워크 유형을 가질 수 있습니다. 읽기 전용 복제본의 기본 DB 인스턴스의 네트워크 유형을 변경하는 경우 읽기 전용 복제본은 영향을 받지 않습니다. DB 인스턴스를 복원할 때 지원되는 모든 네트워크 유형으로 복원할 수 있습니다.

#### 듀얼 스택 모드 DB 인스턴스 작업
<a name="USER_VPC.IP_addressing.dual-stack-working-with"></a>

DB 인스턴스를 생성하거나 수정할 때 리소스가 DB 인스턴스와 IPv4, IPv6 또는 둘 다를 통해 통신할 수 있도록 허용하기 위해 듀얼 스택 모드를 지정할 수 있습니다.

AWS Management Console을 사용하여 DB 인스턴스를 생성하거나 수정할 때 **네트워크 유형** 섹션에서 듀얼 스택 모드를 지정할 수 있습니다. 다음 이미지는 콘솔의 **네트워크 유형** 섹션을 보여 줍니다.

![\[듀얼 스택 모드가 선택된 콘솔의 네트워크 유형 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/dual-stack-mode.png)


AWS CLI를 사용하여 DB 인스턴스를 생성하거나 수정할 때 듀얼 스택 모드를 사용하려면 `--network-type` 옵션을 `DUAL`로 설정합니다. 를 사용하여 DB 인스턴스를 생성하거나 수정할 때 듀얼 스택 모드를 사용하려면 `NetworkType` 옵션을 `DUAL`로 설정합니다. DB 인스턴스의 네트워크 유형을 수정하는 경우 가동 중지가 발생할 수 있습니다. 지정된 DB 엔진 버전 또는 DB 서브넷 그룹에서 듀얼 스택 모드가 지원되지 않는 경우 `NetworkTypeNotSupported` 오류가 반환됩니다.

DB 인스턴스를 생성하는 방법에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요. DB 인스턴스 수정에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

콘솔을 사용하여 DB 인스턴스가 이중 스택 모드인지 확인하려면 DB 인스턴스의 **연결 및 보안** 탭에서 **네트워크 유형**을 확인하세요.

#### 듀얼 스택 모드를 사용하도록 IPv4 전용 DB 인스턴스 수정
<a name="USER_VPC.IP_addressing.dual-stack-modifying-ipv4"></a>

듀얼 스택 모드를 사용하도록 IPv4 전용 DB 인스턴스를 수정할 수 있습니다. 그러려면 DB 인스턴스의 네트워크 유형을 변경합니다. 수정으로 인해 가동 중지가 발생할 수 있습니다.

유지 관리 기간 동안 Amazon RDS DB 인스턴스 의 네트워크 유형을 변경하는 것이 좋습니다. 새 인스턴스의 네트워크 유형을 듀얼 스택 모드로 설정하는 것은 현재 지원되지 않습니다. `modify-db-instance` 명령을 사용하여 네트워크 유형을 수동으로 설정할 수 있습니다.

듀얼 스택 모드를 사용하도록 DB 인스턴스를 수정하기 전에 DB 서브넷 그룹이 듀얼 스택 모드를 지원하는지 확인하세요. DB 인스턴스와 연결된 DB 서브넷 그룹이 듀얼 스택 모드를 지원하지 않는 경우 DB 인스턴스를 수정할 때 이를 지원하는 다른 DB 서브넷 그룹을 지정하세요. DB 인스턴스 의 DB 서브넷 그룹을 수정하면 가동 중지가 발생할 수 있습니다.

듀얼 스택 모드를 사용하도록 DB 인스턴스 를 변경하기 전에 DB 인스턴스 의 DB 서브넷 그룹을 수정할 경우, DB 서브넷 그룹이 변경 전후에 DB 인스턴스에 대해 유효한지 확인하세요.

RDS for PostgreSQL, RDS for MySQL, RDS for Oracle, RDS for MariaDB 단일 AZ 인스턴스의 경우 `DUAL`로 설정된 `--network-type` 파라미터만 사용해 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 명령을 실행하여 네트워크를 듀얼 스택 모드로 변경하는 것이 좋습니다. 동일한 API 호출에서 다른 파라미터를 `--network-type` 파라미터와 함께 추가하면 가동 중지가 발생할 수 있습니다. 여러 파라미터를 수정하려면 다른 파라미터를 사용하여 다른 `modify-db-instance` 요청을 보내기 전에 네트워크 유형 수정을 성공적으로 완료했는지 확인합니다.

RDS for PostgreSQL, RDS for MySQL, RDS for Oracle 및 RDS for MariaDB 다중 AZ DB 인스턴스용의 네트워크 유형을 수정하면 `--network-type` 파라미터만 사용하거나, modify-db-instance 명령 내에 파라미터를 결합할 경우 잠시 가동 중지가 발생하고 장애 조치가 트리거됩니다.

RDS for SQL Server 단일 AZ 또는 다중 AZ DB 인스턴스에서 네트워크 유형을 수정하면 `--network-type` 파라미터만 사용하거나, `modify-db-instance` 명령 내에 파라미터를 결합할 경우 가동 중지가 발생합니다. 네트워크 유형을 수정하면 SQL Server 다중 AZ 인스턴스에서 장애 조치가 발생합니다.

변경 후 DB 인스턴스에 연결할 수 없는 경우 선택한 네트워크(IPv4 또는 IPv6)의 데이터베이스로의 트래픽을 허용하도록 클라이언트 및 데이터베이스 보안 방화벽과 라우팅 테이블이 정확하게 구성되어 있는지 확인하세요. IPv6 주소를 사용하여 연결하려면 운영 체제 파라미터, 라이브러리 또는 드라이버를 수정해야 할 수도 있습니다.

듀얼 스택 모드를 사용하도록 DB 인스턴스를 수정하는 경우, 단일 AZ 배포에서 다중 AZ 배포로 또는 다중 AZ 배포에서 단일 AZ 배포로의 보류 중인 변경이 있어서는 안 됩니다.

**듀얼 스택 모드를 사용하도록 IPv4 전용 DB 인스턴스 수정**

1. 듀얼 스택 모드를 지원하도록 DB 서브넷 그룹을 수정하거나 듀얼 스택 모드를 지원하는 DB 서브넷 그룹을 생성합니다.

   1. IPv6 CIDR 블록을 VPC와 연결

      자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC에 IPv6 CIDR 블록 추가](https://docs.aws.amazon.com/vpc/latest/userguide/modify-vpcs.html#vpc-associate-ipv6-cidr)를 참조하세요.

   1. IPv6 CIDR 블록을 DB 서브넷 그룹의 모든 서브넷에 연결합니다.

      자세한 내용은 *Amazon VPC 사용 설명서*의 [서브넷에 IPv6 CIDR 블록 추가](https://docs.aws.amazon.com/vpc/latest/userguide/modify-subnets.html#subnet-associate-ipv6-cidr)를 참조하세요.

   1. DB 서브넷 그룹이 듀얼 스택 모드를 지원하는지 확인합니다.

      AWS Management Console을 사용 중인 경우 DB 서브넷 그룹을 선택하고 **지원되는 네트워크 유형(Supported network types)** 값을 **듀얼, IPv4(Dual, IPv4)**로 설정하세요.

      AWS CLI를 사용 중인 경우 [describe-db-subnet-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-subnet-groups.html) 명령을 실행하고 DB 인스턴스의 `SupportedNetworkType` 값을 `Dual, IPv4`로 설정하세요.

1. 데이터베이스에 대한 IPv6 연결을 허용하도록 DB 인스턴스와 연결된 보안 그룹을 수정하거나 IPv6 연결을 허용하는 새 보안 그룹을 생성합니다.

   자세한 내용은 *Amazon VPC 사용 설명서*의 [보안 그룹 규칙](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)을 참조하세요.

1. 듀얼 스택 모드를 지원하도록 DB 인스턴스를 수정합니다. 이렇게 하려면 **네트워크 유형**을 **듀얼 스택 모드**로 설정하세요.

   콘솔을 사용 중인 경우 다음 설정이 올바른지 확인합니다.
   + **네트워크 유형** – **듀얼 스택 모드**  
![\[듀얼 스택 모드가 선택된 콘솔의 네트워크 유형 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/dual-stack-mode.png)
   + **DB 서브넷 그룹** - 이전 단계에서 구성한 DB 서브넷 그룹
   + **보안 그룹** - 이전 단계에서 구성한 보안

   AWS CLI를 사용 중인 경우 다음 설정이 올바른지 확인합니다.
   + `--network-type` – `dual`
   + `--db-subnet-group-name` - 이전 단계에서 구성한 DB 서브넷 그룹
   + `--vpc-security-group-ids` - 이전 단계에서 구성한 VPC 보안 그룹

   예제: 

   ```
   aws rds modify-db-instance --db-instance-identifier my-instance --network-type "DUAL"
   ```

1. DB 인스턴스가 듀얼 스택 모드를 지원하는지 확인합니다.

   콘솔을 사용하는 경우 DB 인스턴스에 대한 **연결 및 보안** 탭을 선택합니다. 해당 탭에서 **네트워크 유형** 값이 **듀얼 스택 모드**인지 확인합니다.

   AWS CLI를 사용 중인 경우 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령을 실행하고 DB 인스턴스의 `NetworkType` 값이 `dual`인지 확인합니다.

   DB 인스턴스 엔드포인트에서 `dig` 명령을 실행하여 연결된 IPv6 주소를 식별합니다.

   ```
   dig db-instance-endpoint AAAA
   ```

   IPv6 주소가 아닌 DB 인스턴스 엔드포인트를 사용하여 DB 인스턴스에 연결합니다.

#### 리전 및 버전 사용 가능 여부
<a name="USER_VPC.IP_addressing.RegionVersionAvailability"></a>

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전 리전에 따라 다릅니다. 듀얼 스택 모드의 버전 및 리전 가용성에 대한 자세한 내용은 [Amazon RDS의 이중 스택 모드를 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.DualStackMode.md) 섹션을 참조하세요.

#### 듀얼 스택 네트워크 DB 인스턴스에 대한 제한 사항
<a name="USER_VPC.IP_addressing.dual-stack-limitations"></a>

듀얼 스택 네트워크 DB 인스턴스에는 다음과 같은 제한이 적용됩니다.
+ DB 인스턴스는 IPv6 프로토콜을 단독으로 사용할 수 없습니다. IPv4를 단독으로 사용하거나 IPv4 및 IPv6 프로토콜(듀얼 스택 모드)을 사용할 수 있습니다.
+ Amazon RDS에서는 네이티브 IPv6 서브넷을 지원하지 않습니다.
+ RDS for SQL Server의 경우 Always On AG 가용성 그룹 리스너 엔드포인트를 사용하는 듀얼 스택 모드 DB 인스턴스는 IPv4 주소만 제공합니다.
+ 듀얼 스택 모드 DB 인스턴스에는 RDS 프록시를 사용할 수 없습니다.
+ AWS Outposts DB 인스턴스에서 RDS와 함께 듀얼 스택 모드를 사용할 수 없습니다.
+ 로컬 영역의 DB 인스턴스에서 RDS와 함께 듀얼 스택 모드를 사용할 수 없습니다.

## VPC에 있는 DB 인스턴스를 인터넷에서 숨기기
<a name="USER_VPC.Hiding"></a>

한 가지 일반적인 Amazon RDS 시나리오는 일반에 공개되어 있는 웹 애플리케이션을 포함한 Amazon EC2 인스턴스와 공개적으로 액세스할 수 없는 데이터베이스를 포함한 DB 인스턴스가 있는 VPC를 사용하는 경우입니다. 예를 들어, 퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC를 생성할 수 있습니다. 웹 서버로 작동하는 EC2 인스턴스는 퍼블릭 서브넷에 배포할 수 있습니다. DB 인스턴스는 프라이빗 서브넷에 배포됩니다. 이런 배포 환경에서는 웹 서버만 DB 인스턴스에 액세스할 수 있습니다. 이 시나리오에 대한 그림은 [동일한 VPC에 있는 Amazon EC2 인스턴스가 VPC 내에 있는 DB 인스턴스에 액세스](USER_VPC.Scenarios.md#USER_VPC.Scenario1) 섹션을 참조하세요.

VPC 내에서 DB 인스턴스를 시작하면 DB 인스턴스는 VPC 내부 트래픽에 대한 프라이빗 IP 주소를 가집니다. 이 프라이빗 IP 주소는 공개적으로 액세스할 수 없습니다. **퍼블릭 액세스** 옵션을 사용하여 DB 인스턴스에 프라이빗 IP 주소 외에 퍼블릭 IP 주소가 있는지 여부를 지정할 수 있습니다. DB 인스턴스가 공개적으로 액세스 가능한 것으로 지정된 경우 해당 DNS 엔드포인트는 VPC 내에서 프라이빗 IP 주소로 확인됩니다. VPC 외부에서 퍼블릭 IP 주소로 확인됩니다. DB 인스턴스에 대한 액세스는 궁극적으로 사용하는 보안 그룹에 의해 제어됩니다. DB 인스턴스에 할당된 보안 그룹에 이를 허용하는 인바운드 규칙이 포함되어 있지 않으면 해당 퍼블릭 액세스가 허용되지 않습니다. 또한 DB 인스턴스에 공개적으로 액세스할 수 있으려면 해당 DB 서브넷 그룹의 서브넷에 인터넷 게이트웨이가 있어야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 섹션을 참조하세요.

퍼블릭 액세스 옵션을 수정하여 **퍼블릭 액세스**를 켜거나 끄도록 DB 인스턴스를 수정할 수 있습니다. 다음 그림은 **추가 연결 구성** 섹션의 **퍼블릭 액세스** 옵션을 보여 줍니다. 옵션을 설정하려면 **연결(Connectivity)** 섹션에서 **추가 연결 구성(Additional connectivity configuration)** 섹션을 엽니다.

![\[추가 연결 구성 섹션에서 데이터베이스 퍼블릭 액세스 옵션을 아니요로 설정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/VPC-example4.png)


**퍼블릭 액세스(Public access)** 옵션을 설정하기 위해 DB 인스턴스를 수정하는 방법에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

## VPC에 DB 인스턴스 만들기
<a name="USER_VPC.InstanceInVPC"></a>

다음 절차에 따라 VPC에서 DB 인스턴스를 생성할 수 있습니다. 기본 VPC를 사용하려면 2단계부터 시작하고 이미 생성된 VPC 및 DB 서브넷 그룹을 사용할 수 있습니다. 추가 VPC를 만들려면 새 VPC를 만들 수 있습니다.

**참고**  
VPC의 DB 인스턴스에 공개적으로 액세스할 수 있도록 하려면 VPC 속성 *DNS 호스트 이름* 및 *DNS 확인*을 활성화하여 VPC에 대한 DNS 정보를 업데이트해야 합니다. VPC 인스턴스의 DNS 정보 업데이트에 대한 자세한 내용은 [VPC에 대한 DNS 지원 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)를 참조하세요.

다음 단계에 따라 VPC에서 DB 인스턴스를 만들 수 있습니다:
+ [1단계: VPC 생성](#USER_VPC.CreatingVPC) 
+  [2단계: DB 서브넷 그룹 만들기](#USER_VPC.CreateDBSubnetGroup)
+  [3단계: VPC 보안 그룹 만들기](#USER_VPC.CreateVPCSecurityGroup)
+  [4단계: VPC에서 DB 인스턴스 만들기](#USER_VPC.CreateDBInstanceInVPC) 

### 1단계: VPC 생성
<a name="USER_VPC.CreatingVPC"></a>

최소 2개의 가용 영역에 서브넷이 있는 VPC를 생성합니다. DB 서브넷 그룹을 만들 때 이들 서브넷이 사용됩니다. 기본 VPC가 있는 경우에는 해당 AWS 리전의 각 가용 영역에 서브넷이 자동으로 생성됩니다.

자세한 내용은 [프라이빗 서브넷과 퍼블릭 서브넷을 포함하는 VPC 생성](CHAP_Tutorials.WebServerDB.CreateVPC.md#CHAP_Tutorials.WebServerDB.CreateVPC.VPCAndSubnets) 섹션을 참조하거나 *Amazon VPC 사용 설명서*의 [VPC 생성](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)을 참조하세요.

### 2단계: DB 서브넷 그룹 만들기
<a name="USER_VPC.CreateDBSubnetGroup"></a>

DB 서브넷 그룹은 사용자가 VPC에 대해 만든 다음 DB 인스턴스에 대해 지정하는 서브넷(일반적으로 프라이빗)의 모음입니다. DB 서브넷 그룹을 사용하면 AWS CLI 또는 RDS API를 사용하여 DB 인스턴스를 생성할 때 특정 VPC를 지정할 수 있습니다. 콘솔을 사용하는 경우 사용할 VPC와 서브넷만 선택할 수 있습니다. 각 DB 서브넷 그룹은 해당 AWS 리전에서 두 개 이상의 가용 영역에 한 개 이상의 서브넷이 있어야 합니다. 모범 사례로서, 각 DB 서브넷 그룹에는 AWS 리전의 가용 영역마다 하나 이상의 서브넷이 있어야 합니다.

다중 AZ 배포의 경우, AWS 리전에 있는 모든 가용 영역에 대한 서브넷을 정의하면 Amazon RDS가 필요한 경우 다른 가용 영역에 새로운 예비 복제본을 만들 수 있습니다. 나중에 다중 AZ 배포로 변환할 수 있으므로, 단일 AZ 배포의 경우에도 이 모범 사례를 따를 수 있습니다.

DB 인스턴스에 공개적으로 액세스할 수 있도록 하려면 DB 서브넷 그룹의 서브넷에 인터넷 게이트웨이가 있어야 합니다. 서브넷용 인터넷 게이트웨이에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터넷 게이트웨이를 사용하여 인터넷에 연결](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)을 참조하세요.

**참고**  
로컬 영역의 DB 서브넷 그룹에는 서브넷이 하나만 있을 수 있습니다.

VPC에서 DB 인스턴스를 생성할 때 이에 대한 DB 서브넷 그룹을 선택합니다. Amazon RDSA는 DB 인스턴스와 연결할 서브넷 내의 서브넷과 IP 주소를 선택합니다. DB 서브넷 그룹이 없는 경우 Amazon RDS는 DB 인스턴스를 생성할 때 기본 서브넷 그룹을 생성합니다. Amazon RDS에서 탄력적 네트워크 인터페이스를 생성하고 해당 IP 주소로 DB 인스턴스에 연결합니다. DB 인스턴스는 서브넷이 포함된 가용 영역을 사용합니다.

다중 AZ 배포의 경우, AWS 리전에 있는 두 개 이상의 가용 영역에 대한 서브넷을 정의하면 Amazon RDS가 필요한 경우 다른 가용 영역에 새로운 예비 복제본을 만들 수 있습니다. 단일 AZ 배포의 경우도 어느 시점에 단일 AZ 배포를 다중 AZ 배포로 변환하려면 이 작업을 수행해야 합니다.

이 단계에서는 DB 서브넷 그룹을 만들고 VPC용으로 만든 서브넷을 추가합니다.

**DB 서브넷 그룹을 만드는 방법**

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 [**Subnet groups**]를 선택합니다.

1. [**Create DB Subnet Group**]을 선택합니다.

1. [**Name**]에 DB 서브넷 그룹의 이름을 입력합니다.

1. **설명**에 DB 서브넷 그룹에 대한 설명을 입력합니다.

1. **VPC**에서 기본 VPC 또는 생성한 VPC를 선택합니다.

1. **서브넷 추가** 섹션의 **가용 영역**에서 해당 서브넷을 포함하는 가용 영역을 선택한 다음 **서브넷**에서 서브넷을 선택합니다.  
![\[DB 서브넷 그룹을 생성합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/RDSVPC101.png)
**참고**  
로컬 영역을 활성화한 경우 **Create DB subnet group(DB 서브넷 그룹 생성)** 페이지에서 가용 영역 그룹을 선택할 수 있습니다. 이 경우 **가용 영역 그룹**, **가용 영역** 및 **서브넷**을 선택합니다.

1. **Create**를 선택합니다.

   새 DB 서브넷 그룹은 RDS 콘솔의 DB 서브넷 그룹 목록에 나타납니다. DB 서브넷 그룹을 선택하면 창 하단에 있는 세부 정보 창에서 그룹과 연결된 모든 서브넷을 포함한 세부 정보를 확인할 수 있습니다.

### 3단계: VPC 보안 그룹 만들기
<a name="USER_VPC.CreateVPCSecurityGroup"></a>

DB 인스턴스를 만들기 전에 DB 인스턴스와 연결할 VPC 보안 그룹을 만들어야 합니다. VPC 보안 그룹을 생성하지 않는 경우 DB 인스턴스를 생성할 때 기본 보안 그룹을 사용할 수 있습니다. DB 인스턴스에 대한 보안 그룹을 생성하는 방법에 대한 지침은 [프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성](CHAP_Tutorials.WebServerDB.CreateVPC.md#CHAP_Tutorials.WebServerDB.CreateVPC.SecurityGroupDB) 섹션을 참조하거나 *Amazon VPC 사용 설명서*의 [보안 그룹을 사용하여 리소스에 대한 트래픽 제어](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)를 참조하세요.

### 4단계: VPC에서 DB 인스턴스 만들기
<a name="USER_VPC.CreateDBInstanceInVPC"></a>

이 단계에서는 DB 인스턴스를 만들고 이전 단계에서 만든 VPC 이름, DB 서브넷 그룹 및 VPC 보안 그룹을 사용합니다.

**참고**  
VPC의 DB 인스턴스에 공개적으로 액세스할 수 있도록 하려면 VPC 속성 *DNS 호스트 이름* 및 *DNS 확인*을 활성화해야 합니다. 자세한 내용을 알아보려면 *Amazon VPC 사용 설명서*의 [VPC에 대한 DNS 속성](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)을 참조하세요.

DB 인스턴스 생성 방법에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

**연결** 섹션에 메시지가 표시되면 VPC 이름, DB 서브넷 그룹 및 VPC 보안 그룹을 입력합니다.

# DB 인스턴스에 대한 VPC 업데이트
<a name="USER_VPC.VPC2VPC"></a>

AWS Management Console을 사용하여 DB 인스턴스를 다른 VPC로 이동할 수 있습니다.

DB 인스턴스 수정에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하세요. 수정 페이지의 **연결** 섹션에서 다음과 같이 **DB 서브넷 그룹**에 새 DB 서브넷 그룹을 입력합니다. 새 서브넷 그룹은 새 VPC에 있는 서브넷 그룹이어야 합니다.

![\[DB 인스턴스 서브넷 그룹을 수정합니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/EC2-VPC.png)


다음 조건이 적용되는 경우 DB 인스턴스의 VPC를 변경할 수 없습니다.
+ DB 인스턴스는 여러 가용 영역에 있습니다. DB 인스턴스를 단일 가용 영역으로 변환하고, 새 VPC로 이동한 다음, 다중 AZ DB 인스턴스로 다시 변환할 수 있습니다. 자세한 내용은 [Amazon RDS에 대한 다중 AZ 배포 구성 및 관리](Concepts.MultiAZ.md) 단원을 참조하세요.
+ DB 인스턴스에는 하나 이상의 읽기 전용 복제본이 있습니다. 읽기 전용 복제본을 제거하고, DB 인스턴스를 새 VPC로 이동한 다음, 읽기 전용 복제본을 다시 추가할 수 있습니다. 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 단원을 참조하세요.
+ DB 인스턴스는 읽기 전용 복제본입니다. 읽기 전용 복제본을 승격한 다음 독립 실행형 DB 인스턴스를 새 VPC로 이동할 수 있습니다. 자세한 내용은 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md) 단원을 참조하세요.
+ 대상 VPC의 서브넷 그룹은 DB 인스턴스의 가용 영역에 서브넷이 없습니다. DB 인스턴스의 가용 영역에 있는 서브넷을 DB 서브넷 그룹에 추가한 다음 DB 인스턴스를 새 VPC로 이동할 수 있습니다. 자세한 내용은 [DB 서브넷 그룹을 사용한 작업](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Subnets) 단원을 참조하세요.

# VPC에서 DB 인스턴스에 액세스하는 시나리오
<a name="USER_VPC.Scenarios"></a>

Amazon RDS에서는 VPC의 DB 인스턴스에 액세스하는 다음 시나리오를 지원합니다.
+ [동일한 VPC에 있는 Amazon EC2 인스턴스](#USER_VPC.Scenario1)
+ [다른 VPC에 있는 EC2 인스턴스](#USER_VPC.Scenario3)
+ [클라이언트 애플리케이션이 인터넷을 통해](#USER_VPC.Scenario4)
+ [프라이빗 네트워크](#USER_VPC.NotPublic)

## 동일한 VPC에 있는 Amazon EC2 인스턴스가 VPC 내에 있는 DB 인스턴스에 액세스
<a name="USER_VPC.Scenario1"></a>

VPC에서 DB 인스턴스를 사용하는 일반적인 사례는 동일한 VPC의 Amazon EC2 인스턴스에서 실행 중인 애플리케이션 서버와 데이터를 공유하는 것입니다.

다음 다이어그램은 이 시나리오를 보여 줍니다.

![\[퍼블릭 웹 서버와 프라이빗 데이터베이스를 사용하는 VPC 시나리오\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


동일한 VPC에서 EC2 인스턴스와 DB 인스턴스 간 액세스를 관리하는 가장 간단한 방법은 다음과 같습니다.
+ DB 인스턴스가 포함될 VPC 보안 그룹을 생성합니다. 이 보안 그룹을 사용해 DB 인스턴스에 대한 액세스를 제한할 수 있습니다. 예를 들어 이 보안 그룹에 대한 사용자 지정 규칙을 생성할 수 있습니다. 이렇게 하면 DB 인스턴스를 생성할 때 할당한 포트와 개발 또는 기타 목적으로 DB 인스턴스에 액세스하는 데 사용하는 IP 주소를 사용하여 TCP 액세스를 허용할 수 있습니다.
+ EC2 인스턴스(웹 서버 및 클라이언트)가 포함될 VPC 보안 그룹을 생성합니다. 이 보안 그룹은 필요할 경우 VPC의 라우팅 테이블을 사용해 인터넷에서 EC2 인스턴스 액세스를 허용할 수 있습니다. 예를 들어, 이 보안 그룹에서 TCP가 포트 22를 통해 EC2 인스턴스에 액세스하도록 허용하는 규칙을 설정할 수 있습니다.
+ DB 인스턴스에 대한 보안 그룹에서 EC2 인스턴스에 대해 생성한 보안 그룹으로부터의 연결을 허용하는 사용자 지정 규칙을 만듭니다. 이러한 규칙을 통해 보안 그룹의 모든 구성원은 DB 인스턴스에 액세스할 수 있게 됩니다.

별도의 가용 영역에서 구성된 추가 퍼블릭 및 프라이빗 서브넷이 있습니다. RDS DB 서브넷 그룹은 최소 2개의 가용 영역에 한 개 이상의 서브넷이 필요합니다. 추가 서브넷을 사용하면 향후 다중 AZ DB 인스턴스 배포로 쉽게 전환할 수 있습니다.

이 시나리오에 대해 퍼블릭 서브넷과 프라이빗 서브넷 모두에서 VPC를 생성하는 방법을 보여주는 자습서는 [자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)](CHAP_Tutorials.WebServerDB.CreateVPC.md) 단원을 참조하세요.

**작은 정보**  
DB 인스턴스를 생성할 때 Amazon EC2 인스턴스와 DB 인스턴스 간의 네트워크 연결을 자동으로 설정할 수 있습니다. 자세한 내용은 [EC2 인스턴스와의 자동 네트워크 연결 구성](USER_CreateDBInstance.md#USER_CreateDBInstance.Prerequisites.VPC.Automatic) 단원을 참조하십시오.

**VPC 보안 그룹에서 다른 보안 그룹으로부터의 연결을 허용하는 규칙을 만들려면 다음을 수행합니다.**

1.  AWS Management Console에 로그인하고 [https://console.aws.amazon.com/vpc](https://console.aws.amazon.com/vpc)에서 Amazon VPC 콘솔을 엽니다.

1.  탐색 창에서 **Security groups**를 선택합니다.

1. 다른 보안 그룹의 구성원에 대한 액세스를 허용할 보안 그룹을 선택하거나 생성합니다. 위 시나리오에서 이 보안 그룹을 DB 인스턴스에 사용합니다. **인바운드 규칙** 탭을 선택한 후 **인바운드 규칙 편집**을 선택합니다.

1. **인바운드 규칙 편집** 페이지에서 **규칙 추가**]를 선택합니다.

1. **유형**에서 **MYSQL/Aurora**와 같이 DB 인스턴스를 생성할 때 사용한 포트에 해당하는 항목을 선택합니다.

1. **소스** 상자에 일치하는 보안 그룹을 나열하는 보안 그룹의 ID를 입력합니다. 이 보안 그룹에서 보호 중인 리소스에 대한 액세스를 허용할 구성원이 포함된 보안 그룹을 선택합니다. 위 시나리오에서 이 보안 그룹을 EC2 인스턴스에 사용합니다.

1. 필요한 경우 **유형**으로 **모든 TCP**를 지정하고 **소스** 상자에 보안 그룹을 입력한 규칙을 생성하여 TCP 프로토콜에 대해 단계를 반복합니다. UDP 프로토콜을 사용하려는 경우 **유형**이 **모든 UD**P이고 **소스**에 보안 그룹이 있는 규칙을 생성합니다.

1. **규칙 저장**을 선택합니다.

다음 화면은 소스에 대한 보안 그룹이 포함된 인바운드 규칙을 보여 줍니다.

![\[보안 그룹을 다른 보안 그룹의 규칙에 추가\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-vpc-add-sg-rule.png)


EC2 인스턴스에서 DB 인스턴스에 연결하는 방법에 대한 자세한 내용은 [Amazon RDS DB 인스턴스에 연결](CHAP_CommonTasks.Connect.md) 단원을 참조하세요.

## VPC에 있는 DB 인스턴스에 다른 VPC에 있는 EC2 인스턴스가 액세스
<a name="USER_VPC.Scenario3"></a>

DB 인스턴스가 액세스 시 사용할 EC2 인스턴스와 다른 VPC에 있는 경우 DB 인스턴스에 액세스하기 위해 VPC 피어링을 사용할 수 있습니다.

다음 다이어그램은 이 시나리오를 보여 줍니다.

![\[VPC에 있는 DB 인스턴스에 다른 VPC에 있는 Amazon EC2 인스턴스가 액세스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/RDSVPC2EC2VPC.png)


VPC 피어링 연결은 프라이빗 IP 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다. 동일한 네트워크에 속하는 경우와 같이 VPC의 리소스가 서로 통신할 수 있습니다. 자체 VPC 간, 다른 AWS 계정에서 VPC를 사용하여 또는 다른 AWS 리전에서 VPC를 사용하여 VPC 피어링 연결을 만들 수 있습니다. VPC 피어링에 대한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [VPC 피어링](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-peering.html)을 참조하세요.

## 클라이언트 애플리케이션이 인터넷을 통해 VPC에 있는 DB 인스턴스에 액세스
<a name="USER_VPC.Scenario4"></a>

인터넷을 통해 클라이언트 애플리케이션에서 VPC에 있는 DB 인스턴스에 액세스하려면, 단일 퍼블릭 서브넷이 있는 VPC와 인터넷을 통한 통신을 지원하는 인터넷 게이트웨이를 구성합니다.

다음 다이어그램은 이 시나리오를 보여 줍니다.

![\[클라이언트 애플리케이션이 인터넷을 통해 VPC에 있는 DB 인스턴스에 액세스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/GS-VPC-network.png)


다음 구성을 권장합니다.

 
+ 크기가 /16인 VPC(예: CIDR: 10.0.0.0/16). 이 크기는 65,536개의 프라이빗 IP 주소를 제공합니다.
+ 크기가 /24인 서브넷(예: CIDR: 10.0.0.0/24). 이 크기는 256개의 프라이빗 IP 주소를 제공합니다.
+ Amazon RDS DB 인스턴스는 VPC 및 서브넷과 연결됩니다. Amazon RDS는 서브넷 내의 IP 주소를 DB 인스턴스에 할당합니다.
+ VPC를 인터넷 및 다른 AWS 제품과 연결하는 인터넷 게이트웨이.
+ DB 인스턴스와 연결된 보안 그룹입니다. 보안 그룹의 인바운드 규칙은 클라이언트 애플리케이션이 사용자의 DB 인스턴스에 액세스할 수 있도록 해줍니다.

VPC에서 DB 인스턴스 생성에 대한 자세한 내용은 [VPC에 DB 인스턴스 만들기](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.InstanceInVPC) 단원을 참조하세요.

## 프라이빗 네트워크에서 액세스하는 VPC의 DB 인스턴스
<a name="USER_VPC.NotPublic"></a>

DB 인스턴스에 공개적으로 액세스할 수 없는 경우 프라이빗 네트워크에서 액세스할 수 있는 옵션은 다음과 같습니다.
+ AWS Site-to-Site VPN 연결. 자세한 내용은 [AWS Site-to-Site VPN란 무엇입니까?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)를 참조하십시오.
+ Direct Connect 연결. 자세한 내용은 [Direct Connect란 무엇인가요?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)를 참조하세요.
+ AWS Client VPN 연결. 자세한 내용은 [AWS Client VPN란 무엇입니까?](https://docs.aws.amazon.com//vpn/latest/clientvpn-admin/what-is.html)를 참조하세요.

다음 다이어그램은 AWS Site-to-Site VPN 연결 시나리오를 보여줍니다.

![\[프라이빗 네트워크에서 액세스하는 VPC의 DB 인스턴스\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/site-to-site-vpn-connection.png)


자세한 내용은 [인터네트워크 트래픽 개인 정보](inter-network-traffic-privacy.md) 섹션을 참조하세요.

# 자습서: DB 인스턴스에 사용할 Amazon VPC 생성(IPv4 전용)
<a name="CHAP_Tutorials.WebServerDB.CreateVPC"></a>

일반적인 시나리오에는 Amazon VPC 서비스를 기반으로 하는 Virtual Private Cloud(VPC)의 DB 인스턴스가 포함됩니다. 이 VPC는 동일한 VPC에서 실행 중인 웹 서버와 데이터를 공유합니다. 이 자습에서는 이 시나리오를 위한 VPC를 생성합니다.

다음 다이어그램은 이 시나리오를 보여 줍니다. 다른 시나리오에 대한 자세한 내용은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md)을(를) 참조하십시오.

![\[단일 VPC 시나리오\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


퍼블릭 인터넷이 아닌 웹 서버에서만 DB 인스턴스를 사용할 수 있어야 합니다. 따라서 퍼블릭 서브넷과 프라이빗 서브넷을 모두 포함하여 VPC를 생성합니다. 퍼블릭 서브넷에서 웹 서버를 호스팅하므로 웹 서버에서 퍼블릭 인터넷에 액세스할 수 있습니다. DB 인스턴스는 프라이빗 서브넷에서 호스팅됩니다. Amazon EC2 인스턴스는 동일한 VPC 내에서 호스팅되므로 DB 인스턴스에 연결할 수 있습니다. 하지만 퍼블릭 인터넷에서는 DB 인스턴스를 사용할 수 없으므로 보안이 강화됩니다.

이 자습서에서는 별도의 가용 영역에서 추가 퍼블릭 및 프라이빗 서브넷을 구성합니다. 이러한 서브넷은 자습서에서 사용하지 않습니다. RDS DB 서브넷 그룹은 최소 2개의 가용 영역에 한 개 이상의 서브넷이 필요합니다. 추가 서브넷이 있으면 future 다중 AZ DB 인스턴스 배포로 쉽게 전환할 수 있습니다. 

이 자습서에서는 Amazon RDS DB 인스턴스용 VPC 구성에 대해 설명합니다. 이 VPC 시나리오에 대한 웹 서버를 생성하는 방법을 보여 주는 자습서는 [자습서: 웹 서버 및 Amazon RDS DB 인스턴스 생성](TUT_WebAppWithRDS.md) 단원을 참조하세요. Amazon VPC 대한 자세한 내용은 [Amazon VPC 시작 안내서](https://docs.aws.amazon.com/AmazonVPC/latest/GettingStartedGuide/) 및 [Amazon VPC 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/)를 참조하세요.

**작은 정보**  
Amazon EC2 인스턴스와 DB 간에 네트워크 연결을 설정할 수 있습니다.예DB를 생성할 때 자동으로예. 네트워크 구성은 이 자습서에서 설명한 것과 비슷합니다. 자세한 내용은 [EC2 인스턴스와의 자동 네트워크 연결 구성](USER_CreateDBInstance.md#USER_CreateDBInstance.Prerequisites.VPC.Automatic). 섹션을 참조하세요.

## 프라이빗 서브넷과 퍼블릭 서브넷을 포함하는 VPC 생성
<a name="CHAP_Tutorials.WebServerDB.CreateVPC.VPCAndSubnets"></a>

다음은 퍼블릭 서브넷과 프라이빗 서브넷을 모두 포함하는 VPC를 생성하는 절차입니다.

**VPC 및 서브넷을 생성하는 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 VPC를 생성할 리전을 선택합니다. 이 예에서는 미국 서부(오레곤) 리전을 사용합니다.

1. 왼쪽 상단 모서리에서 **VPC 대시보드**를 선택합니다. VPC 생성을 시작하려면 **VPC 생성**을 선택합니다.

1. **VPC 설정**의 **생성할 리소스**에서 **VPC 등**을 선택합니다.

1. **VPC 설정**을 위해 다음 값을 설정합니다.
   + **네임 태그 자동 생성** - **tutorial**
   + **IPv4 CIDR block:** - **10.0.0.0/16**
   + **IPv6 CIDR 블록** - **No IPv6 CIDR Block(IPv6 CIDR 블록 없음)**
   + **테넌시** - **기본값**
   + **가용 영역(AZ)의 수** - **2**
   + **Customize AZs**(AZ 사용자 지정) - 기본값을 유지합니다.
   + **퍼블릭 서브넷 수** – **2**
   + **프라이빗 서브넷 수** – **2**
   + **Customize subnets CIDR blocks**(서브넷 CIDR 블록 사용자 지정) - 기본값을 유지합니다.
   + **NAT 게이트웨이(\$1)** – **없음**
   + **VPC 엔드포인트** – **없음**
   + **DNS options**(DNS 옵션) - 기본값을 유지합니다.
**참고**  
Amazon RDS에서는 다중 AZ DB 인스턴스 배포를 지원하려면 서로 다른 두 가용 영역에 있는 Amazon RDS가 필요합니다. 이 자습서에서는 단일 AZ 배포를 생성하지만 요구 사항에 따라 향후 다중 AZ DB 인스턴스 배포로 더욱 쉽게 전환할 수 있습니다.

1. **VPC 생성**을 선택합니다.

## 퍼블릭 웹 서버에 대해 VPC 보안 그룹 생성
<a name="CHAP_Tutorials.WebServerDB.CreateVPC.SecurityGroupEC2"></a>

이제 퍼블릭 액세스를 위한 보안 그룹을 생성합니다. VPC의 퍼블릭 EC2 인스턴스에 연결하려면 VPC 보안 그룹에 인바운드 규칙을 추가해야 합니다. 이를 통해 인터넷에서 트래픽을 연결할 수 있습니다.

**VPC 보안 그룹의 생성 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. **VPC 대시보드**, **보안 그룹**, **보안 그룹 생성**을 차례대로 선택합니다.

1. **보안 그룹 생성** 페이지에서 다음 값을 설정합니다.
   + **보안 그룹 이름:** **tutorial-securitygroup**
   + **설명:** **Tutorial Security Group**
   + **VPC:** 이전에 생성한 VPC를 선택합니다(예: **vpc*-identifier*(tutorial-vpc))**.

1. 인바운드 규칙을 보안 그룹에 추가합니다.

   1. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 지정합니다. 퍼블릭 IP 주소를 확인하려면 다른 브라우저 창 또는 탭에서 [https://checkip.amazonaws.com](https://checkip.amazonaws.com)의 서비스를 사용합니다. IP 주소의 예는 `203.0.113.25/32`입니다.

      대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 찾습니다.
**주의**  
SSH 액세스에 `0.0.0.0/0`을 사용하는 경우 모든 IP 주소가 SSH를 사용하여 퍼블릭 인스턴스에 액세스할 수 있도록 활성화합니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 SSH를 사용하여 인스턴스에 액세스할 수 있는 특정 IP 주소 또는 주소 범위만 인증합니다.

   1. **인바운드 규칙** 섹션에서 **규칙 추가**를 선택합니다.

   1. 새로운 인바운드 규칙으로 다음 값을 설정하여 SSH에서 Amazon EC2 인스턴스에 액세스하도록 허용합니다. 이렇게 하면 Amazon EC2 인스턴스에 연결하여 웹 서버 및 다른 유틸리티를 설치할 수 있습니다. 또한 EC2 인스턴스에 연결하여 웹 서버의 콘텐츠를 업로드할 수도 있습니다.
      + **Type:** **SSH**
      + **소스:** a단계의 IP 주소 또는 범위(예: **203.0.113.25/32**)

   1. [**Add another rule**]을 선택합니다.

   1. 새 인바운드 규칙에 다음 값을 설정하여 웹 서버에 대한 HTTP 액세스를 허용합니다.
      + **유형:** **HTTP**
      + **소스:** **0.0.0.0/0**

1. 보안 그룹을 생성하려면 **보안 그룹 생성(Create security group)**을 선택합니다.

   이 자습서에서 나중에 필요하므로 보안 그룹 ID를 적어 둡니다.

## 프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성
<a name="CHAP_Tutorials.WebServerDB.CreateVPC.SecurityGroupDB"></a>

DB 인스턴스를 프라이빗으로 유지하려면 프라이빗 액세스를 위한 보조 보안 그룹을 생성합니다. VPC의 프라이빗 DB 인스턴스에 연결하려면 웹 서버로부터의 트래픽만 허용하는 인바운드 규칙을 VPC 보안 그룹에 추가해야 합니다.

**VPC 보안 그룹의 생성 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. **VPC 대시보드**, **보안 그룹**, **보안 그룹 생성**을 차례대로 선택합니다.

1. **보안 그룹 생성** 페이지에서 다음 값을 설정합니다.
   + **보안 그룹 이름:** **tutorial-db-securitygroup**
   + **설명:** **Tutorial DB Instance Security Group**
   + **VPC:** 이전에 생성한 VPC를 선택합니다(예: **vpc*-identifier*(tutorial-vpc))**.

1. 인바운드 규칙을 보안 그룹에 추가합니다.

   1. **인바운드 규칙** 섹션에서 **규칙 추가**를 선택합니다.

   1. 새로운 인바운드 규칙으로 다음 값을 설정하여 Amazon EC2 인스턴스의 포트 3306에서 MySQL 트래픽을 허용합니다. 이렇게 하면 웹 서버에서 DB 인스턴스에 연결할 수 있습니다. 그러면 웹 애플리케이션의 데이터를 데이터베이스에 저장하고 검색할 수 있습니다.
      + **유형:** **MySQL/Aurora**
      + **소스:** 이 자습서에서 이전에 생성한 **tutorial-securitygroup** 보안 그룹의 식별자(예: **sg-9edd5cfb**)입니다.

1. 보안 그룹을 생성하려면 **보안 그룹 생성**을 선택합니다.

## DB 서브넷 그룹 만들기
<a name="CHAP_Tutorials.WebServerDB.CreateVPC.DBSubnetGroup"></a>

*DB 서브넷 그룹*은 사용자가 VPC에서 만든 다음 DB 인스턴스에 대해 지정하는 서브넷의 모음입니다. DB 서브넷 그룹에서 DB 인스턴스를 생성할 때 특정 VPC를 지정할 수 있습니다.

**DB 서브넷 그룹을 만들려면**

1. VPC에서 데이터베이스의 프라이빗 서브넷을 식별합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **서브넷**을 선택합니다.

   1. **tutorial-subnet-private1-us-west-2a** 및 **tutorial-subnet-private2-us-west-2b**라는 서브넷의 서브넷 ID를 기록해 둡니다.

      DB 서브넷 그룹을 생성할 때 서브넷 ID가 필요합니다.

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   Amazon VPC 콘솔이 아닌 Amazon RDS 콘솔에 연결해야 합니다.

1. 탐색 창에서 [**Subnet groups**]를 선택합니다.

1. **DB 서브넷 그룹 생성**을 선택합니다.

1. **DB 서브넷 그룹 생성** 페이지에서 **서브넷 그룹 세부 정보**에 이들 값을 설정합니다.
   + **이름:** **tutorial-db-subnet-group**
   + **설명:** **Tutorial DB Subnet Group**
   + **VPC:** **tutorial-vpc(vpc-*identifier*)** 

1. **서브넷 추가** 섹션에서 **가용 영역** 및 **서브넷**을 선택합니다.

   이 자습서에서는 **us-west-2a**와 **us-west-2b**를 **가용 영역**으로 선택합니다. **서브넷**에서 이전 단계에서 식별한 프라이빗 서브넷을 선택합니다.

1. **Create**를 선택합니다.

   새 DB 서브넷 그룹은 RDS 콘솔의 DB 서브넷 그룹 목록에 나타납니다. DB 서브넷 그룹을 선택하여 창 하단의 세부 정보 창에서 세부 정보를 볼 수 있습니다. 이러한 세부 정보에는 그룹과 연결된 모든 서브넷이 포함됩니다.

**참고**  
[자습서: 웹 서버 및 Amazon RDS DB 인스턴스 생성](TUT_WebAppWithRDS.md)을 완료하기 위해 이 VPC를 생성한 경우 [Amazon RDS DB 인스턴스 생성](CHAP_Tutorials.WebServerDB.CreateDBInstance.md) 의 지침에 따라 DB 인스턴스를 생성합니다.

## VPC 삭제
<a name="CHAP_Tutorials.WebServerDB.CreateVPC.Delete"></a>

이 자습서에 대한 VPC 및 기타 리소스를 생성한 후, 더 이상 필요하지 않은 경우 삭제할 수 있습니다.

**참고**  
이 자습서를 위해 생성한 VPC에 리소스를 추가한 경우 VPC를 삭제하기 전에 이러한 리소스를 삭제해야 할 수 있습니다. 예를 들어 이러한 리소스에는 Amazon EC2 인스턴스 또는 Amazon RDS DB 인스턴스가 포함될 수 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC의 삭제](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#VPC_Deleting)를 참조하세요.

**VPC 및 관련 리소스 삭제하기**

1. DB 서브넷 그룹을 삭제합니다.

   1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. 탐색 창에서 **서브넷 그룹**을 선택합니다.

   1. 삭제하려는 DB 서브넷 그룹을 선택합니다(예: **tutorial-db-subnet-group**).

   1. **삭제**를 선택한 다음 확인 창에서 **삭제**를 선택합니다.

1. VPC ID를 기록합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **VPC**를 선택합니다.

   1. 목록에서 생성한 VPC를 식별합니다(예:**tutorial-vpc**).

   1. 생성한 VPC의 **VPC ID**를 기록합니다. 이후 단계에서 해당 VPC ID가 필요합니다.

1. 보안 그룹을 삭제합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **보안 그룹**을 선택합니다.

   1. Amazon RDS DB 인스턴스에 대한 보안 그룹을 선택합니다(예:**tutorial-db-securitygroup**).

   1. **작업(Actions)**에서 **보안 그룹 삭제**를 선택한 다음 확인 페이지에서 **삭제(Delete)**를 선택합니다.

   1. **보안 그룹** 페이지에서 Amazon EC2 인스턴스에 대한 보안 그룹을 선택합니다(예:**tutorial-securitygroup**).

   1. **작업(Actions)**에서 **보안 그룹 삭제**를 선택한 다음 확인 페이지에서 **삭제(Delete)**를 선택합니다.

1. VPC를 삭제합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **VPC**를 선택합니다.

   1. 삭제하려는 VPC 선택합니다(예:**tutorial-vpc**).

   1. **작업**에서 **VPC 삭제**를 선택합니다.

      확인 페이지에는 VPC와 연결된 서브넷을 포함하여 삭제될 VPC와 연결된 다른 리소스가 표시됩니다.

   1. 확인 페이지에서 **delete**를 입력하고 **삭제**를 선택합니다.

# 자습서: DB 인스턴스(듀얼 스택 모드)에 사용할 VPC 생성
<a name="CHAP_Tutorials.CreateVPCDualStack"></a>

일반적인 시나리오에는 Amazon VPC 서비스를 기반으로 하는 Virtual Private Cloud(VPC)의 DB 인스턴스가 포함됩니다. 이 VPC는 동일한 VPC에서 실행 중인 퍼블릭 Amazon EC2 인스턴스와 데이터를 공유합니다.

이 자습서에서는 듀얼 스택 모드에서 실행되는 데이터베이스와 함께 작동하는 이 시나리오의 VPC를 생성합니다. IPv6 주소 지정 프로토콜을 통한 연결을 가능하게 하는 듀얼 스택 모드입니다. IP 주소에 대한 자세한 내용은 [Amazon RDS IP 주소 지정](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.IP_addressing) 단원을 참조하십시오.

이중 스택 네트워크 인스턴스 대부분의 리전에서 지원됩니다. 자세한 내용은 [리전 및 버전 사용 가능 여부](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.IP_addressing.RegionVersionAvailability)을 참조하세요. 이중 스택 모드의 제한 사항을 보려면 [듀얼 스택 네트워크 DB 인스턴스에 대한 제한 사항](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.IP_addressing.dual-stack-limitations)을 참조하세요.

다음 다이어그램은 이 시나리오를 보여 줍니다.

 

![\[듀얼 스택 모드를 위한 VPC 시나리오\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp-dual-stack.png)


다른 시나리오에 대한 자세한 내용은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md)을(를) 참조하세요.

퍼블릭 인터넷이 아닌 Amazon EC2 인스턴스에서만 DB 인스턴스를 사용할 수 있어야 합니다. 따라서 퍼블릭 서브넷과 프라이빗 서브넷을 모두 포함하여 VPC를 생성합니다. 퍼블릭 서브넷에서 Amazon EC2 인스턴스를 호스팅하므로 Amazon EC2 인스턴스에서 퍼블릭 인터넷에 액세스할 수 있습니다. DB 인스턴스는 프라이빗 서브넷에서 호스팅됩니다. Amazon EC2 인스턴스는 동일한 VPC 내에서 호스팅되므로 DB 인스턴스에 연결할 수 있습니다. 하지만 퍼블릭 인터넷에서는 DB 인스턴스를 사용할 수 없으므로 보안이 강화됩니다.

이 자습서에서는 별도의 가용 영역에서 추가 퍼블릭 및 프라이빗 서브넷을 구성합니다. 이러한 서브넷은 자습서에서 사용하지 않습니다. RDS DB 서브넷 그룹은 최소 2개의 가용 영역에 한 개 이상의 서브넷이 필요합니다. 추가 서브넷을 사용하면 향후 다중 AZ DB 인스턴스 배포로 쉽게 전환할 수 있습니다. 

듀얼 스택 모드를 사용하는 DB 인스턴스를 생성하려면 **네트워크 유형(Network type)** 설정에 **듀얼 스택 모드(Dual-stack mode)**를 지정하세요. 동일한 설정으로 DB 인스턴스를 수정할 수도 있습니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 및 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하세요.

이 자습서에서는 Amazon RDS DB 인스턴스용 VPC 구성에 대해 설명합니다. Amazon VPC에 대한 자세한 내용은 [Amazon VPC 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/)를 참조하세요.

## 프라이빗 서브넷과 퍼블릭 서브넷을 포함하는 VPC 생성
<a name="CHAP_Tutorials.CreateVPCDualStack.VPCAndSubnets"></a>

다음은 퍼블릭 서브넷과 프라이빗 서브넷을 모두 포함하는 VPC를 생성하는 절차입니다.

**VPC 및 서브넷을 생성하는 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. AWS Management Console의 오른쪽 상단에서 VPC를 생성할 리전을 선택합니다. 이 예에서는 미국 동부(오하이오) 리전을 사용합니다.

1. 왼쪽 상단 모서리에서 **VPC 대시보드**를 선택합니다. VPC 생성을 시작하려면 **VPC 생성**을 선택합니다.

1. **VPC 설정**의 **생성할 리소스**에서 **VPC 등**을 선택합니다.

1. 남은 **VPC 설정**에서는 다음 값들을 설정합니다.
   + **네임 태그 자동 생성** - **tutorial-dual-stack**
   + **IPv4 CIDR block**:**10.0.0.0/16** - 
   + **IPv6 CIDR 블록(IPv6 CIDR block)** - **Amazon 제공 IPv6 CIDR 블록(Amazon-provided IPv6 CIDR block)**
   + **테넌시** - **기본값**
   + **가용 영역(AZ)의 수 **-** **2
   + **Customize AZs**(AZ 사용자 지정) - 기본값을 유지합니다.
   + **퍼블릭 서브넷 수** – **2**
   + **프라이빗 서브넷 수** – **2**
   + **Customize subnets CIDR blocks**(서브넷 CIDR 블록 사용자 지정) - 기본값을 유지합니다.
   + **NAT 게이트웨이(\$1)** – **없음**
   + **외부 전용 인터넷 게이트웨이** - **아니요**
   + **VPC 엔드포인트** – **없음**
   + **DNS options**(DNS 옵션) - 기본값을 유지합니다.
**참고**  
Amazon RDS에서는 다중 AZ DB 인스턴스 배포를 지원하려면 서로 다른 두 가용 영역에 있는 Amazon RDS가 필요합니다. 이 자습서에서는 단일 AZ 배포를 생성하지만 요구 사항에 따라 향후 다중 AZ DB 인스턴스 배포로 쉽게 전환할 수 있습니다.

1. **VPC 생성**을 선택합니다.

## 퍼블릭 Amazon EC2 인스턴스에 대한 VPC 보안 그룹 생성
<a name="CHAP_Tutorials.CreateVPCDualStack.SecurityGroupEC2"></a>

이제 퍼블릭 액세스를 위한 보안 그룹을 생성합니다. VPC의 퍼블릭 EC2 인스턴스에 연결하려면 인터넷으로부터의 트래픽 연결을 허용하는 VPC 보안 그룹에 인바운드 규칙을 추가해야 합니다.

**VPC 보안 그룹의 생성 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. **VPC 대시보드**, **보안 그룹**, **보안 그룹 생성**을 차례대로 선택합니다.

1. **보안 그룹 생성** 페이지에서 다음 값을 설정합니다.
   + **보안 그룹 이름:** **tutorial-dual-stack-securitygroup**
   + **설명:** **Tutorial Dual-Stack Security Group**
   + **VPC:** 이전에 생성한 VPC 선택(예: **vpc-*식별자*(tutorial-dual-stack-vpc)** 

1. 인바운드 규칙을 보안 그룹에 추가합니다.

   1. Secure Shell(SSH)을 사용하여 VPC의 EC2 인스턴스에 연결하는 데 사용할 IP 주소를 지정합니다.

      IPv4(인터넷 프로토콜 버전 4) 주소의 예는 `203.0.113.25/32`입니다. IPv6(인터넷 프로토콜 버전 6) 주소 범위의 예는 `2001:db8:1234:1a00::/64`입니다.

      대부분의 경우 고정 IP 주소가 없는 방화벽 뒤나 인터넷 서비스 제공업체(ISP)를 통해 연결하는 경우가 많습니다. 그렇다면 클라이언트 컴퓨터에서 사용하는 IP 주소 범위를 찾습니다.
**주의**  
IPv4에 `0.0.0.0/0`, IPv6에 `::0`을 사용하면 SSH를 통해 모든 IP 주소가 퍼블릭 인스턴스에 액세스하도록 설정할 수 있습니다. 이 방법은 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 특정 IP 주소나 주소 범위만 인스턴스에 액세스하도록 허용하세요.

   1. **인바운드 규칙** 섹션에서 **규칙 추가**를 선택합니다.

   1. 새로운 인바운드 규칙으로 다음 값을 설정하여 SSH(Secure Shell)에서 Amazon EC2 인스턴스에 액세스하도록 허용합니다. 이렇게 하면 EC2 인스턴스에 연결하여 SQL 클라이언트 및 다른 애플리케이션을 설치할 수 있습니다. EC2 인스턴스에 액세스할 수 있도록 IP 주소를 지정합니다.
      + **유형:** **SSH**
      + **소스(Source):** a단계의 IP 주소 또는 범위입니다. IPv4 IP 주소의 예는 **203.0.113.25/32**입니다. IPv6 IP 주소의 예는 **2001:DB8::/32**입니다.

1. 보안 그룹을 생성하려면 **보안 그룹 생성(Create security group)**을 선택합니다.

   이 자습서에서 나중에 필요하므로 보안 그룹 ID를 적어 둡니다.

## 프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성
<a name="CHAP_Tutorials.CreateVPCDualStack.SecurityGroupDB"></a>

DB 인스턴스를 프라이빗으로 유지하려면 프라이빗 액세스를 위한 보조 보안 그룹을 생성합니다. VPC의 프라이빗 DB 인스턴스에 연결하려면 VPC 보안 그룹에 인바운드 규칙을 추가해야 합니다. 이 규칙은 Amazon EC2 인스턴스로부터의 트래픽만 허용합니다.

**VPC 보안 그룹의 생성 방법**

1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

1. **VPC 대시보드**, **보안 그룹**, **보안 그룹 생성**을 차례대로 선택합니다.

1. **보안 그룹 생성** 페이지에서 다음 값을 설정합니다.
   + **보안 그룹 이름:** **tutorial-dual-stack-db-securitygroup**
   + **설명:** **Tutorial Dual-Stack DB Instance Security Group**
   + **VPC:** 이전에 생성한 VPC 선택(예: **vpc-*식별자*(tutorial-dual-stack-vpc)**

1. 인바운드 규칙을 보안 그룹에 추가합니다.

   1. **인바운드 규칙** 섹션에서 **규칙 추가**를 선택합니다.

   1. 새로운 인바운드 규칙으로 다음 값을 설정하여 Amazon EC2 인스턴스의 포트 3306에서 MySQL 트래픽을 허용합니다. 이렇게 하면 EC2 인스턴스에서 DB 인스턴스에 연결할 수 있습니다. 이는 EC2 인스턴스의 데이터를 데이터베이스에 전송할 수 있음을 의미합니다.
      + **유형:** **MySQL/Aurora**
      + **소스:** 이 자습서에서 이전에 생성한 **tutorial-dual-stack-securitygroup** 보안 그룹의 식별자(예: **sg-9edd5cfb**)입니다.

1. 보안 그룹을 생성하려면 **보안 그룹 생성**을 선택합니다.

## DB 서브넷 그룹 만들기
<a name="CHAP_Tutorials.CreateVPCDualStack.DBSubnetGroup"></a>

*DB 서브넷 그룹*은 사용자가 VPC에서 만든 다음 DB 인스턴스에 대해 지정하는 서브넷의 모음입니다. DB 서브넷 그룹을 사용하면 DB 인스턴스를 생성할 때 특정 VPC를 지정할 수 있습니다. `DUAL`과 호환 가능한 DB 서브넷 그룹을 생성하려면 모든 서브넷이 `DUAL`과 호환 가능해야 합니다. `DUAL`과 호환 가능하려면 서브넷에 IPv6 CIDR이 연결되어 있어야 합니다.

**DB 서브넷 그룹을 만들려면**

1. VPC에서 데이터베이스의 프라이빗 서브넷을 식별합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **서브넷**을 선택합니다.

   1. **tutorial-dual-stack-subnet-private1-us-west-2a** 및 **tutorial-dual-stack-subnet-private2-us-west-2b** 서브넷의 서브넷 ID를 기록해 둡니다.

      DB 서브넷 그룹을 생성할 때 서브넷 ID가 필요합니다.

1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   Amazon VPC 콘솔이 아닌 Amazon RDS 콘솔에 연결해야 합니다.

1. 탐색 창에서 [**Subnet groups**]를 선택합니다.

1. **DB 서브넷 그룹 생성**을 선택합니다.

1. **DB 서브넷 그룹 생성** 페이지에서 **서브넷 그룹 세부 정보**에 이들 값을 설정합니다.
   + **이름:** **tutorial-dual-stack-db-subnet-group**
   + **설명:** **Tutorial Dual-Stack DB Subnet Group**
   + **VPC:** **tutorial-dual-stack-vpc(vpc-*identifier*)** 

1. **서브넷 추가(Add subnets)** 섹션에서 **가용 영역(Availability Zones)** 및 **서브넷(Subnets)**의 값을 선택합니다.

   이 자습서에서는 **us-east-2a**와 **us-east-2b**를 **가용 영역**으로 선택합니다. **서브넷**에서 이전 단계에서 식별한 프라이빗 서브넷을 선택합니다.

1. **Create**를 선택합니다.

새 DB 서브넷 그룹은 RDS 콘솔의 DB 서브넷 그룹 목록에 나타납니다. DB 서브넷 그룹을 선택하여 세부 정보를 확인할 수 있습니다. 여기에는 지원되는 주소 지정 프로토콜과 그룹과 연결된 모든 서브넷 및 DB 서브넷 그룹에서 지원하는 네트워크 유형이 포함됩니다.

## 듀얼 스택 모드로 Amazon EC2 인스턴스 생성
<a name="CHAP_Tutorials.CreateVPCDualStack.CreateEC2Instance"></a>

Amazon EC2 인스턴스를 생성하려면 **Amazon EC2 사용 설명서의 [새 시작 인스턴스 마법사를 사용하여 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)의 지침을 따르세요.

**인스턴스 세부 정보 구성** 페이지에서 이러한 값을 설정하고 다른 값은 기본값으로 유지합니다.
+ **네트워크** - [프라이빗 서브넷과 퍼블릭 서브넷을 포함하는 VPC 생성](#CHAP_Tutorials.CreateVPCDualStack.VPCAndSubnets)에서 생성한 **tutorial-dual-stack-vpc**(vpc-*identifier*)와 같이 퍼블릭 및 프라이빗 서브넷이 있는 기존 VPC를 선택합니다.
+ **서브넷** - [퍼블릭 Amazon EC2 인스턴스에 대한 VPC 보안 그룹 생성](#CHAP_Tutorials.CreateVPCDualStack.SecurityGroupEC2)에서 생성한 **subnet-*identifier* \$1 tutorial-dual-stack-subnet-public1-us-east-2a \$1 us-east-2a**와 같은 기존 퍼블릭 서브넷을 선택합니다.
+ **퍼블릭 IP 자동 할당** - **활성화**를 선택합니다.
+ **Auto-assign IPv6 IP** - **활성화**를 선택합니다.
+ **방화벽(보안 그룹)** - **기존 보안 그룹 선택**을 선택합니다.
+ **일반 보안 그릅** - [퍼블릭 Amazon EC2 인스턴스에 대한 VPC 보안 그룹 생성](#CHAP_Tutorials.CreateVPCDualStack.SecurityGroupEC2)에서 생성한 `tutorial-securitygroup`과 같이 기존 보안 그룹을 선택합니다. 선택한 보안 그룹에 SSH(Secure Shell) 및 HTTP 액세스에 대한 인바운드 규칙이 포함되어 있는지 확인합니다.

## 듀얼 스택 모드로 DB 인스턴스 생성
<a name="CHAP_Tutorials.CreateVPCDualStack.CreateDBInstance"></a>

이 단계에서는 듀얼 스택 모드로 실행되는 Amazon RDS DB 인스턴스를 생성합니다.

**DB 인스턴스를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성하려는 을 선택합니다. 이 예에서는 미국 동부(오하이오) 리전을 사용합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

1. [**데이터베이스 생성(Create database)**] 페이지에서 다음과 같이 [**표준 생성(Standard create)**] 옵션이 선택되어 있는지 확인하고 []을 선택합니다.

1. [**연결(Connectivity)**] 섹션에서 다음 값을 설정합니다.
   + **네트워크 유형(Network type)** – **듀얼 스택 모드(Dual-stack mode)** 선택  
![\[듀얼 스택 모드가 선택된 콘솔의 네트워크 유형 섹션\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/dual-stack-mode.png)
   + **가상 사설 클라우드(VPC)** - [프라이빗 서브넷과 퍼블릭 서브넷을 포함하는 VPC 생성](#CHAP_Tutorials.CreateVPCDualStack.VPCAndSubnets)에서 생성한 **tutorial-dual-stack-vpc**(vpc-*identifier*)와 같이 퍼블릭 및 프라이빗 서브넷이 있는 기존 VPC를 선택합니다.

     VPC는 서로 다른 가용 영역에 서브넷이 있어야 합니다.
   + **서브넷 그룹(Subnet Group)** - [DB 서브넷 그룹 만들기](#CHAP_Tutorials.CreateVPCDualStack.DBSubnetGroup)에서 생성한 **tutorial-dual-stack-db-subnet-group**과 같은 VPC용 DB 서브넷 그룹을 선택합니다.
   + **퍼블릭 액세스**— 선택**아니요**.
   + **VPC 보안 그룹 (방화벽)**— 선택**기존 항목 선택**.
   + **기존 VPC 보안 그룹(Existing VPC security groups)** – [프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성](#CHAP_Tutorials.CreateVPCDualStack.SecurityGroupDB)에서 생성한 **tutorial-dual-stack-db-securitygroup**과 같이 프라이빗 액세스에 맞게 구성된 기존 VPC 보안 그룹을 선택합니다.

     각각에 연결된 **X**를 선택해 기본 보안 그룹 같은 다른 보안 그룹을 제거합니다.
   + [Availability Zone]에서 [us-west-2a]를 선택합니다.

     AZ 간 트래픽을 피하려면 DB 인스턴스와 EC2 인스턴스가 동일한 가용 영역에 있어야 합니다.

1. 나머지 섹션에서 DB 인스턴스 설정을 지정합니다. 각 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 단원을 참조하세요.

## Amazon EC2 인스턴스 및 DB 인스턴스에 연결
<a name="CHAP_Tutorials.CreateVPCDualStack.Connect"></a>

Amazon EC2 인스턴스와 DB 인스턴스가 듀얼 스택 모드로 생성된 후에는 IPv6 프로토콜을 사용하여 각 인스턴스에 연결할 수 있습니다. IPv6 프로토콜을 사용하여 Amazon EC2 인스턴스에 연결하려면 **Amazon EC2 사용 설명서의 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)에 있는 지침을 따르세요.

Amazon EC2 인스턴스에서 RDS for MySQL DB 인스턴스에 연결하려면 [MySQL DB 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.MySQL.md#CHAP_GettingStarted.Connecting.MySQL)의 지침을 따르세요.

## VPC 삭제
<a name="CHAP_Tutorials.CreateVPCDualStack.Delete"></a>

이 자습서에 대한 VPC 및 기타 리소스를 생성한 후, 더 이상 필요하지 않은 경우 삭제할 수 있습니다.

이 자습서를 위해 생성한 VPC에 리소스를 추가한 경우 VPC를 삭제하기 전에 이러한 리소스를 삭제해야 할 수 있습니다. 리소스의 예로는 Amazon EC2 인스턴스 또는 DB 인스턴스가 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC의 삭제](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#VPC_Deleting)를 참조하세요.

**VPC 및 관련 리소스 삭제하기**

1. DB 서브넷 그룹을 삭제합니다.

   1. [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

   1. 탐색 창에서 **서브넷 그룹**을 선택합니다.

   1. 삭제할 DB 서브넷 그룹을 선택합니다(예: **tutorial-db-subnet-group**).

   1. **삭제**를 선택한 다음 확인 창에서 **삭제**를 선택합니다.

1. VPC ID를 기록합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **VPC**를 선택합니다.

   1. 목록에서 생성한 VPC를 식별합니다(예:**tutorial-dual-stack-vpc**).

   1. 생성한 VPC의 **VPC ID**를 기록합니다. 이후 단계에서 해당 VPC ID가 필요합니다.

1. 보안 그룹을 삭제합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **보안 그룹**을 선택합니다.

   1. Amazon RDS DB 인스턴스에 대한 보안 그룹을 선택합니다(예:**utorial-dual-stack-db-securitygroup**).

   1. **작업(Actions)**에서 **보안 그룹 삭제(Delete security groups)**를 선택한 다음 확인 페이지에서 **삭제(Delete)**를 선택합니다.

   1. **보안 그룹(Security Groups)** 페이지에서 Amazon EC2 인스턴스에 대한 보안 그룹을 선택합니다(예:**tutorial-dual-stack-securitygroup**).

   1. **작업(Actions)**에서 **보안 그룹 삭제(Delete security groups)**를 선택한 다음 확인 페이지에서 **삭제(Delete)**를 선택합니다.

1. NAT 게이트웨이를 삭제합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **NAT 게이트웨이**를 선택합니다.

   1. 생성한 VPC의 NAT 게이트웨이를 선택합니다. VPC ID를 사용하여 올바른 NAT 게이트웨이를 식별합니다.

   1. **작업**에서 **NAT 게이트웨이 삭제(Delete NAT gateway)**를 선택합니다.

   1. 확인 페이지에서 **delete**를 입력하고 **삭제**를 선택합니다.

1. VPC를 삭제합니다.

   1. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다.

   1. **VPC 대시보드**를 선택한 다음 **VPC**를 선택합니다.

   1. 삭제하려는 VPC를 선택합니다(예:**tutorial-dual-stack-vpc**).

   1. **작업**에서 **VPC 삭제**를 선택합니다.

      확인 페이지에는 VPC와 연결된 서브넷을 포함하여 삭제될 VPC와 연결된 다른 리소스가 표시됩니다.

   1. 확인 페이지에서 **delete**를 입력하고 **삭제**를 선택합니다.

1. 탄력적 IP 주소를 릴리스합니다.

   1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

   1. **EC2 대시보드**를 선택한 다음 **탄력적 IP 주소**를 선택합니다.

   1. 릴리스하려는 탄력적 IP 주소를 선택합니다.

   1. **작업(Actions)**에서 **탄력적 IP 주소 릴리스(Release Elastic IP addresses)**를 선택합니다.

   1. 확인 페이지에서 **릴리스**를 선택합니다.

# VPC에 있지 않은 DB 인스턴스를 VPC로 이동
<a name="USER_VPC.Non-VPC2VPC"></a>

EC2-Classic 플랫폼 상의 일부 레거시 DB 인스턴스는 VPC에서 실행되지 않습니다. DB 인스턴스가 VPC 내에 있지 않을 경우 AWS Management Console을 사용하여 DB 인스턴스를 VPC 내로 손쉽게 이동할 수 있습니다. VPC에 있지 않은 DB 인스턴스를 VPC 내로 이동하려면 먼저 VPC를 만들어야 합니다.


|  | 
| --- |
| EC2-Classic은 2022년 8월 15일에 사용 중지되었습니다. EC2-Classic에서 VPC로 마이그레이션하지 않은 경우 가능한 한 빨리 마이그레이션하는 것이 좋습니다. 자세한 내용은 Amazon EC2 사용 설명서의 [EC2-Classic에서 VPC로 마이그레이션](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) 및 블로그 [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)를 참조하세요. | 

**중요**  
신규 Amazon RDS 고객이거나, 전에는 DB 인스턴스를 생성한 적이 전혀 없거나, 전에 사용한 적 없는 AWS 리전에서 DB 인스턴스를 생성하는 경우, 거의 모든 경우에 *EC2-VPC* 플랫폼에 있고 기본 VPC가 생성됩니다. VPC의 DB 인스턴스 작업에 대한 자세한 내용은 [VPC에서 DB 인스턴스를 사용한 작업](USER_VPC.WorkingWithRDSInstanceinaVPC.md)을(를) 참조하세요.

다음 단계에 따라 DB 인스턴스에 대한 VPC를 만듭니다.
+ [1단계: VPC 생성](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.CreatingVPC)
+  [2단계: DB 서브넷 그룹 만들기](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.CreateDBSubnetGroup)
+  [3단계: VPC 보안 그룹 만들기](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.CreateVPCSecurityGroup)

VPC를 만든 후 다음 단계에 따라 DB 인스턴스를 VPC 내로 이동합니다.
+ [DB 인스턴스에 대한 VPC 업데이트](USER_VPC.VPC2VPC.md)

마이그레이션 직전에 DB 인스턴스의 백업을 생성하는 것이 좋습니다. 이렇게 하면 마이그레이션이 실패할 경우 데이터를 복원할 수 있습니다. 자세한 내용은 [데이터 백업, 복원 및 내보내기](CHAP_CommonTasks.BackupRestore.md) 섹션을 참조하세요.

다음은 DB 인스턴스를 VPC로 이동하는 데 따른 몇 가지 제한 사항입니다.
+ **이전 세대 DB 인스턴스 클래스** – 이전 세대 DB 인스턴스 클래스는 VPC 플랫폼에서 지원되지 않을 수 있습니다. DB 인스턴스를 VPC로 이동할 때 db.m3 또는 db.r3 DB 인스턴스 클래스를 선택합니다. DB 인스턴스를 VPC로 이동한 후 이후 DB 인스턴스 클래스를 사용하도록 DB 인스턴스를 확장할 수 있습니다. VPC 지원 인스턴스 클래스의 전체 목록은 [Amazon RDS 인스턴스 유형](https://aws.amazon.com/rds/instance-types/)을 참조하세요.
+ **다중 AZ** – VPC에 있지 않은 다중 AZ DB 인스턴스를 VPC로 이동하는 것은 현재 지원되지 않습니다. DB 인스턴스를 VPC로 이동하려면 단일 AZ 배포가 되도록 먼저 DB 인스턴스를 수정합니다. **다중 AZ 배포** 설정을 [**아니오(No)**]로 변경합니다. DB 인스턴스를 VPC로 이동한 후 이를 다시 수정하여 다중 AZ 배포로 만듭니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+ **읽기 전용 복제본** – VPC에 있지 않은 읽기 전용 복제본을 포함한 DB 인스턴스를 VPC로 이동하는 것은 현재 지원되지 않습니다. DB 인스턴스를 VPC로 이동하려면 먼저 읽기 전용 복제본을 모두 삭제합니다. DB 인스턴스를 VPC로 이동한 후 읽기 전용 복제본을 다시 생성합니다. 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 섹션을 참조하세요.
+ **옵션 그룹** – DB 인스턴스를 VPC로 이동하고 DB 인스턴스에서 사용자 지정 옵션 그룹을 사용하는 경우 DB 인스턴스와 연결된 옵션 그룹을 변경합니다. 옵션 그룹은 플랫폼마다 특정하며, VPC로 이동하는 것은 플랫폼의 변경에 해당합니다. 이런 경우에서 사용자 지정 옵션 그룹을 사용하려면 기본 VPC 옵션 그룹을 DB 인스턴스에 할당하거나, 이동하려는 대상 VPC에 있는 다른 DB 인스턴스에서 사용되는 옵션 그룹을 할당하거나, 새 옵션 그룹을 만들어 DB 인스턴스에 할당합니다. 자세한 내용은 [옵션 그룹 작업](USER_WorkingWithOptionGroups.md) 섹션을 참조하세요.

## 가동 중지를 최소화하면서 VPC에 없는 DB 인스턴스를 VPC로 이동하는 방법
<a name="USER_VPC.Non-VPC2VPC.Minimal-Downtime"></a>

다음 방법을 사용하여 가동 중지를 최소화하면서 VPC에 없는 DB 인스턴스를 VPC로 이동할 수 있습니다. 이러한 방법은 원본 DB 인스턴스의 중단을 최소화하고 마이그레이션 중에 사용자 트래픽을 처리하도록 허용합니다. 그러나 VPC로 마이그레이션하는 데 필요한 시간은 데이터베이스 크기 및 라이브 워크로드 특성에 따라 달라집니다.
+ **AWS Database Migration Service(AWS DMS)** - AWS DMS를 사용하면 소스 DB 인스턴스가 완전히 작동하는 동안 데이터의 라이브 마이그레이션을 수행할 수 있지만 제한된 DDL 문 세트만 복제합니다. AWS DMS는 인덱스, 사용자, 권한, 저장 프로시저, 테이블 데이터와 직접 관련되지 않은 기타 데이터베이스 변경 사항과 같은 항목을 전파하지 않습니다. 또한 AWS DMS에서는 초기 DB 인스턴스 생성에 RDS 스냅샷을 자동으로 사용하지 않으므로 마이그레이션 시간이 늘어날 수 있습니다. 자세한 내용은 [AWS Database Migration Service](https://aws.amazon.com/dms/)을 참조하세요.
+ **DB 스냅샷 복원 또는 특정 시점 복구** – DB 인스턴스의 스냅샷을 복원하거나 DB 인스턴스를 특정 시점으로 복원하여 DB 인스턴스를 VPC로 이동할 수 있습니다. 자세한 내용은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 및 [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md) 단원을 참조하세요.