RDS Custom for SQL Server 인스턴스에 대한 Windows 인증 설정 - Amazon Relational Database Service

RDS Custom for SQL Server 인스턴스에 대한 Windows 인증 설정

AD 도메인에 조인된 RDS Custom for SQL Server DB 인스턴스를 소유한 AWS 계정에 대해 전용 OU 및 해당 OU 범위의 서비스 보안 인증을 만드는 것이 좋습니다. 전용 OU 및 서비스 보안 인증을 지정하면 권한 충돌을 피하고 최소 권한 원칙을 따릅니다.

Active Directory 수준 그룹 정책은 AWS 자동화 및 권한과 충돌할 수 있습니다. RDS Custom for SQL Server에 대해 생성한 OU에만 적용되는 GPO를 선택하는 것이 좋습니다.

  • 자체 관리형 또는 온프레미스 AD에서 OU 및 AD 도메인 사용자를 생성하려면 도메인 컨트롤러를 도메인 관리자로 연결할 수 있습니다.

  • AWS Directory Service 디렉터리에서 사용자 및 그룹을 생성하려면 관리 인스턴스에 연결하고 사용자 및 그룹 생성 권한이 있는 사용자로 로그인해야 합니다. 자세한 내용은 AWS Directory Service 관리 안내서AWS Managed Microsoft AD에서의 사용자 및 그룹 관리를 참조하세요.

  • Amazon EC2 Windows Server 인스턴스에서 Active Directory를 관리하려면 EC2 인스턴스에서 Active Directory 도메인 서비스 및 Active Directory Lightweight Directory 서비스 도구를 설치해야 합니다. 자세한 내용은 AWS Directory Service 관리 안내서AWS Managed Microsoft AD용 Active Directory 관리 도구 설치를 참조하세요.

  • 이러한 도구는 관리가 용이하도록 RDS Custom for SQL Server DB 인스턴스가 아닌 별도의 EC2 인스턴스에 설치하는 것이 좋습니다.

AD 도메인 서비스 계정의 요구 사항은 다음과 같습니다.

  • AD 도메인에는 컴퓨터를 도메인에 연결할 수 있는 권한이 위임된 서비스 계정이 있어야 합니다. 도메인 서비스 계정은 특정 작업을 수행할 권한이 위임된 AD의 사용자 계정입니다.

  • RDS Custom for SQL Server에 조인하려는 조직 단위의 도메인 서비스 계정에 다음 권한을 위임합니다.

    • 검증된 DNS 호스트 이름 쓰기 기능

    • 서비스 보안 주체 이름에 쓸 수 있는 검증된 기능

    • 컴퓨터 객체 생성 및 삭제

  • 자체 관리형 및 온프레미스 AD의 경우 도메인 서비스 계정은 ‘AWS위임 도메인 이름 시스템 관리자’ 그룹의 멤버여야 합니다.

  • AWS Managed Microsoft AD의 경우 도메인 서비스 계정은 ‘DnsAdmins’ 그룹의 멤버여야 합니다.

이러한 권한은 컴퓨터 객체를 자체 관리형 AD 및 AWS Managed Microsoft AD에 조인하는 데 필요한 최소 권한 집합입니다. 자세한 내용은 Microsoft Windows Server 설명서의 오류: 제어를 위임받은 관리자가 아닌 사용자가 컴퓨터를 도메인 컨트롤러에 조인하려고 하면 액세스가 거부됨 항목을 참조하세요.

중요

DB 인스턴스를 만든 후에는 RDS Custom for SQL Server가 조직 단위(OU)에서 생성한 컴퓨터 객체를 옮기지 마세요. 연결된 객체를 이동하면 RDS Custom for SQL Server DB 인스턴스가 잘못 구성될 수 있습니다. Amazon RDS에서 생성한 컴퓨터 객체를 이동해야 하는 경우 ModifyDBInstance 작업을 사용하여 컴퓨터 객체의 원하는 위치로 도메인 파라미터를 수정하세요.

1단계: AD에서 조직 단위(OU) 생성

다음 단계에 따라 AD에서 조직 단위를 생성합니다.

