Oracle DB 인스턴스에 대해 Kerberos 인증 설정 - Amazon Relational Database Service

Oracle DB 인스턴스에 대해 Kerberos 인증 설정

AWS Directory Service for Microsoft Active Directory라고도 하는 AWS Managed Microsoft AD을 사용하여 Oracle DB 인스턴스의 Kerberos 인증을 설정합니다. Kerberos 인증을 설정하려면 다음 단계를 완료하십시오.

참고

설치하는 동안 RDS는 CREATE SESSION 권한이 있는 managed_service_user@example.com이라는 Oracle 데이터베이스 사용자를 생성합니다. 여기서 example.com은 도메인 이름입니다. 이 사용자는 Directory Service가 Managed Active Directory 내에 생성하는 사용자에 해당합니다. 정기적으로, RDS는 Directory Service에서 제공하는 자격 증명을 사용하여 Oracle 데이터베이스에 로그인합니다. 그 후, RDS는 티켓 캐시를 즉시 삭제합니다.

1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 만들기

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

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

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

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

    참고

    이 암호를 저장하십시오. AWS Directory Service에서는 저장되지 않습니다. 재설정은 가능하지만 검색은 불가능합니다.

  • 디렉터리 컨트롤러에 대한 보안 그룹을 만듭니다.

AWS Managed Microsoft AD를 시작하면 AWS에서 모든 디렉터리의 객체를 포함하는 OU(조직 단위)를 생성합니다. 이 OU는 디렉터리를 생성할 때 입력한 NetBIOS 이름을 가지고 있으며, 도메인 루트에 위치합니다. 도메인 루트는 AWS에서 소유하고 관리합니다.

AWS Managed Microsoft AD 디렉터리를 사용해 생성한 관리자 계정은 OU의 가장 일반적인 관리 활동에 대한 권한을 갖습니다.

  • 사용자 생성, 업데이트 또는 삭제

  • 도메인(예: 파일 또는 인쇄 서버)에 리소스를 추가한 다음 OU 내의 사용자에 해당 리소스에 대한 권한 할당

  • 추가 OU 및 컨테이너 생성

  • 권한 위임

  • Active Directory 휴지통에서 삭제된 객체 복원

  • Active Directory 웹 서비스에서 AD 및 DNS Windows PowerShell 모듈 실행

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

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

  • DNS 이벤트 로그 보기

  • 보안 이벤트 로그 보기

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

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. 다음 정보를 입력합니다.

    디렉터리 DNS 이름

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

    디렉터리 NetBIOS 이름

    디렉터리의 짧은 이름(예: CORP)입니다.

    디렉터리 설명

    (선택 사항) 디렉터리에 대한 설명입니다.

    관리자 암호

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

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

    • 소문자(a–z)

    • 대문자(A–Z)

    • 숫자(0–9)

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

    [Confirm Password]

    관리자 암호를 다시 입력했습니다.

  5. 다음을 선택합니다.

  6. 네트워킹 섹션에 다음 정보를 입력하고 다음을 선택합니다.

    VPC

    디렉터리에 대한 VPC입니다. 동일한 VPC에 Oracle DB 인스턴스를 생성합니다.

    서브넷

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

  7. 디렉터리 정보를 검토하고 필요한 사항을 변경합니다. 정보가 올바르면 디렉터리 생성을 선택합니다.

    생성 중 디렉터리 세부 정보 페이지

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

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

디렉터리 세부 정보 페이지

2단계: 신뢰 생성

AWS Managed Microsoft AD만 사용하려는 경우 3단계: Amazon RDS에 대한 IAM 권한 구성 섹션으로 넘어갑니다.

온프레미스 또는 자체 호스팅된 Microsoft Active Directory를 사용하여 Kerberos 인증을 얻으려면 포리스트 신뢰 또는 외부 신뢰를 생성하십시오. 단방향 또는 양방향 트러스트가 가능합니다. AWS Directory Service를 사용하여 포리스트 신뢰를 설정하는 방법에 대한 자세한 내용은 AWS Directory Service 관리 안내서신뢰 관계를 생성해야 하는 경우를 참조하세요.

3단계: Amazon RDS에 대한 IAM 권한 구성

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

참고

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

IAM 역할 생성

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

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

참고

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

수동으로 IAM 신뢰 정책 만들기

