MySQL에 Kerberos 인증 사용 - Amazon Relational Database Service

MySQL에 Kerberos 인증 사용

사용자가 MySQL DB 인스턴스에 접속하려고 할 때 Kerberos 인증을 사용하여 사용자를 인증할 수 있습니다. DB 인스턴스는 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)와 함께 작동하여 Kerberos 인증을 활성화합니다. 사용자가 트러스팅 도메인에 가입된 MySQL DB 인스턴스로 인증하면 인증 요청이 전달됩니다. 전달된 요청은 AWS Directory Service에서 생성한 도메인 디렉터리로 이동합니다.

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

Amazon RDS는 다음 AWS 리전에서 MySQL DB 인스턴스에 대해 Kerberos 인증을 지원합니다.

  • US East (Ohio)

  • 미국 동부(버지니아 북부)

  • 미국 서부(캘리포니아 북부)

  • 미국 서부(오레곤)

  • 아시아 태평양(뭄바이)

  • 아시아 태평양(서울)

  • 아시아 태평양(싱가포르)

  • 아시아 태평양(시드니)

  • 아시아 태평양(도쿄)

  • 캐니다(중부)

  • 유럽(프랑크푸르트)

  • 유럽(아일랜드)

  • Europe (London)

  • Europe (Stockholm)

  • 남아메리카(상파울루)

  • China (Beijing)

  • China (Ningxia)

MySQL DB 인스턴스에 대해 Kerberos 인증을 설정하려면 다음과 같은 일반적인 단계를 완료하십시오(이후에 자세히 설명).

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

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

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

  3. Microsoft Active Directory 도구를 사용하여 AWS Managed Microsoft AD 디렉터리에서 사용자를 만들고 구성합니다. Active Directory에서 사용자를 생성하는 방법에 대한 자세한 내용은 AWS Directory Service 관리 안내서AWS 관리형 Microsoft AD에서 사용자 및 그룹 관리를 참조하세요.

  4. MySQL DB 인스턴스를 생성 또는 수정합니다. 생성 요청에 CLI 또는 RDS API를 사용하는 경우 Domain 파라미터를 사용해 도메인 식별자를 지정합니다. 디렉터리를 만들 때 생성된 d-* 식별자와 생성한 역할의 이름을 사용합니다.

    Kerberos 인증을 사용하도록 기존 MySQL DB 인스턴스를 수정하는 경우 DB 인스턴스에 대해 도메인 및 IAM 역할 파라미터를 설정합니다. 도메인 디렉터리와 동일한 VPC에서 DB 인스턴스를 찾습니다.

  5. Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. CREATE USERIDENTIFIED WITH 'auth_pam'을 사용하여 MySQL에서 사용자를 생성합니다. 이 방법으로 생성한 사용자는 Kerberos 인증을 사용하여 MySQL DB 인스턴스에 로그인할 수 있습니다.

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

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

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 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. [Next]를 선택합니다.

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

    VPC

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

    서브넷

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

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

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

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

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


          디렉터리 세부 정보 페이지

2단계: Amazon RDS에 사용할 IAM 역할 생성

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

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 MySQL에 사용할 수 없습니다.

선택 사항으로 관리형 IAM 정책인 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 도구에 포함되어 있습니다. 사용자는 디렉터리에 액세스할 수 있는 개별 사용자 또는 개체를 나타냅니다.

AWS Directory Service 디렉터리에서 사용자를 생성하려면 Microsoft Windows를 기반으로 Amazon EC2 인스턴스에 연결해야 합니다. 이 인스턴스는 AWS Directory Service 디렉터리의 멤버여야 하며 사용자를 생성할 수 있는 권한을 가진 사용자로 로그인해야 합니다. 자세한 내용은 AWS Managed Microsoft AD Directory Service 관리 가이드에서 AWS의 사용자 및 그룹 관리를 참조하세요.