AD에서 OU 생성
  1. 도메인 관리자로 도메인 AD에 연결합니다.

  2. Active Directory 사용자 및 컴퓨터를 열고 OU를 생성할 도메인을 선택합니다.

  3. 도메인을 마우스 오른쪽 버튼으로 클릭하고 새로 만들기를 선택한 다음 조직 단위를 선택합니다.

  4. OU 이름을 입력합니다.

    컨테이너가 실수로 삭제되지 않도록 보호를 활성화합니다.

  5. 확인을 선택합니다. 새 OU는 도메인 아래에 표시됩니다.

AWS Managed Microsoft AD의 경우 이 OU의 이름은 디렉터리 생성 시 입력한 NetBIOS 이름에 근거를 둡니다. 이 OU는 AWS가 소유하며, 전체 제어 권한을 부여한 모든 AWS 관련 디렉터리 객체가 포함됩니다. 기본적으로 이 OU에는 컴퓨터와 사용자라는 두 개의 하위 OU가 있습니다. RDS Custom이 생성하는 새 OU는 NetBIOS를 기반으로 하는 OU의 하위 OU입니다.

2단계: AD 도메인 사용자 생성

도메인 사용자 보안 인증 정보는 Secrets Manager에서 보안 암호로 사용됩니다.

AD에서 AD 도메인 사용자 생성
  1. Active Directory 사용자 및 컴퓨터를 열고 사용자를 생성할 도메인과 OU를 선택합니다.

  2. 사용자 객체를 마우스 오른쪽 버튼으로 클릭하고 새로 만들기, 사용자 순으로 선택합니다.

  3. 사용자의 이름, 성 및 로그인 이름을 입력합니다. 다음을 클릭합니다.

  4. 사용자의 암호를 입력합니다. 다음 로그인 시 사용자가 암호를 변경해야 함 또는 계정이 비활성화됨을 선택하지 마세요. 다음을 클릭합니다.

  5. 확인을 클릭합니다. 새 사용자는 도메인 아래에 표시됩니다.

3단계: 자체 관리형 또는 AWS Managed Microsoft AD에서 AD 사용자에게 제어 권한 위임

도메인의 AD 도메인 사용자에게 제어 권한을 위임하려면
  1. Active Directory 사용자 및 컴퓨터 MMC 스냅인을 열고 도메인을 선택합니다.

  2. 이전에 만든 OU를 마우스 오른쪽 버튼으로 클릭하고 제어 위임을 선택합니다.

  3. 제어 위임 마법사에서 다음을 클릭합니다.

  4. 사용자 또는 그룹 섹션에서 추가를 클릭합니다.

  5. 사용자, 컴퓨터 또는 그룹 선택에서 생성한 AD 사용자를 입력하고 이름 확인을 클릭합니다. AD 사용자 확인에 성공하면 확인을 클릭합니다.

  6. 사용자 또는 그룹 섹션에서 AD 사용자가 추가되었는지 확인하고 다음을 클릭합니다.

  7. 위임할 작업 섹션에서 위임할 사용자 지정 작업 생성을 선택하고 다음을 클릭합니다.

  8. Active Directory 객체 유형 섹션에서:

    폴더의 다음 객체만을 선택합니다.

    컴퓨터 객체를 선택합니다.

    이 폴더에서 선택한 객체 생성을 선택합니다.

    이 폴더에서 선택한 객체 삭제를 선택하고 다음을 클릭합니다.

  9. 권한 섹션에서:

    일반을 선택한 상태로 유지합니다.

    DNS 호스트 이름에 대한 검증된 쓰기를 선택합니다.

    서비스 보안 주체 이름에 대한 검증된 쓰기를 선택하고 다음을 클릭합니다.

  10. 제어 위임 마법사를 완료하려면에서 설정을 확인한 다음 마침을 클릭합니다.

4단계: 보안 암호 생성

Active Directory에 포함하려는 RDS Custom for SQL Server DB 인스턴스가 포함된 동일한 AWS 계정 및 리전에 보안 암호를 만들어야 합니다. 2단계: AD 도메인 사용자 생성에서 생성된 AD 도메인 사용자의 자격 증명을 저장합니다.

