

# Amazon RDS for PostgreSQL과 함께 Kerberos 인증 사용
<a name="postgresql-kerberos"></a>

사용자가 PostgreSQL이 실행되는 DB 인스턴스에 연결할 때 Kerberos를 사용하여 사용자를 인증할 수 있습니다. 이를 위해서는 Kerberos 인증을 위한 AWS Directory Service for Microsoft Active Directory를 사용하도록 인스턴스를 구성해야 합니다. AWS Directory Service for Microsoft Active Directory는 AWS Managed Microsoft AD라고도 불립니다. Directory Service에서 사용할 수 있는 기능입니다. 자세한 내용은 *AWS Directory Service 관리 가이드*의 [Directory Service란 무엇입니까?](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)를 참조하세요.

시작하려면 사용자 자격 증명을 저장할 AWS Managed Microsoft AD 디렉터리를 만듭니다. 그런 다음 PostgreSQL DB 인스턴스에 Active Directory의 도메인 및 기타 정보를 제공합니다. PostgreSQL DB 인스턴스에 대해 사용자가 인증될 때 AWS Managed Microsoft AD 디렉터리에 인증 요청이 전달됩니다.

모든 자격 증명을 동일한 디렉터리에 보관하면 시간과 노력을 절약할 수 있습니다. 여러 DB 인스턴스에 대한 자격 증명을 보관하고 관리할 수 있는 중앙 집중식 공간이 있습니다. 디렉터리를 사용하면 전체 보안 프로필을 향상할 수도 있습니다.

자체 온프레미스 Microsoft Active Directory에서 자격 증명에 액세스할 수도 있습니다. 이렇게 하려면 AWS Managed Microsoft AD 디렉터리가 온프레미스 Microsoft Active Directory를 신뢰하도록 신뢰 도메인 관계를 만듭니다. 그러면 사용자가 온프레미스 네트워크에서 워크로드에 액세스할 때와 동일한 Windows SSO(Single Sign-On) 환경을 사용하여 PostgreSQL 인스턴스에 액세스할 수 있습니다.

데이터베이스는 Kerberos 또는 AWS Identity and Access Management(IAM) 인증을 통한 암호 인증을 사용할 수 있습니다. IAM 인증에 관한 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 섹션을 참조하십시오.

**참고**  
RDS for PostgreSQL은 Active Directory 그룹에 대한 Kerberos 인증을 지원하지 않습니다.

