Amazon RDS for Db2에 대한 Kerberos 인증 사용 - Amazon Relational Database Service

Amazon RDS for Db2에 대한 Kerberos 인증 사용

Amazon RDS for Db2 DB 인스턴스에 연결할 때 Kerberos 인증을 통해 사용자를 인증할 수 있습니다. DB 인스턴스는 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)와 함께 작동하여 Kerberos 인증을 활성화합니다. 사용자가 신뢰하는 도메인에 조인한 RDS for Db2 DB 인스턴스를 사용하여 인증할 경우 AWS Directory Service를 사용하여 만든 디렉터리에 인증 요청이 전달됩니다. 자세한 내용은 AWS Directory Service 관리 가이드AWS Directory Service란 무엇입니까?를 참조하세요.

먼저 사용자 보안 인증 정보를 저장할 AWS Managed Microsoft AD 디렉터리를 만듭니다. 그런 다음 AWS Managed Microsoft AD 디렉터리의 도메인 및 기타 정보를 RDS for Db2 DB 인스턴스에 추가합니다. RDS for Db2 DB 인스턴스에 대해 사용자가 인증될 때 AWS Managed Microsoft AD 디렉터리에 인증 요청이 전달됩니다.

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

리전 및 버전 사용 가능 여부

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전 리전에 따라 다릅니다. Kerberos 인증을 사용하는 RDS for Db2의 버전 및 리전 가용성에 대한 자세한 내용은 Amazon RDS에서 Kerberos 인증을 지원하는 리전 및 DB 엔진 섹션을 참조하세요.

참고

RDS for Db2 DB 인스턴스에서 사용 중단된 DB 인스턴스 클래스에는 Kerberos 인증이 지원되지 않습니다. 자세한 내용은 Amazon RDS for Db2 인스턴스 클래스 단원을 참조하십시오.

RDS for Db2 DB 인스턴스에 대한 Kerberos 인증 개요

RDS for Db2 DB 인스턴스에 대해 Kerberos 인증을 설정하려면 다음과 같은 일반적인 단계(나중에 자세히 설명함)를 완료하세요.

  1. AWS Managed Microsoft AD를 사용하여 AWS Managed Microsoft AD 디렉터리를 생성합니다. AWS Management Console, AWS Command Line Interface(AWS CLI) 또는 AWS Directory Service를 사용하여 디렉터리를 생성할 수 있습니다. 자세한 내용은 AWS Directory Service 관리 가이드의 AWS Managed Microsoft AD 디렉터리 생성을 참조하세요.

  2. 관리형 IAM 정책 AmazonRDSDirectoryServiceAccess를 사용하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 이 IAM 역할을 사용하여 Amazon RDS에서 디렉터리를 호출할 수 있습니다.

    IAM 역할이 액세스를 허용하려면 AWS 계정의 올바른 AWS 리전에서 AWS Security Token Service(AWS STS) 엔드포인트를 활성화해야 합니다. AWS STS 엔드포인트는 모든 AWS 리전에서 기본적으로 활성화되어 있으며 추가 작업 없이 사용할 수 있습니다. 자세한 내용은 IAM 사용 설명서AWS 리전에서 AWS STS 활성화 및 비활성화를 참조하세요.

  3. AWS Management Console, AWS CLI 또는 RDS API에서 다음 방법 중 하나를 사용하여 RDS for Db2 DB 인스턴스를 생성하거나 수정합니다.

    디렉터리와 동일한 Amazon Virtual Private Cloud(VPC) 또는 다른 AWS 계정이나 VPC에 DB 인스턴스를 배치할 수 있습니다. RDS for Db2 DB 인스턴스를 생성하거나 수정할 때 다음 작업을 수행합니다.

    • 디렉터리를 만들 때 생성된 도메인 식별자(d-* 식별자)를 제공합니다.

    • 생성한 IAM 역할의 이름을 제공합니다.

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

  4. Db2 클라이언트를 구성하고 다음 포트에 대해 클라이언트 호스트와 AWS Directory Service 간에 트래픽이 흐를 수 있는지 확인합니다.

    • TCP/UDP 포트 53 – DNS

    • TCP 88 – Kerberos 인증

    • TCP 389 – LDAP

    • TCP 464 – Kerberos 인증