Console
  • AWS Secrets Manager에서 새 암호 저장을 선택합니다.

  • 보안 암호 유형에서 다른 유형의 보안 암호를 선택합니다.

  • 키/값 쌍의 경우 2개의 키를 추가합니다.

    • 첫 번째 키 값에는 SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME을 입력하고 AD 사용자의 사용자 이름(도메인 접두사 제외)을 입력합니다.

    • 두 번째 키에 SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD를 입력하고 도메인에 AD 사용자의 암호를 입력합니다.

  • 암호화 키에 RDS Custom for SQL Server 인스턴스를 생성하는 데 사용한 것과 동일한 AWS KMS 키를 입력합니다.

  • 보안 암호 이름에서 do-not-delete-rds-custom-으로 시작하는 보안 암호 이름을 선택하여 인스턴스 프로파일이 이 보안 암호에 액세스할 수 있도록 합니다. 보안 암호에 다른 이름을 선택하려면 보안 암호 이름에 액세스하도록 RDSCustomInstanceProfile을 업데이트합니다.

  • (선택 사항) 설명에 보안 암호 이름에 대한 설명을 입력합니다.

  • 태그 Key="AWSRDSCustom",Value="custom-sqlserver" 추가

  • 저장을 클릭한 후 다음을 클릭합니다.

  • 교체 설정 구성에서 기본값을 유지하고 다음을 선택합니다.

  • 보안 암호 설정을 검토하고 저장을 클릭합니다.

  • 새 보안 암호를 선택하고 보안 암호 ARN의 값을 복사합니다. 다음 단계에서 이를 사용하여 Active Directory를 설정합니다.

CLI

CLI에서 다음 명령을 실행하여 보안 암호를 생성합니다.

# Linux based aws secretsmanager create-secret \ --name do-not-delete-rds-custom-DomainUserCredentails \ --description "Active directory user credentials for managing RDS Custom" \ --secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" \ --kms-key-id <RDSCustomKMSKey> \ --tags Key="AWSRDSCustom",Value="custom-sqlserver" # Windows based aws secretsmanager create-secret ^ --name do-not-delete-rds-custom-DomainUserCredentails ^ --description "Active directory user credentials for managing RDS Custom" ^ --secret-string "{\"SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME\":\"tester\",\"SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD\":\"xxxxxxxx\"}" ^ --kms-key-id <RDSCustomKMSKey> ^ --tags Key="AWSRDSCustom",Value="custom-sqlserver"

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

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

참고

RDS Custom for SQL Server 인스턴스가 이미 AD에 수동으로 조인된 경우 네트워크 구성 포트 규칙, 네트워크 검증의 설정을 확인하고 1~4단계를 완료합니다. 도메인 조인 보안 인증 정보 및 구성이 RDS Custom에 등록되어 CNAME를 모니터링, 등록 및 복구 작업을 수행할 수 있도록 --domain-fqdn, --domain-ou--domain-auth-secret-arn을 AD로 업데이트합니다.

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

  • --domain-fqdn 파라미터에는 자체 관리형 AD의 정규화된 도메인 이름을 사용합니다.

  • --domain-ou 파라미터에는 자체 관리형 AD에서 만든 OU를 사용합니다.

  • --domain-auth-secret-arn 파라미터에는 생성한 보안 암호 ARN의 값을 사용합니다.

중요

자체 관리형 AD 도메인에 조인하거나 자체 관리형 AD 도메인 또는 AWS Managed Microsoft AD에서 제거하도록 DB 인스턴스를 수정한 경우 변경 사항이 적용되려면 DB 인스턴스를 재부팅해야 합니다. 변경 사항을 즉시 적용하거나 다음 유지 관리 기간까지 기다릴 수 있습니다. 즉시 적용 옵션을 선택하면 단일 AZ DB 인스턴스에 가동 중단이 발생합니다. 다중 AZ DB 클러스터는 재부팅을 완료하기 전에 장애 조치를 수행합니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

다음 CLI 명령은 새 RDS Custom for SQL Server DB 인스턴스를 만들어 자체 관리형 또는 AWS Managed Microsoft AD 도메인에 조인합니다.