선택 사항으로 관리형 IAM 정책인 AmazonRDSDirectoryServiceAccess를 사용하는 대신 필요한 권한으로 리소스 정책을 생성할 수 있습니다. directoryservice.rds.amazonaws.comrds.amazonaws.com 둘 다 보안 주체로 지정합니다.

Amazon RDS가 다른 서비스에 제공하는 리소스에 대한 권한을 제한하려면 리소스 정책에서 aws:SourceArnaws:SourceAccount 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 혼동된 대리자 문제로부터 보호하는 가장 효과적인 방법은 Amazon RDS 리소스의 전체 ARN이 포함된 aws:SourceArn 글로벌 조건 컨텍스트 키를 사용하는 것입니다. 자세한 내용은 교차 서비스 혼동된 대리자 문제 방지 단원을 참조하십시오.

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

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

또한 옵트인 리전의 경우 directoryservice.rds.region_name.amazonaws.com의 양식으로 해당 리전의 서비스 보안 주체를 포함해야 합니다. 예를 들어 아프리카(케이프타운) 리전에서 다음의 신뢰 정책을 사용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "directoryservice.rds.af-south-1.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:af-south-1:123456789012:db:mydbinstance" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

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

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

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

Active Directory 도메인 서비스 및 Active Directory Lightweight Directory Services 도구의 일부인 Active Directory 사용자 및 컴퓨터 도구를 사용하여 사용자를 생성할 수 있습니다. 이 경우 사용자는 디렉터리에 액세스할 수 있는 개별 사용자 또는 개체입니다.

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

5단계: 디렉터리와 DB 인스턴스 사이에 VPC 간 트래픽 활성화

디렉터리와 DB 인스턴스를 동일한 VPC에 배치하려면 이 단계를 건너뛰고 6단계: Oracle DB 인스턴스 생성 또는 수정 섹션으로 이동하세요.

디렉터리와 DB 인스턴스를 서로 다른 AWS 계정 또는 VPC에 배치하려면 VPC 피어링 또는 AWS Transit Gateway를 사용하여 VPC 간 트래픽을 구성합니다. 다음 절차는 VPC 피어링을 사용하여 VPC 간 트래픽을 활성화합니다. Amazon Virtual Private Cloud 피어링 안내서VPC 피어링이란? 지침을 따르십시오.

VPC 피어링을 사용하여 VPC 간 트래픽을 활성화하려면
  1. 네트워크 트래픽이 양방향으로 흐를 수 있도록 적절한 VPC 라우팅 규칙을 설정합니다.

  2. DB 인스턴스의 보안 그룹이 디렉터리의 보안 그룹에서 인바운드 트래픽을 수신할 수 있는지 확인합니다. 자세한 내용은 AWS Managed Microsoft AD 관리 안내서에서 AWS Directory Service 모범 사례를 참조하세요.

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

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

AWS 계정 간에 디렉터리를 공유하려면
  1. AWS 관리 안내서자습서: 원활한 EC2 도메인 조인을 위해 AWS Managed Microsoft AD 디렉터리 공유에 있는 지침에 따라 DB 인스턴스가 생성될 AWS Directory Service 계정과 디렉터리를 공유하는 작업을 시작합니다.

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

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

6단계: Oracle DB 인스턴스 생성 또는 수정

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

Kerberos 인증은 VPC의 Oracle DB 인스턴스에 대해서만 지원됩니다. DB 인스턴스는 디렉터리와 동일한 VPC 또는 다른 VPC에 있을 수 있습니다. DB 인스턴스를 생성하거나 수정할 때 다음을 수행합니다.

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

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

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

콘솔을 사용하여 DB 인스턴스를 생성하는 경우 Database authentication(데이터베이스 인증) 섹션에서 Password and Kerberos authentication(암호 및 Kerberos 인증)을 선택합니다. Browse Directory(디렉터리 찾아보기)를 선택한 다음 디렉터리를 선택하거나 새 디렉터리 생성을 선택합니다.

DB 인스턴스를 생성할 때의 Kerberos 인증 설정

콘솔을 사용하여 DB 인스턴스를 수정하거나 복원할 때는 Kerberos authentication(Kerberos 인증) 섹션에서 디렉터리를 선택하거나 새 디렉터리 생성을 선택합니다.

DB 인스턴스를 수정하거나 복원할 때의 Kerberos 인증 설정

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

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

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

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