4단계: MySQL DB 인스턴스 생성 또는 수정

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

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

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


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

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


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

CLI 또는 RDS API를 사용하여 DB 인스턴스를 디렉터리에 연결합니다. DB 인스턴스에서 생성된 도메인 디렉터리를 사용할 수 있으려면 다음과 같은 파라미터가 필요합니다.

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

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

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

Linux, macOS 또는 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 인스턴스를 재부팅하십시오.

5단계: Kerberos 인증 MySQL 로그인 생성

다른 DB 인스턴스의 경우와 마찬가지로 Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. DB 인스턴스는 AWS Managed Microsoft AD 도메인에 조인됩니다. 따라서 도메인 내 Microsoft Active Directory 사용자에서 MySQL 로그인 및 사용자를 프로비저닝할 수 있습니다. 데이터베이스 권한은 이러한 로그인에서 부여 및 취소되는 표준 MySQL 권한을 통해 관리됩니다.

Active Directory 사용자가 MySQL에서 인증을 하도록 허용할 수 있습니다. 이렇게 하려면 먼저 다른 DB 인스턴스의 경우와 마찬가지로 Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. 로그인한 후에는 다음과 같이 MySQL에서 플러그형 인증 모듈(PAM)을 사용하여 외부 인증된 사용자를 생성합니다.

CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';

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

중요

PAM 인증을 사용할 때는 클라이언트가 SSL/TLS 연결을 사용하는 것이 좋습니다. SSL/TLS 연결을 사용하지 않는 경우 암호가 일반 텍스트로 전송될 수도 있습니다. AD 사용자의 SSL/TLS 암호화된 연결을 필요로 하려면 다음 명령을 실행합니다.

UPDATE mysql.user SET ssl_type = 'any' WHERE ssl_type = '' AND PLUGIN = 'auth_pam' and USER = 'testuser'; FLUSH PRIVILEGES;

자세한 내용은 MySQL DB 인스턴스와 함께 SSL 사용 섹션을 참조하세요.

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

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

예를 들어 Amazon RDS API를 사용하여 다음을 수행할 수 있습니다.

  • 실패한 멤버십에 대해 Kerberos 인증 활성화를 다시 시도하려면 ModifyDBInstance API 작업을 사용하여 현재 멤버십의 디렉터리 ID를 지정합니다.

  • 멤버십에 대한 IAM 역할 이름을 업데이트하려면 ModifyDBInstance API 작업을 사용하고 현재 멤버십의 디렉터리 ID 및 새 IAM 역할을 지정합니다.

  • DB 인스턴스에서 Kerberos 인증을 비활성화하려면 ModifyDBInstance API 작업을 사용하여 none을 도메인 파라미터로 지정합니다.

  • 한 도메인에서 다른 도메인으로 DB 인스턴스를 이동하려면 ModifyDBInstance API 작업을 사용하여 새 도메인의 도메인 식별자를 도메인 파라미터로 지정합니다.

  • 각 DB 인스턴스의 멤버십을 나열하려면 DescribeDBInstances API 작업을 사용합니다.

도메인 멤버십 이해

DB 인스턴스를 생성하거나 수정하고 나면 해당 인스턴스는 도메인의 멤버가 됩니다. describe-db-instances CLI 명령을 실행하여 DB 인스턴스에 대한 도메인 멤버십의 상태를 확인할 수 있습니다. 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 인스턴스 modify 명령을 다시 발행하기 전에 구성을 확인하고 수정합니다.

  • disabling-kerberos - AWS에서 이 DB 인스턴스에 대한 Kerberos 인증 비활성화를 진행 중입니다.

네트워크 연결 문제 또는 잘못된 IAM 역할로 인해 Kerberos 인증 활성화 요청이 실패할 수 있습니다. 예를 들어 DB 인스턴스를 생성하거나 기존 DB 인스턴스를 수정하는데 Kerberos 인증을 활성화하려는 시도가 실패한다고 가정합니다. 이 경우 modify 명령을 다시 발행하거나 새로 생성된 DB 인스턴스를 수정하여 도메인에 조인합니다.