대상 LinuxmacOS, 또는Unix:

aws rds create-db-instance \ --engine custom-sqlserver-se \ --engine-version 15.00.4312.2.v1 \ --db-instance-identifier my-custom-instance \ --db-instance-class db.m5.large \ --allocated-storage 100 --storage-type io1 --iops 1000 \ --master-username my-master-username \ --master-user-password my-master-password \ --kms-key-id my-RDSCustom-key-id \ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \ --domain-fqdn "corp.example.com" \ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \ --db-subnet-group-name my-DB-subnet-grp \ --vpc-security-group-ids my-securitygroup-id \ --no-publicly-accessible \ --backup-retention-period 3 \ --port 8200 \ --region us-west-2 \ --no-multi-az

Windows의 경우:

aws rds create-db-instance ^ --engine custom-sqlserver-se ^ --engine-version 15.00.4312.2.v1 ^ --db-instance-identifier my-custom-instance ^ --db-instance-class db.m5.large ^ --allocated-storage 100 --storage-type io1 --iops 1000 ^ --master-usernamemy-master-username ^ --master-user-password my-master-password ^ --kms-key-id my-RDSCustom-key-id ^ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^ --domain-fqdn "corp.example.com" ^ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^ --db-subnet-group-name my-DB-subnet-grp ^ --vpc-security-group-ids my-securitygroup-id ^ --no-publicly-accessible ^ --backup-retention-period 3 ^ --port 8200 ^ --region us-west-2 ^ --no-multi-az
중요

AWS Managed Microsoft AD에 대한 NetBIOS가 corpexample인 경우 OU 자체로 표시됩니다. 이전에 생성된 새 OU는 중첩 OU로 표시됩니다. AWS Managed Microsoft AD의 경우 --domain-ou"OU=RDSCustomOU,OU=corpexample,DC=corp,DC=example,DC=com"으로 설정합니다.

다음 명령은 Active Directory 도메인을 사용하도록 기존 RDS Custom for SQL Server DB 인스턴스를 수정합니다.

대상 LinuxmacOS, 또는Unix:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --domain-fqdn "corp.example.com" \ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" \ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" \

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --domain-fqdn "corp.example.com" ^ --domain-ou "OU=RDSCustomOU,DC=corp,DC=example,DC=com" ^ --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:do-not-delete-rds-custom-my-AD-test-secret-123456" ^

다음 CLI 명령은 Active Directory 도메인에서 RDS Custom for SQL Server DB 인스턴스를 제거합니다.

대상 LinuxmacOS, 또는Unix:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --disable-domain

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --disable-domain

콘솔을 사용하여 인스턴스를 생성하거나 수정할 때 Microsoft SQL Server Windows 인증 활성화를 클릭하여 다음 옵션을 확인합니다.

Microsoft SQL Server Windows 인증 디렉터리

도메인 FQDN이 도메인 컨트롤러 IP 주소로 확인되고 있는지 확인하는 것은 사용자의 책임입니다. 도메인 컨트롤러 IP가 확인되지 않으면 도메인 조인 작업은 실패하지만 RDS Custom for SQL Server 인스턴스 만들기에 성공합니다. 문제 해결 정보는 Active Directory 문제 해결를 참조하세요.

6단계: Windows 인증 SQL Server 로그인 생성

다른 DB 인스턴스의 경우와 같은 방법으로 Amazon RDS 마스터 사용자 보안 인증 정보를 사용하여 SQL Server DB 인스턴스에 연결합니다. DB 인스턴스는 AD 도메인에 조인되므로 SQL Server 로그인 및 사용자를 프로비저닝할 수 있습니다. 이 작업은 AD 도메인의 AD 사용자 및 그룹 유틸리티에서 수행합니다. 데이터베이스 권한은 이러한 Windows 로그인에 부여되거나 취소되는 표준 SQL Server 권한을 통해 관리됩니다.

AD 사용자가 SQL Server로 인증하려면 AD 사용자 또는 사용자가 속한 Active Directory 그룹에 대한 SQL Server Windows 로그인이 있어야 합니다. 세분화된 액세스 제어는 이러한 SQL Server 로그인에 대한 권한을 부여하거나 취소하여 처리합니다. SQL Server 로그인이 없거나 이러한 로그인이 있는 AD 그룹에 속하지 않은 AD 사용자는 SQL Server DB 인스턴스에 액세스할 수 없습니다.