대상 LinuxmacOS, 또는Unix:

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

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --domain d-ID ^ --domain-iam-role-name role-name
중요

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

참고

MANAGED_SERVICE_USER는 이름이 Directory Service for RDS에서 임의로 생성되는 서비스 계정입니다. Kerberos 인증을 설정하는 동안, RDS for Oracle은 동일한 이름을 가진 사용자를 생성하고 해당 사용자에게 CREATE SESSION 권한을 할당합니다. Oracle DB 사용자는 외부에서 MANAGED_SERVICE_USER@EXAMPLE.COM으로 식별됩니다. 여기서 EXAMPLE.COM은 도메인의 이름입니다. 정기적으로, RDS는 Directory Service에서 제공하는 자격 증명을 사용하여 Oracle 데이터베이스에 로그인합니다. 그 후, RDS는 티켓 캐시를 즉시 삭제합니다.

7단계: Kerberos 인증 Oracle 로그인 생성

다른 DB 인스턴스의 경우와 같은 방법으로 Amazon RDS 마스터 사용자 자격 증명을 사용하여 Oracle DB 인스턴스에 연결합니다. DB 인스턴스는 AWS Managed Microsoft AD 도메인에 조인됩니다. 따라서 도메인 내 Microsoft Active Directory 사용자 및 그룹에서 Oracle 로그인 및 사용자를 프로비저닝할 수 있습니다. 데이터베이스 권한을 관리하려면 이 로그인에 대해 표준 Oracle 권한을 부여하고 취소하십시오.

Microsoft Active Directory 사용자가 Oracle로 인증할 수 있게 허용하는 방법
  1. Amazon RDS 마스터 사용자 자격 증명을 사용하여 Oracle DB 인스턴스에 연결합니다.

  2. Oracle 데이터베이스에서 외부에서 인증된 사용자를 생성합니다.

    다음 예제에서는 KRBUSER@CORP.EXAMPLE.COM을(를) 사용자 이름 및 도메인 이름으로 교체합니다.

    CREATE USER "KRBUSER@CORP.EXAMPLE.COM" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "KRBUSER@CORP.EXAMPLE.COM";

    이제 도메인의 사용자(사람 및 애플리케이션)는 Kerberos 인증을 사용하여 도메인이 조인된 클라이언트 머신에서 Oracle DB 인스턴스에 연결할 수 있습니다.

8단계: Oracle 클라이언트 구성

Oracle 클라이언트를 구성하려면 다음 요구 사항을 충족하십시오.

  • 도메인을 가리키도록 krb5.conf(Linux) 또는 krb5.ini(Windows)라는 구성 파일을 만듭니다. 이 구성 파일을 사용하도록 Oracle 클라이언트를 구성합니다.

  • TCP/UDP를 사용하여 DNS 포트 53, TCP를 사용하여 Kerberos 포트(관리형 AWS Directory Service의 경우 88 및 464) 및 TCP를 사용하여 LDAP 포트 389를 통해 클라이언트 호스트와 AWS Directory Service 간에 트래픽이 흐를 수 있는지 확인합니다.

  • 데이터베이스 포트를 통해 클라이언트 호스트와 DB 인스턴스 간에 트래픽이 흐를 수 있는지 확인합니다.

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

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

다음은 온프레미스 Microsoft AD의 샘플 krb5.conf 콘텐츠입니다. krb5.conf 또는 krb5.ini 파일에서 on-prem-ad-server-name을 온프레미스 AD 서버의 이름으로 바꿉니다.

[libdefaults] default_realm = ONPREM.COM [realms] AWSAD.COM = { kdc = awsad.com admin_server = awsad.com } ONPREM.COM = { kdc = on-prem-ad-server-name admin_server = on-prem-ad-server-name } [domain_realm] .awsad.com = AWSAD.COM awsad.com= AWSAD.COM .onprem.com = ONPREM.COM onprem.com= ONPREM.COM
참고

krb5.ini 또는 krb5.conf 파일을 구성한 후에는 서버를 재부팅하는 것이 좋습니다.

다음은 SQL*Plus 구성에 대한 샘플 sqlnet.ora 콘텐츠입니다.

SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5PRE,KERBEROS5) SQLNET.KERBEROS5_CONF=path_to_krb5.conf_file

SQL Developer 구성의 예는 Oracle Support의 문서 1609359.1을 참조하세요.