RDS for Db2 DB 인스턴스에 대한 Kerberos 인증 설정

AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)를 사용하여 RDS for Db2 DB 인스턴스에 대한 Kerberos 인증을 설정합니다. Kerberos 인증을 설정하려면 다음 단계를 따릅니다.

1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 생성

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

AWS Managed Microsoft AD 디렉터리를 생성하는 경우 AWS Directory Service에서 다음 작업이 자동으로 수행됩니다.

  • VPC 내에서 Active Directory를 설정합니다.

  • 사용자 이름 Admin과 지정된 암호를 사용하여 디렉터리 관리자 계정을 생성합니다. 이 계정을 사용하여 디렉터리를 관리할 수 있습니다.

    중요

    반드시 이 암호를 저장해야 합니다. AWS Directory Service에서는 이 암호를 저장하지 않으므로 암호를 검색하거나 다시 설정할 수 없습니다.

  • 디렉터리 컨트롤러에 대한 보안 그룹을 만듭니다. 보안 그룹이 RDS for Db2 DB 인스턴스와의 통신을 허용해야 합니다.

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

Admin 디렉터리를 사용하여 생성한 AWS Managed Microsoft AD 계정은 OU의 가장 일반적인 관리 활동에 대한 권한이 있습니다.

  • 사용자를 생성, 업데이트 또는 삭제합니다.

  • 파일 또는 인쇄 서버와 같은 도메인에 리소스를 추가한 다음 해당 리소스에 대한 권한을 OU의 사용자에게 할당합니다.

  • 추가 OU 및 컨테이너 생성.

  • 권한 위임.

  • 삭제된 객체를 Active Directory 휴지통에서 복원합니다.

  • AWS Directory Service에서 Windows PowerShell에 대한 Active Directory 및 도메인 이름 서비스(DNS) 모듈을 실행합니다.

또한 Admin 계정은 다음 도메인 차원 활동을 수행할 권한이 있습니다.

  • DNS 구성 관리(레코드, 영역 및 전달자 추가, 제거 또는 업데이트)

  • DNS 이벤트 로그 보기

  • 보안 이벤트 로그 보기