AD SQL Server 로그인을 생성하려면 ALTER ANY LOGIN 권한이 필요합니다. 이 권한으로 로그인을 생성하지 않은 경우 SQL Server 인증을 사용하여 DB 인스턴스의 마스터 사용자로 연결하고 마스터 사용자의 맥락에서 AD SQL Server 로그인을 생성합니다.

다음과 같은 데이터 정의 언어(DDL) 명령을 실행하여 AD 사용자 또는 그룹에 대한 SQL Server 로그인을 생성할 수 있습니다.

USE [master] GO CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english]; GO

도메인의 사용자(사람 및 애플리케이션)는 이제 Windows 인증을 사용하여 도메인이 조인된 클라이언트 컴퓨터의 RDS Custom for SQL Server 인스턴스에 연결할 수 있습니다.

7단계: Kerberos 또는 NTLM 인증 사용

RDS 엔드포인트를 사용한 NTLM 인증

각 Amazon RDS DB 인스턴스에는 엔드포인트가 있으며, 각 엔드포인트에는 DB 인스턴스의 DNS 이름과 포트 번호가 있습니다. SQL 클라이언트 애플리케이션을 사용해 DB 인스턴스에 연결하려면 DB 인스턴스에 연결할 수 있는 DNS 이름과 포트 번호가 필요합니다. NTLM 인증을 사용하여 인증하려면 RDS 엔드포인트에 연결해야 합니다.

계획된 데이터베이스 유지 관리 또는 예기치 않은 서비스 중단이 발생할 경우 Amazon RDS가 최신 보조 데이터베이스로 자동으로 장애 조치를 수행하므로 수동 개입 없이 작업을 빠르게 재개할 수 있습니다. 기본 인스턴스 및 보조 인스턴스는 동일한 엔드포인트를 사용합니다. 이 엔드포인트의 물리적 네트워크 주소는 장애 조치 프로세스의 일환으로 보조로 전환됩니다. 장애 조치가 발생하는 경우 애플리케이션을 다시 구성할 필요가 없습니다.

Kerberos 인증

RDS Custom for SQL Server에 대한 Kerberos 기반 인증을 수행하려면 특정 서비스 보안 주체 이름(SPN)에 연결해야 합니다. 그러나 장애 조치 이벤트 후 애플리케이션이 새 SPN을 인식하지 못할 수 있습니다. 이를 해결하기 위해 RDS Custom for SQL Server는 Kerberos 기반 엔드포인트를 제공합니다.

Kerberos 기반 엔드포인트는 특정 형식을 따릅니다. RDS 엔드포인트가 rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com인 경우 해당 Kerberos 기반 엔드포인트는 rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)입니다.

예를 들어 RDS 엔드포인트가 ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com이고 도메인 이름이 corp-ad.company.com인 경우 Kerberos 기반 엔드포인트는 ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com입니다.

이 Kerberos 기반 엔드포인트는 기본 SQL Server 인스턴스의 새 SPN을 가리키도록 엔드포인트가 자동으로 업데이트되므로 장애 조치 이벤트 후에도 Kerberos를 사용하여 SQL Server 인스턴스로 인증하는 데 사용할 수 있습니다.

CNAME 찾기

CNAME를 찾으려면 도메인 컨트롤러에 연결하고 DNS Manager를 엽니다. 정방향 조회 영역 및 FQDN으로 이동합니다.

awsrds, aws-region, 계정 및 리전별 해시를 탐색합니다.

RDS Custom EC2 인스턴스를 연결하고 CNAME를 사용하여 로컬에서 데이터베이스에 연결하려고 하면 연결에서 Kerberos 대신 NTLM 인증을 사용합니다.

원격 클라이언트에서 CNAME를 연결한 후 NTLM 연결이 반환되면 필요한 포트가 허용 목록에 있는지 확인합니다.

연결에서 Kerberos를 사용 중인지 확인하려면 다음 쿼리를 실행합니다.

SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SSPID;