Kerberos 인증을 사용하여 MySQL에 연결

Kerberos 인증을 사용하여 MySQL에 연결하려면 Kerberos 인증 유형을 사용하여 로그인을 해야 합니다.

Kerberos 인증을 사용하여 연결할 수 있는 데이터베이스 사용자를 생성하려면 IDENTIFIED WITH 문에서 CREATE USER 절을 사용합니다. 지침은 5단계: Kerberos 인증 MySQL 로그인 생성 섹션을 참조하세요.

오류를 방지하려면 MariaDB mysql 클라이언트를 사용합니다. MariaDB 소프트웨어는 https://downloads.mariadb.org/에서 다운로드할 수 있습니다.

명령 프롬프트에서 MySQL DB 인스턴스와 연결된 엔드포인트 중 하나에 연결합니다. MySQL 데이터베이스 엔진 기반 DB 인스턴스에 연결하기의 일반 절차를 따르십시오. 암호를 입력하라는 메시지가 표시되면 해당 사용자 이름과 연결된 Kerberos 암호를 입력합니다.

MySQL DB 인스턴스 복원 및 도메인에 추가

MySQL DB 인스턴스에서 DB 스냅샷을 복원하거나 특정 시점으로 복원을 수행한 후 이를 도메인에 추가할 수 있습니다. DB 인스턴스가 복원된 후 4단계: MySQL DB 인스턴스 생성 또는 수정에 설명된 프로세스를 사용하여 DB 인스턴스를 도메인에 추가하도록 인스턴스를 수정합니다.

Kerberos 인증 MySQL 제한 사항

MySQL용 Kerberos 인증에는 다음과 같은 제한이 적용됩니다.

  • AWS Managed Microsoft AD만 지원됩니다. 하지만 RDS for MySQL DB 인스턴스에 가입하여 동일한 AWS 리전의 서로 다른 계정이 소유한 Managed Microsoft AD 도메인을 공유할 수 있습니다.

  • 다음과 같은 Amazon RDS for MySQL 버전에서는 Kerberos 인증이 지원됩니다.

    • Amazon RDS for MySQL 버전 8.0.13 및 버전 8.0 이상

    • Amazon RDS for MySQL 버전 5.7.24 및 버전 5.7 이상

  • 기능을 활성화한 후에는 DB 인스턴스를 재부팅해야 합니다.

  • 도메인 이름 길이는 61자를 초과할 수 없습니다.

  • Kerberos 인증과 IAM 인증을 동시에 활성화할 수 없습니다. MySQL DB 인스턴스에 대해 하나의 인증 방법을 선택하거나 다른 방법을 선택합니다.

  • 기능을 활성화한 후에는 DB 인스턴스 포트를 수정하지 마십시오.

  • 읽기 전용 복제본에는 Kerberos 인증을 사용하지 마십시오.

  • Kerberos 인증을 사용하는 MySQL DB 인스턴스에 대해 자동 마이너 버전 업그레이드를 설정한 경우 Kerberos 인증을 해제했다가 자동 업그레이드 후 다시 설정해야 합니다. 자동 마이너 버전 업그레이드에 대한 자세한 내용은 MySQL 마이너 버전 자동 업그레이드 섹션을 참조하세요.

  • 이 기능이 활성화된 DB 인스턴스를 삭제하려면 먼저 이 기능을 비활성화합니다. 이렇게 하려면 DB 인스턴스에 대해 modify-db-instance CLI 명령을 사용하고 none 파라미터에 대해 --domain를 지정합니다.

    CLI 또는 RDS API를 사용하여 이 기능이 활성화된 DB 인스턴스를 삭제하는 경우 지연이 발생할 수 있습니다.