AWS Managed Microsoft AD으로 디렉터리를 생성하려면
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/directoryservicev2/에서 AWS Directory Service 콘솔을 엽니다.

  2. 디렉터리 설정을 선택합니다.

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

  4. Next(다음)를 선택합니다.

  5. 디렉터리 정보 입력 페이지에서 다음 정보를 제공합니다.

    • 에디션 – 요구 사항에 맞는 에디션을 선택합니다.

    • 디렉터리 DNS 이름 – 디렉터리를 위한 정규화된 이름(예: corp.example.com)입니다.

    • 디렉터리 NetBIOS 이름 – 디렉터리의 선택적 짧은 이름(예: CORP)입니다.

    • 디렉터리 설명 – 디렉터리에 대한 선택적 설명입니다.

    • 관리자 암호 – 디렉터리 관리자의 암호입니다. 디렉터리 생성 프로세스에서는 사용자 이름 Admin과 이 암호를 사용하여 관리자 계정을 생성합니다.

      디렉터리 관리자 암호는 "admin"이라는 단어를 포함할 수 없습니다. 암호는 대소문자를 구분하며 길이가 8~64자 사이여야 합니다. 또한 다음 네 범주 중 세 개에 해당하는 문자를 1자 이상 포함해야 합니다.

      • 소문자(a–z)

      • 대문자(A–Z)

      • 숫자(0–9)

      • 영숫자 외의 특수 문자(~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

      • 암호 확인 – 관리자 암호를 다시 입력합니다.

        중요

        반드시 이 암호를 저장해야 합니다. AWS Directory Service에서는 이 암호를 저장하지 않으며 암호를 검색하거나 재설정할 수 없습니다.

  6. Next(다음)를 선택합니다.

  7. Choose VPC and subnets(VPC 및 서브넷 선택) 페이지에 다음 정보를 입력합니다.

    • VPC – 디렉터리에 대한 VPC를 선택합니다. RDS for Db2 DB 인스턴스는 이와 동일한 VPC 또는 다른 VPC에서 생성할 수 있습니다.

    • 서브넷 – 디렉터리 서버에 대한 서브넷을 선택합니다. 두 서브넷이 서로 다른 가용 영역에 있어야 합니다.

  8. Next(다음)를 선택합니다.

  9. 디렉터리 정보를 검토합니다. 변경이 필요하면 이전을 선택하여 변경합니다. 정보가 올바르면 Create directory(디렉터리 생성)을 선택합니다.

    AWS Directory Service 콘솔에서 디렉터리를 생성하는 동안 나타나는 검토 및 생성 창.

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

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

디렉터리 ID가 있는 AWS Directory Service 콘솔의 디렉터리 세부 정보 섹션.

2단계: Amazon RDS에서 AWS Directory Service에 액세스할 수 있도록 IAM 역할 생성

사용자를 대신해서 Amazon RDS가 AWS Directory Service를 호출하도록 하려면 AWS 계정에서 관리형 IAM 정책 AmazonRDSDirectoryServiceAccess를 사용하는 IAM 역할이 필요합니다. 이 역할을 사용하여 Amazon RDS에서 AWS Directory Service를 호출할 수 있습니다.

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

서비스에 대한 IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하세요.

참고

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

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

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

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

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

3단계: 사용자 생성 및 구성

Active Directory Users and Computers 도구를 사용하여 사용자를 만들 수 있습니다. Active Directory Domain Services 및 Active Directory Lightweight Directory Services 도구 중 하나입니다. 자세한 내용은 Microsoft 설명서의 Active Directory 도메인에 사용자 및 컴퓨터 추가를 참조하세요. 이 경우 사용자는 도메인에 속하며 디렉터리에서 ID가 유지되는 개인 또는 기타 엔터티(예: 사용자의 컴퓨터)입니다.

AWS Directory Service 디렉터리에서 사용자를 생성하려면 AWS Directory Service 디렉터리의 멤버인 Windows 기반 Amazon EC2 인스턴스에 연결되어 있어야 합니다. 이와 동시에 사용자를 생성할 권한이 있는 사용자로 로그인한 상태이어야 합니다. 자세한 내용은 AWS Directory Service관리 안내서사용자 생성을 참조하십시오.

4단계: AWS Managed Microsoft AD에서 RDS for Db2 관리자 그룹 생성

RDS for Db2는 마스터 사용자 또는 2명의 Amazon RDS 예약 사용자 rdsdbrdsadmin에 대한 Kerberos 인증을 지원하지 않습니다. 대신 AWS Managed Microsoft AD에서 masterdba라는 새로운 그룹을 생성해야 합니다. 자세한 내용은 Microsoft 설명서의 Active Directory에서 그룹 계정 생성을 참조하세요. 이 그룹에 추가하는 모든 사용자는 마스터 사용자 권한을 갖게 됩니다.

Kerberos 인증을 활성화하면 마스터 사용자는 masterdba 역할을 잃습니다. 따라서 Kerberos 인증을 비활성화하지 않으면 마스터 사용자는 인스턴스 로컬 사용자 그룹 멤버십에 액세스할 수 없습니다. 암호 로그인을 통해 마스터 사용자를 계속 사용하려면 AWS Managed Microsoft AD에서 마스터 사용자와 동일한 이름을 가진 사용자를 생성하세요. 그런 다음 사용자를 masterdba 그룹에 추가합니다.

5단계: RDS for Db2 DB 인스턴스 생성 또는 수정

디렉터리에서 사용할 RDS for Db2 DB 인스턴스를 생성하거나 수정합니다. AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 인스턴스를 디렉터리에 연결할 수 있습니다. 이 작업을 다음 중 한 가지 방법으로 수행할 수 있습니다.

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

콘솔을 사용하여 DB 인스턴스를 생성, 수정 또는 복원할 때 데이터베이스 인증 섹션에서 암호 및 Kerberos 인증을 선택합니다. 그런 다음 [디렉터리 찾아보기(Browse Directory)]를 선택합니다. 디렉터리를 선택하거나 디렉터리 생성을 선택하여 Directory Service를 사용합니다.

암호 및 Kerberos 인증이 선택되어 있는 Amazon RDS 콘솔의 데이터베이스 인증 섹션.

AWS CLI를 사용하는 경우 생성한 도메인 디렉터리를 DB 인스턴스에서 사용하려면 다음과 같은 파라미터가 필요합니다.

  • --domain 파라미터의 경우 디렉터리를 만들 때 생성된 도메인 식별자('d-*' 식별자)를 사용하세요.

  • --domain-iam-role-name 파라미터의 경우 귀하가 생성한, 관리형 IAM 정책 AmazonRDSDirectoryServiceAccess를 사용하는 역할을 사용하십시오.

다음 예제에서는 디렉터리를 사용하도록 DB 인스턴스를 수정합니다. 예제에서 다음 자리 표시자를 사용자의 값으로 바꿉니다.

  • db_instance_name – RDS for Db2 DB 인스턴스의 이름입니다.

  • directory_id – 생성한 AWS Directory Service for Microsoft Active Directory 디렉터리의 ID입니다.

  • role_name – 생성한 IAM 역할의 이름입니다.

aws rds modify-db-instance --db-instance-identifier db_instance_name --domain d-directory_id --domain-iam-role-name role_name
중요

DB 인스턴스를 수정하여 Kerberos 인증을 활성화하는 경우에는 변경 후 DB 인스턴스를 재부팅하세요.

6단계: Db2 클라이언트 구성

Db2 클라이언트를 구성하려면
  1. 도메인을 가리키도록 /etc/krb5.conf 파일(또는 동등한 파일)을 생성합니다.

    참고

    Windows 운영 체제의 경우 C:\windows\krb5.ini 파일을 생성합니다.

  2. 클라이언트 호스트와 AWS Directory Service 간에 트래픽이 흐를 수 있는지 확인합니다. Netcat과 같은 네트워크 유틸리티를 사용하여 다음 작업을 수행하세요.

    1. 포트 53의 DNS를 통한 트래픽을 확인합니다.

    2. 포트 53 및 AWS Directory Service용 포트 88 및 464를 포함하는 Kerberos의 TCP/UDP를 통한 트래픽을 확인합니다.

  3. 데이터베이스 포트를 통해 클라이언트 호스트와 DB 인스턴스 간에 트래픽이 흐를 수 있는지 확인합니다. db2 명령을 사용하여 데이터베이스에 연결하고 액세스할 수 있습니다.

다음 예제는 AWS Managed Microsoft AD에 대한 /etc/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

도메인에서 DB 인스턴스 관리

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

예를 들어, modify-db-instance CLI 명령을 사용하여 다음 작업을 수행할 수 있습니다.

  • --domain 옵션에 현재 멤버십의 디렉터리 ID를 지정하여 실패한 멤버십에 대한 Kerberos 인증 활성화를 다시 시도합니다.

  • --domain 옵션에 대해 none을 지정하여 DB 인스턴스에서 Kerberos 인증을 비활성화합니다.

  • --domain 옵션에 대한 새 도메인의 도메인 식별자를 지정하여 한 도메인에서 다른 도메인으로 DB 인스턴스를 이동합니다.

도메인 멤버십 이해

DB 인스턴스를 생성하거나 수정하고 나면 해당 인스턴스는 도메인의 멤버가 됩니다. 콘솔에서 또는 describe-db-instances 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 인스턴스를 수정하여 도메인에 조인합니다.

Kerberos 인증을 사용하여 RDS for Db2에 연결

Kerberos 인증을 사용하여 RDS for Db2에 연결하려면
  1. 명령 프롬프트에서 다음 명령을 실행합니다. 다음 예제에서 username을 Microsoft Active Directory 사용자 이름으로 바꿉니다.

    kinit username
  2. RDS for Db2 DB 인스턴스가 공개 액세스 가능한 VPC를 사용하는 경우 Amazon EC2 클라이언트의 /etc/hosts 파일에 DB 인스턴스 엔드포인트의 IP 주소를 추가합니다. 다음 예제에서는 IP 주소를 얻은 다음 /etc/hosts 파일에 추가합니다.

    % dig +short Db2-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 Db2-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
  3. 다음 명령을 사용하여 Active Directory와 연결된 RDS for Db2 DB 인스턴스에 로그인합니다. database_name을 RDS for Db2 데이터베이스의 이름으로 바꿉니다.

    db2 connect to database_name