**Topics**
+ [리전 및 버전 사용 가능 여부](#postgresql-kerberos.RegionVersionAvailability)
+ [PostgreSQL DB 인스턴스에 대한 Kerberos 인증 개요](#postgresql-kerberos-overview)
+ [PostgreSQL DB 인스턴스에 대해 Kerberos 인증 설정](postgresql-kerberos-setting-up.md)
+ [Active Directory 도메인에서 RDS for PostgreSQL DB 인스턴스 관리](postgresql-kerberos-managing.md)
+ [Kerberos 인증을 사용하여 PostgreSQL 연결](postgresql-kerberos-connecting.md)

## 리전 및 버전 사용 가능 여부
<a name="postgresql-kerberos.RegionVersionAvailability"></a>

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

## PostgreSQL DB 인스턴스에 대한 Kerberos 인증 개요
<a name="postgresql-kerberos-overview"></a>

PostgreSQL DB 인스턴스에 대해 Kerberos 인증을 설정하려면 다음 단계(나중에 자세히 설명함)를 수행하십시오.

1. AWS Managed Microsoft AD를 사용하여 AWS Managed Microsoft AD 디렉터리를 생성합니다. AWS Management Console, AWS CLI 또는 Directory Service API를 사용하여 디렉터리를 생성할 수 있습니다. 디렉터리가 인스턴스와 통신할 수 있도록 디렉터리 보안 그룹에서 관련 아웃바운드 포트를 열어야 합니다.

1. AWS Managed Microsoft AD 디렉터리에 호출할 수 있는 Amazon RDS 액세스를 제공하는 역할을 생성합니다. 이를 위해 관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 AWS Identity and Access Management(IAM) 역할을 생성합니다.

   IAM 역할이 액세스를 허용하게 하려면 올바른 AWS Security Token Service 리전에서 AWS STS 계정의 AWS(AWS) 엔드포인트를 활성화해야 합니다. AWS STS 엔드포인트는 기본적으로 모든 AWS 리전에서 활성화되어 있으므로 추가 작업 없이 사용할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS STS 리전에서 AWS 활성화 및 비활성화](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate)를 참조하세요.

1. Microsoft Active Directory 도구를 사용하여 AWS Managed Microsoft AD 디렉터리에서 사용자를 만들고 구성합니다. Active Directory에서 사용자를 생성하는 방법에 대한 자세한 내용은 *AWS 관리 안내서*의 [Directory Service 관리형 Microsoft AD에서 사용자 및 그룹 관리](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)를 참조하세요.

1. 디렉터리와 DB 인스턴스를 다른 AWS 계정 또는 Virtual Private Cloud(VPC)에 배치하려면 VPC 피어링을 구성합니다. 자세한 내용은 *Amazon VPC Peering Guide*의 [VPC 피어링이란?](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)을 참조하십시오.

1. 콘솔, CLI 또는 RDS API에서 다음 메서드 중 하나를 사용하여 PostgreSQL DB 인스턴스를 생성하거나 수정합니다.
   + [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 
   + [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 
   + [DB 인스턴스 복원](USER_RestoreFromSnapshot.md)
   + [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md)

   디렉터리와 동일한 Amazon Virtual Private Cloud(VPC) 또는 다른 AWS 계정이나 VPC에 인스턴스를 배치할 수 있습니다. PostgreSQL DB 인스턴스를 생성하거나 수정할 때는 다음을 수행합니다.
   + 디렉터리를 만들 때 생성된 도메인 식별자(`d-*` 식별자)를 제공합니다.
   + 생성한 IAM 역할의 이름을 제공합니다.
   + DB 인스턴스의 보안 그룹이 디렉터리의 보안 그룹에서 인바운드 트래픽을 수신할 수 있는지 확인합니다.

1. RDS 마스터 사용자 자격 증명을 사용하여 PostgreSQL DB 인스턴스에 연결합니다. 외부에서 식별할 사용자를 PostgreSQL에서 생성합니다. 외부에서 식별되는 사용자는 Kerberos 인증을 사용하여 PostgreSQL DB 인스턴스에 로그인할 수 있습니다.

# PostgreSQL DB 인스턴스에 대해 Kerberos 인증 설정
<a name="postgresql-kerberos-setting-up"></a>

AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)를 사용하여 PostgreSQL DB 인스턴스에 대해 Kerberos 인증을 설정합니다. Kerberos 인증을 설정하려면 다음 단계를 수행하십시오.

**Topics**
+ [1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 생성](#postgresql-kerberos-setting-up.create-directory)
+ [2단계: (선택 사항) 온프레미스 Active Directory와 Directory Service 간에 신뢰 관계 생성](#postgresql-kerberos-setting-up.create-trust)
+ [3단계: Amazon RDS가 Directory Service에 액세스할 수 있는 IAM 역할 생성](#postgresql-kerberos-setting-up.CreateIAMRole)
+ [4단계: 사용자 생성 및 구성](#postgresql-kerberos-setting-up.create-users)
+ [5단계: 디렉터리와 DB 인스턴스 사이에 VPC 간 트래픽 활성화](#postgresql-kerberos-setting-up.vpc-peering)
+ [6단계: PostgreSQL DB 인스턴스 생성 또는 수정](#postgresql-kerberos-setting-up.create-modify)
+ [7단계: Kerberos 보안 주체를 위한 PostgreSQL 사용자 생성](#postgresql-kerberos-setting-up.create-logins)
+ [8단계: PostgreSQL 클라이언트 구성](#postgresql-kerberos-setting-up.configure-client)

## 1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 생성
<a name="postgresql-kerberos-setting-up.create-directory"></a>

Directory Service는 AWS 클라우드에서 완전 관리형 Microsoft Active Directory를 생성합니다. AWS Managed Microsoft AD 디렉터리를 생성할 때 Directory Service에서 두 개의 도메인 컨트롤러와 DNS 서버가 자동으로 생성됩니다. 디렉터리 서버는 VPC 내 다른 서브넷에서 생성됩니다. 이러한 중복으로 인해 장애가 발생해도 디렉터리에 액세스할 수 있습니다.

 AWS Managed Microsoft AD 디렉터리를 생성할 때 AWS Directory Service에서 다음 작업을 자동으로 수행합니다.
+ VPC 내에서 Active Directory를 설정합니다.
+ 사용자 이름 `Admin` 과 지정된 암호를 사용하여 디렉터리 관리자 계정을 생성합니다. 이 계정을 사용하여 디렉터리를 관리할 수 있습니다.
**중요**  
반드시 이 암호를 저장해야 합니다. Directory Service에서는 이 암호를 저장하지 않으므로 암호를 검색하거나 다시 설정할 수 없습니다.
+ 디렉터리 컨트롤러에 대한 보안 그룹을 만듭니다. 보안 그룹이 PostgreSQL DB 인스턴스와의 통신을 허용해야 합니다.

AWS Directory Service for Microsoft Active Directory를 시작하면 AWS가 모든 디렉터리의 객체를 포함하는 OU(조직 단위)를 생성합니다. 디렉터리를 만들 때 입력한 NetBIOS 이름이 있는 이 OU는 도메인 루트에 있습니다. 도메인 루트는 AWS에서 소유하고 관리합니다.

 `Admin` 디렉터리를 사용하여 생성한 AWS Managed Microsoft AD 계정은 OU의 가장 일반적인 관리 활동에 대한 권한이 있습니다.
+ 사용자 생성, 업데이트 또는 삭제
+ 도메인(예: 파일 또는 인쇄 서버)에 리소스를 추가한 다음 OU 내의 사용자에 해당 리소스에 대한 권한 할당 
+ 추가 OU 및 컨테이너 생성 
+ 권한 위임 
+ Active Directory 휴지통에서 삭제된 객체 복원 
+ Active Directory 웹 서비스에서 Active Directory 및 Windows PowerShell에 대한 DNS(Domain Name Service) 모듈 실행 

또한 `Admin` 계정은 다음 도메인 차원 활동을 수행할 권한이 있습니다.
+ DNS 구성 관리(레코드, 영역 및 전달자 추가, 제거 또는 업데이트) 
+ DNS 이벤트 로그 보기 
+ 보안 이벤트 로그 보기 

**AWS Managed Microsoft AD으로 디렉터리를 생성하려면**

1.  [Directory Service 콘솔](https://console.aws.amazon.com/directoryservicev2/) 탐색 창에서 **디렉터리**를 선택한 후 **디렉터리 설정**을 선택합니다.

1. **AWS Managed Microsoft AD**를 선택합니다. AWS Managed Microsoft AD는 현재 Amazon RDS에서 사용하도록 지원되는 유일한 옵션입니다.

1. [**Next**]를 선택합니다.

1. **디렉터리 정보 입력** 페이지에서 다음 정보를 제공합니다.  
**Edition**  
 요구 사항에 맞는 에디션을 선택합니다.  
**디렉터리 DNS 이름**  
 디렉터리를 위한 정규화된 이름(예: **corp.example.com**)입니다.  
**디렉터리 NetBIOS 이름**  
 디렉터리의 선택적 짧은 이름(예: `CORP`)입니다.  
**디렉터리 설명**  
 디렉터리에 대한 선택적 설명을 입력합니다.  
**관리자 암호**  
 디렉터리 관리자의 암호입니다. 디렉터리 생성 프로세스에서는 사용자 이름 `Admin`와 이 암호를 사용하여 관리자 계정을 생성합니다.  
 디렉터리 관리자 암호는 "admin"이라는 단어를 포함할 수 없습니다. 암호는 대소문자를 구분하며 길이가 8\$164자 사이여야 합니다. 또한 다음 네 범주 중 세 개에 해당하는 문자를 1자 이상 포함해야 합니다.  
   +  소문자(a–z) 
   +  대문자(A–Z) 
   +  숫자(0–9) 
   +  영숫자 외의 특수 문자(\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**[Confirm Password]**  
 관리자 암호를 다시 입력합니다.  
반드시 이 암호를 저장해야 합니다. Directory Service에서는 이 암호를 저장하지 않으며 암호를 검색하거나 재설정할 수 없습니다.

1. **Next**(다음)를 선택합니다.

1. **Choose VPC and subnets(VPC 및 서브넷 선택)** 페이지에 다음 정보를 입력합니다.  
**VPC**  
디렉터리에 대한 VPC를 선택합니다. PostgreSQL DB 인스턴스는 이와 동일한 VPC 또는 다른 VPC에서 생성할 수 있습니다.  
**서브넷**  
 디렉터리 서버에 대한 서브넷을 선택합니다. 두 서브넷이 서로 다른 가용 영역에 있어야 합니다.

1. **Next**(다음)를 선택합니다.

1.  디렉터리 정보를 검토합니다. 변경이 필요하면 **이전**을 선택하여 변경합니다. 정보가 올바르면 **Create directory(디렉터리 생성)**을 선택합니다.  
![\[디렉터리 세부 정보 페이지\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

 디렉터리를 생성하는 데 몇 분 정도 걸립니다. 디렉터리가 성공적으로 생성되면 **상태** 값이 **활성**으로 변경됩니다.

 디렉터리에 대한 정보를 보려면 디렉터리 목록에서 해당 디렉터리 ID를 선택합니다. **디렉터리 ID** 값을 적어 두십시오. PostgreSQL DB 인스턴스를 생성하거나 수정할 때 이 값이 필요합니다.

![\[세부 정보 페이지 이미지\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


## 2단계: (선택 사항) 온프레미스 Active Directory와 Directory Service 간에 신뢰 관계 생성
<a name="postgresql-kerberos-setting-up.create-trust"></a>

자체 온프레미스 Microsoft Active Directory를 사용하지 않으려는 경우 [3단계: Amazon RDS가 Directory Service에 액세스할 수 있는 IAM 역할 생성](#postgresql-kerberos-setting-up.CreateIAMRole)로 건너뜁니다.

온프레미스 Active Directory를 사용하여 Kerberos 인증을 받으려면 온프레미스 Microsoft Active Directory와 AWS Managed Microsoft AD에서 만든 [1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 생성](#postgresql-kerberos-setting-up.create-directory) 디렉터리 간에 forest trust를 사용하여 신뢰 도메인 관계를 생성해야 합니다. 신뢰는 AWS Managed Microsoft AD 디렉터리가 온프레미스 Microsoft Active Directory를 신뢰하는 단방향일 수도 있고, 두 Active Directory가 서로를 신뢰하는 양방향일 수도 있습니다. Directory Service를 사용하여 신뢰를 설정하는 방법에 대한 자세한 내용은 *AWS Directory Service 관리 안내서*의 [신뢰 관계를 생성해야 하는 경우](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)를 참조하세요.

**참고**  
온프레미스 Microsoft Active Directory를 사용하는 경우 Windows 클라이언트에서 rds.amazonaws.com 대신 엔드포인트에 있는 Directory Service의 도메인 이름을 사용하여 연결합니다. 자세한 내용은 [Kerberos 인증을 사용하여 PostgreSQL 연결](postgresql-kerberos-connecting.md)를 참조하세요.

온프레미스 Microsoft Active Directory 도메인 이름에 새로 만든 신뢰 관계에 해당하는 DNS 접미사 라우팅이 포함되어 있는지 확인합니다. 다음 스크린샷은 예를 보여줍니다.

![\[DNS 라우팅이 생성된 신뢰에 대응\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/kerberos-auth-trust.png)


## 3단계: Amazon RDS가 Directory Service에 액세스할 수 있는 IAM 역할 생성
<a name="postgresql-kerberos-setting-up.CreateIAMRole"></a>

Directory Service를 호출하는 Amazon RDS의 경우 AWS 계정에 관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 IAM 역할이 필요합니다. 이 역할을 사용하여 Amazon RDS에서 Directory Service를 호출할 수 있습니다. 

AWS Management Console을 사용하여 DB 인스턴스를 생성할 때 콘솔 사용자에게 `iam:CreateRole` 권한이 있으면 콘솔에서 필요한 IAM 역할을 자동으로 생성합니다. 이 경우 역할 이름은 `rds-directoryservice-kerberos-access-role`입니다. 그렇지 않으면 IAM 역할을 수동으로 생성해야 합니다. 이 IAM 역할을 생성할 때 `Directory Service`를 선택하고 여기에 AWS 관리형 정책인 `AmazonRDSDirectoryServiceAccess`를 연결합니다.

서비스에 대한 IAM 역할 생성에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**참고**  
RDS for Microsoft SQL Server에 대한 Windows 인증에 사용되는 IAM 역할은 Amazon RDS for PostgreSQL에 사용할 수 없습니다.

`AmazonRDSDirectoryServiceAccess` 관리형 정책인을 사용하는 대신 필요한 권한이 포함된 정책을 생성할 수 있습니다. 이 경우 IAM 역할에 다음과 같은 IAM 신뢰 정책이 있어야 합니다.

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

****  

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

------

또한 역할에는 다음과 같은 IAM 역할 정책도 있어야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ds:DescribeDirectories",
        "ds:AuthorizeApplication",
        "ds:UnauthorizeApplication",
        "ds:GetAuthorizedApplicationDetails"
      ],
    "Effect": "Allow",
    "Resource": "*"
    }
  ]
}
```

------

옵트인 AWS 리전의 경우 IAM 역할 신뢰 정책에서 리전별 서비스 위탁자를 사용합니다. 이러한 리전의 서비스에 대한 신뢰 정책을 만들 때 서비스 위탁자에 리전 코드를 지정합니다.

다음 예는 리전별 서비스 위탁자가 포함된 신뢰 정책을 보여 줍니다.

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

****  

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

------

REGION-CODE를 사용자의 특정 리전 코드로 바꾸세요. 예를 들어 아시아 태평양(멜버른) 리전에는 다음 서비스 위탁자를 사용합니다.

```
"Service": [
  "directoryservice.rds.ap-southeast-4.amazonaws.com",
  "rds.ap-southeast-4.amazonaws.com"
]
```

## 4단계: 사용자 생성 및 구성
<a name="postgresql-kerberos-setting-up.create-users"></a>

 Active Directory Users and Computers 도구를 사용하여 사용자를 생성할 수 있습니다. 이 도구는 Active Directory 도메인 서비스 및 Active Directory Lightweight Directory Services 도구 중 하나입니다. 자세한 내용은 Microsoft 설명서의 [Active Directory 도메인에 사용자 및 컴퓨터 추가](https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/create-an-active-directory-server#add-users-and-computers-to-the-active-directory-domain)를 참조하세요. 이 경우 사용자는 도메인에 속하며 디렉터리에서 ID가 유지되는 개인 또는 기타 엔터티(예: 사용자의 컴퓨터)입니다.

Directory Service 디렉터리에서 사용자를 생성하려면 Directory Service 디렉터리의 멤버인 Windows 기반 Amazon EC2 인스턴스에 연결되어 있어야 합니다. 이와 동시에 사용자를 생성할 권한이 있는 사용자로 로그인한 상태이어야 합니다. 자세한 내용은 *AWS Directory Service관리 안내서*의 [사용자 생성](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups_create_user.html)을 참조하십시오.

## 5단계: 디렉터리와 DB 인스턴스 사이에 VPC 간 트래픽 활성화
<a name="postgresql-kerberos-setting-up.vpc-peering"></a>

디렉터리와 DB 인스턴스를 동일한 VPC에 배치하려면 이 단계를 건너뛰고 [6단계: PostgreSQL DB 인스턴스 생성 또는 수정](#postgresql-kerberos-setting-up.create-modify) 단원으로 이동하십시오.

디렉터리와 DB 인스턴스를 서로 다른 VPC에 배치하려면 VPC 피어링 또는 [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)를 사용하여 VPC 간 트래픽을 구성하세요.

다음 절차는 VPC 피어링을 사용하여 VPC 간 트래픽을 활성화합니다. *Amazon Virtual Private Cloud 피어링 안내서*의 [VPC 피어링이란?](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html) 지침을 따르십시오.

**VPC 피어링을 사용하여 VPC 간 트래픽을 활성화하려면**

1. 네트워크 트래픽이 양방향으로 흐를 수 있도록 적절한 VPC 라우팅 규칙을 설정합니다.

1. DB 인스턴스의 보안 그룹이 디렉터리의 보안 그룹에서 인바운드 트래픽을 수신할 수 있는지 확인합니다.

1. 트래픽을 차단하는 네트워크 ACL(액세스 제어 목록) 규칙이 없어야 합니다.

다른 AWS 계정이 디렉터리를 소유하는 경우 디렉터리를 공유해야 합니다.

**AWS 계정 간에 디렉터리를 공유하려면**

1. *AWS 관리 안내서*의 [자습서: 원활한 EC2 도메인 조인을 위해 AWS Managed Microsoft AD 디렉터리 공유](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)에 있는 지침에 따라 DB 인스턴스가 생성될 Directory Service 계정과 디렉터리를 공유하는 작업을 시작합니다.

1. DB 인스턴스용 계정을 사용하여 Directory Service 콘솔에 로그인하고 계속하기 전에 도메인이 `SHARED` 상태가 되었는지 확인합니다.

1. DB 인스턴스용 계정을 사용하여 Directory Service 콘솔에 로그인하는 동안 **디렉터리 ID** 값을 기록해 둡니다. 이 디렉터리 ID를 사용하여 DB 인스턴스를 도메인에 조인합니다.

## 6단계: PostgreSQL DB 인스턴스 생성 또는 수정
<a name="postgresql-kerberos-setting-up.create-modify"></a>

디렉터리에서 사용할 PostgreSQL DB 인스턴스를 생성하거나 수정합니다. 콘솔, CLI 또는 RDS API를 사용하여 DB 인스턴스를 디렉터리에 연결할 수 있습니다. 이 작업을 다음 중 한 가지 방법으로 수행할 수 있습니다.
+  콘솔, [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 명령 또는 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 작업을 사용하여 새 PostgreSQL DB 인스턴스를 생성합니다. 지침은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+  콘솔, [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령 또는 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 작업을 사용하여 기존 PostgreSQL DB 인스턴스를 수정합니다. 지침은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+  콘솔, [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 명령 또는 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 작업을 사용하여 DB 스냅샷에서 PostgreSQL DB 인스턴스를 복원합니다. 지침은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.
+  콘솔, [restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 명령 또는 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 작업을 사용하여 PostgreSQL DB 인스턴스를 특정 시점으로 복원합니다. 지침은 [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md) 섹션을 참조하세요.

Kerberos 인증은 VPC의 PostgreSQL DB 인스턴스에 대해서만 지원됩니다. DB 인스턴스는 디렉터리와 동일한 VPC 또는 다른 VPC에 있을 수 있습니다. DB 인스턴스가 디렉터리와 통신할 수 있도록 DB 인스턴스는 디렉터리의 VPC 내 수신 및 송신을 허용하는 보안 그룹을 사용해야 합니다.

### 콘솔
<a name="postgresql-kerberos-setting-up.create-modify.Console"></a>

콘솔을 사용하여 DB 인스턴스를 생성, 수정 또는 복원하는 경우 [**데이터베이스 인증(Database authentication)**] 섹션에서 [**암호 및 Kerberos 인증(Password and Kerberos authentication)**]을 선택합니다. 그런 다음 [**디렉터리 찾아보기(Browse Directory)**]를 선택합니다. 디렉터리를 선택하거나 [**새 디렉토리 생성(Create a new directory)**]을 클릭하여 Directory Service를 사용합니다.

![\[인증을 위해 Kerberos 선택 및 사용할 디렉토리 식별.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/rpg-authentication-use-kerberos.png)


### AWS CLI
<a name="postgresql-kerberos-setting-up.create-modify.CLI"></a>

AWS CLI를 사용하는 경우 생성한 디렉터리를 DB 인스턴스에서 사용하려면 다음과 같은 파라미터가 필요합니다.
+ `--domain` 파라미터의 경우 디렉터리를 만들 때 생성된 도메인 식별자("d-\$1" 식별자)를 사용하십시오.
+ `--domain-iam-role-name` 파라미터의 경우 귀하가 생성한, 관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 역할을 사용하십시오.

예를 들어, 다음 CLI 명령은 디렉터리를 사용하도록 DB 인스턴스를 수정합니다.

```
aws rds modify-db-instance --db-instance-identifier mydbinstance --domain d-Directory-ID --domain-iam-role-name role-name 
```

**중요**  
DB 인스턴스를 수정하여 Kerberos 인증을 사용 설정하는 경우 변경 후 DB 인스턴스를 재부팅합니다.

## 7단계: Kerberos 보안 주체를 위한 PostgreSQL 사용자 생성
<a name="postgresql-kerberos-setting-up.create-logins"></a>

이때 RDS for PostgreSQL DB 인스턴스가 AWS Managed Microsoft AD 도메인에 조인됩니다. [4단계: 사용자 생성 및 구성](#postgresql-kerberos-setting-up.create-users)에서 디렉터리에서 생성한 사용자는 PostgreSQL 데이터베이스 사용자로 설정하고 데이터베이스에 로그인할 수 있는 권한을 부여해야 합니다. `rds_superuser` 권한이 있는 데이터베이스 사용자로 로그인하면 됩니다. 예를 들어 , RDS for PostgreSQL DB 인스턴스를 생성할 때 기본값을 수락한 경우 다음 단계에 표시된 대로 `postgres`를 사용합니다.

**Kerberos 보안 주체를 위한 PostgreSQL 데이터베이스 사용자를 생성하는 방법**

1. `psql`을 사용하여 의 RDS for PostgreSQL DB 인스턴스 엔드포인트에 연결합니다. 다음 예에서는 `rds_superuser` 역할에 기본 `postgres` 계정을 사용합니다.

   ```
   psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. 데이터베이스에 액세스하도록 할 각 Kerberos 보안 주체(Active Directory 사용자 이름)에 대한 데이터베이스 사용자 이름을 생성합니다. Active Directory 인스턴스에 정의된 표준 사용자 이름(ID), 즉 해당 사용자 이름에 대한 Active Directory 도메인의 소문자 `alias`(Active Directory에서는 사용자 이름)와 대문자 이름을 사용합니다. Active Directory 사용자 이름은 외부에서 인증된 사용자이므로 다음과 같이 이름을 따옴표로 묶습니다.

   ```
   postgres=> CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN;
   CREATE ROLE
   ```

1. 데이터베이스 사용자에게 `rds_ad` 역할을 부여합니다.

   ```
   postgres=> GRANT rds_ad TO "username@CORP.EXAMPLE.COM";
   GRANT ROLE
   ```

Active Directory 사용자 ID에 대한 모든 PostgreSQL 사용자 생성을 완료하면 사용자는 Kerberos 보안 인증 정보를 사용하여 RDS for PostgreSQL DB 인스턴스에 액세스할 수 있습니다.

Kerberos를 사용하여 인증하는 데이터베이스 사용자는 Active Directory 도메인의 멤버인 클라이언트 컴퓨터에서 인증을 수행하도록 요구됩니다.

`rds_ad` 역할이 부여된 데이터베이스 사용자는 `rds_iam` 역할까지 가질 수는 없습니다. 이는 중첩된 멤버십에도 적용됩니다. 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 섹션을 참조하세요.

## 8단계: PostgreSQL 클라이언트 구성
<a name="postgresql-kerberos-setting-up.configure-client"></a>

PostgreSQL 클라이언트를 구성하려면 다음 단계를 수행하십시오.
+ 도메인을 가리키도록 krb5.conf 파일(또는 동등한 파일)을 생성합니다.
+ 클라이언트 호스트와 Directory Service 간에 트래픽이 흐를 수 있는지 확인합니다. Netcat과 같은 네트워크 유틸리티를 사용하여 다음을 수행하십시오.
  + 포트 53의 DNS를 통한 트래픽을 확인합니다.
  + 포트 53 및 Directory Service용 포트 88 및 464를 포함하는 Kerberos의 TCP/UDP를 통한 트래픽을 확인합니다.
+ 데이터베이스 포트를 통해 클라이언트 호스트와 DB 인스턴스 간에 트래픽이 흐를 수 있는지 확인합니다. 예를 들어, psql을 사용하여 데이터베이스에 연결하고 액세스합니다.

다음은 AWS Managed Microsoft AD의 샘플 krb5.conf 콘텐츠입니다.

```
[libdefaults]
 default_realm = EXAMPLE.COM
[realms]
 EXAMPLE.COM = {
  kdc = example.com
  admin_server = example.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
```

다음은 온프레미스 Microsoft Active Directory의 샘플 krb5.conf 콘텐츠입니다.

```
[libdefaults]
 default_realm = EXAMPLE.COM
[realms]
 EXAMPLE.COM = {
  kdc = example.com
  admin_server = example.com
 }
 ONPREM.COM = {
  kdc = onprem.com
  admin_server = onprem.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
 .onprem.com = ONPREM.COM
 onprem.com = ONPREM.COM  
 .rds.amazonaws.com = EXAMPLE.COM
 .amazonaws.com.rproxy.goskope.com.cn = EXAMPLE.COM
 .amazon.com = EXAMPLE.COM
```

# Active Directory 도메인에서 RDS for PostgreSQL DB 인스턴스 관리
<a name="postgresql-kerberos-managing"></a>

콘솔, CLI 또는 RDS API를 사용하여 DB 인스턴스 및 Microsoft Active Directory와의 관계를 관리할 수 있습니다. 예를 들어, Active Directory를 연결하여 Kerberos 인증을 활성화할 수 있습니다. 또한 Active Directory 연결을 제거하여 Kerberos 인증을 비활성화할 수 있습니다. 또한 DB 인스턴스를 이동하여 한 Microsoft Active Directory에서 다른 Microsoft Active Directory로 외부적으로 인증해 줄 수 있습니다.

예를 들어 CLI를 사용하여 다음 작업을 수행할 수 있습니다.
+ 실패한 멤버십에 대한 Kerberos 인증 활성화를 다시 시도하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령을 사용합니다. `--domain` 옵션에 대해 현재 멤버십의 디렉터리 ID를 지정합니다.
+ DB 인스턴스에서 Kerberos 인증을 비활성화하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령을 사용합니다. `none` 옵션의 경우 `--domain`을 지정합니다.
+ 한 도메인에서 다른 도메인으로 DB 인스턴스를 이동하려면 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령을 사용합니다. `--domain` 옵션에 대해 새 도메인의 도메인 식별자를 지정합니다.

## 도메인 멤버십 이해
<a name="postgresql-kerberos-managing.understanding"></a>

DB 인스턴스를 생성하거나 수정하면 멤버가 됩니다. 콘솔에서 또는 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI 명령을 실행하여 도메인 멤버십의 상태를 확인할 수 있습니다. DB 인스턴스의 상태는 다음 중 한 가지가 될 수 있습니다.
+ `kerberos-enabled` - DB 인스턴스에 Kerberos 인증이 활성화되어 있습니다.
+ `enabling-kerberos` - AWS에서 이 DB 인스턴스에 대한 Kerberos 인증 활성화를 진행 중입니다.
+ `pending-enable-kerberos` - 이 DB 인스턴스에 대한 Kerberos 인증 활성화가 보류 중입니다.
+ `pending-maintenance-enable-kerberos` - AWS에서 예약된 다음 유지 관리 기간에 DB 인스턴스에 대한 Kerberos 인증을 활성화하려 합니다.
+ `pending-disable-kerberos` - 이 DB 인스턴스에 대한 Kerberos 인증 비활성화가 보류 중입니다.
+ `pending-maintenance-disable-kerberos` - AWS에서 예약된 다음 유지 관리 기간에 DB 인스턴스에 대한 Kerberos 인증을 비활성화하려 합니다.
+ `enable-kerberos-failed` - 구성 문제로 인해 AWS가 DB 인스턴스에 대해 Kerberos 인증을 활성화하지 못했습니다. DB 인스턴스 수정 명령을 다시 실행하기 전에 구성 문제를 해결하십시오.
+ `disabling-kerberos` - AWS에서 이 DB 인스턴스에 대한 Kerberos 인증 비활성화를 진행 중입니다.

네트워크 연결 문제 또는 잘못된 IAM 역할로 인해 Kerberos 인증 활성화 요청이 실패할 수 있습니다. 경우에 따라 DB 인스턴스를 생성하거나 수정할 때 Kerberos 인증을 사용하려고 하면 실패할 수 있습니다. 이런 경우 올바른 IAM 역할을 사용하고 있는지 확인한 다음 도메인에 조인하도록 DB 인스턴스를 수정합니다.

**참고**  
RDS for PostgreSQL을 사용한 Kerberos 인증에서만 트래픽을 도메인의 DNS 서버로 전송합니다. 다른 모든 DNS 요청은 PostgreSQL을 실행 중인 DB 인스턴스에서 아웃바운드 네트워크 액세스로 취급됩니다. RDS for PostgreSQL을 사용한 아웃바운드 네트워크 액세스에 대한 자세한 내용은 [아웃바운드 네트워크 액세스에 사용자 지정 DNS 서버 사용](Appendix.PostgreSQL.CommonDBATasks.CustomDNS.md) 단원을 참조하십시오.

# Kerberos 인증을 사용하여 PostgreSQL 연결
<a name="postgresql-kerberos-connecting"></a>

pgAdmin 인터페이스 또는 psql과 같은 명령줄 인터페이스를 사용하여 Kerberos 인증으로 PostgreSQL에 연결할 수 있습니다. 연결에 대한 자세한 내용은 [PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결](USER_ConnectToPostgreSQLInstance.md) 섹션을 참조하세요. 연결에 필요한 엔드포인트, 포트 번호 및 기타 세부 정보를 얻는 방법에 대한 자세한 내용은 [PostgreSQL DB 인스턴스에 연결](CHAP_GettingStarted.CreatingConnecting.PostgreSQL.md#CHAP_GettingStarted.Connecting.PostgreSQL) 단원을 참조하십시오.

**참고**  
PostgreSQL의 GSSAPI 인증 및 암호화는 Kerberos 라이브러리 `libkrb5.so`에 의해 구현됩니다. `postgres_fdw` 및 `dblink`와 같은 기능은 Kerberos 인증 또는 암호화를 사용한 아웃바운드 연결에도 동일한 라이브러리를 사용합니다.

## pgAdmin
<a name="collapsible-section-pgAdmin"></a>

pgAdmin을 사용하여 Kerberos 인증으로 PostgreSQL에 연결하려면 다음 단계를 수행하십시오.

1. 클라이언트 컴퓨터에서 pgAdmin 애플리케이션을 실행합니다.

1. [**Dashboard**] 탭에서 [**Add New Server**]를 선택합니다.

1. **생성 - 서버** 대화 상자에서 pgAdmin의 서버를 식별하기 위해 **일반** 탭에 이름을 입력합니다.

1. **연결** 탭에서 RDS for PostgreSQL 데이터베이스에 있는 다음 정보를 입력합니다.
   + **호스트**의 경우 에 대한 엔드포인트를 입력합니다. RDS for PostgreSQL DB 인스턴스  엔드포인트는 다음과 유사하게 표시됩니다.

     ```
     RDS-DB-instance.111122223333.aws-region.rds.amazonaws.com
     ```

     Windows 클라이언트에서 온-프레미스 Microsoft Active Directory에 연결하려면 호스트 엔드포인트의 `rds.amazonaws.com` 대신 AWS Managed Active Directory의 도메인 이름을 사용합니다. 예를 들어 AWS Managed Active Directory의 도메인 이름이 `corp.example.com`일 경우 그런 다음**호스트**에서는 엔드포인트가 다음과 같이 지정됩니다.

     ```
     RDS-DB-instance.111122223333.aws-region.corp.example.com
     ```
   + **포트**에 할당된 포트를 입력합니다.
   + **Maintenance database(유지 관리 데이터베이스)**에 클라이언트가 연결될 초기 데이터베이스의 이름을 입력합니다.
   + **Username(사용자 이름)**에 [7단계: Kerberos 보안 주체를 위한 PostgreSQL 사용자 생성](postgresql-kerberos-setting-up.md#postgresql-kerberos-setting-up.create-logins)의 Kerberos 인증을 위해 입력했던 사용자 이름을 입력합니다.

1. **저장**을 선택합니다.

## psql
<a name="collapsible-section-psql"></a>

psql을 사용하여 Kerberos 인증으로 PostgreSQL에 연결하려면 다음 단계를 수행하십시오.

1. 명령 프롬프트에서 다음 명령을 실행합니다.

   ```
   kinit username                
   ```

   *`username`*을 사용자 이름으로 대체합니다. 프롬프트에서 Microsoft Active Directory에 저장된 사용자 암호를 입력합니다.

1. PostgreSQL DB 인스턴스가 공개적으로 액세스 가능한 VPC를 사용하는 경우 DB 인스턴스 엔드포인트의 IP 주소를 EC2 클라이언트의 `/etc/hosts` 파일에 넣습니다. 예를 들어 다음 명령은 IP 주소를 얻은 다음 `/etc/hosts` 파일에 넣습니다.

   ```
   % dig +short PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com  
   ;; Truncated, retrying in TCP mode.
   ec2-34-210-197-118.AWS-Region.compute.amazonaws.com.
   34.210.197.118 
   
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
   ```

   Windows 클라이언트에서 온프레미스 Microsoft Active Directory를 사용하는 경우 특수 엔드포인트를 사용하여 연결해야 합니다. 호스트 엔드포인트에서 Amazon 도메인 `rds.amazonaws.com`을 사용하는 대신 AWS Managed Active Directory의 도메인 이름을 사용합니다.

   예를 들어 AWS Managed Active Directory의 도메인 이름이 `corp.example.com`일 경우 엔드포인트에 `PostgreSQL-endpoint.AWS-Region.corp.example.com` 형식을 사용하고 `/etc/hosts` 파일에 넣습니다.

   ```
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.corp.example.com" >> /etc/hosts
   ```

1. 다음 psql 명령을 사용하여 Active Directory와 통합된 PostgreSQL DB 인스턴스에 로그인합니다. 

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com postgres
   ```

   온프레미스 Active Directory를 사용하여 Windows 클러스터에서 PostgreSQL DB 클러스터에 로그인하려면 이전 단계의 도메인 이름(`corp.example.com`)과 함께 다음 psql 명령을 사용합니다.

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.corp.example.com postgres
   ```