AWS Secrets Manager에 대한 대체 사용자 교체 설정 - AWS Secrets Manager

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Secrets Manager에 대한 대체 사용자 교체 설정

이 자습서에서는 데이터베이스 자격 증명이 포함된 보안 암호에 대해 대체 사용자 교체를 설정하는 방법을 알아봅니다. 대체 사용자 교체는 Secrets Manager가 사용자를 복제한 다음 업데이트되는 사용자의 자격 증명을 대체하는 교체 전략입니다. 이 전략은 보안 암호의 고가용성이 필요한 경우 선택하는 것이 좋습니다. 대체 사용자 중 한 명이 업데이트되는 동안 다른 사용자에게 데이터베이스에 대한 현재 자격 증명이 있기 때문입니다. 자세한 내용은 교체 전략: 대체 사용자 단원을 참조하십시오.

대체 사용자 교체를 설정하려면 다음 두 개의 보안 암호가 필요합니다.

  • 교체하려는 자격 증명이 포함된 보안 암호 1개와

  • 관리자 자격 증명이 있는 두 번째 암호입니다.

    이 사용자는 첫 번째 사용자를 복제하고 첫 번째 사용자의 암호를 변경할 권한이 있습니다. 이 자습서에서는 Amazon RDS에서 관리자 사용자를 위해 이 암호를 생성하도록 합니다. Amazon RDS는 관리자 암호 교체도 관리합니다. 자세한 내용은 AWS Secrets Manager 보안 암호에 대한 관리형 교체 단원을 참조하십시오.

이 자습서의 첫 부분은 사실적인 환경을 설정하는 것입니다. 이 자습서에서는 교체 방식을 보여주기 위해 Amazon RDS MySQL 데이터베이스 예제를 사용합니다. 보안을 위해 데이터베이스는 인바운드 인터넷 액세스를 제한하는 VPC에 있습니다. 인터넷을 통해 로컬 컴퓨터에서 데이터베이스에 연결하려면 Bastion Host를 사용합니다. 이것은 데이터베이스에 연결할 수 있지만 인터넷으로부터의 SSH 연결도 허용하는 VPC 서버입니다. 이 자습서의 Bastion Host는 Amazon EC2 인스턴스이며, 인스턴스의 보안 그룹은 다른 유형의 연결을 차단합니다.

자습서를 마친 후에는 자습서에서 리소스를 정리하는 것이 좋습니다. 프로덕션 환경에서 리소스를 사용하지 마세요.

Secrets Manager 교체는 AWS Lambda 함수를 사용하여 보안 암호와 데이터베이스를 업데이트합니다. Lambda 함수 사용 비용에 대한 자세한 내용은 요금 섹션을 참조하세요.

권한

자습서 사전 조건으로 AWS 계정에 대한 관리 권한이 필요합니다. 프로덕션 설정에서는 각 단계에 대해 서로 다른 역할을 사용하는 것이 가장 좋습니다. 예를 들어 데이터베이스 관리자 권한이 있는 역할은 Amazon RDS 데이터베이스를 생성하고 네트워크 관리자 권한이 있는 역할은 VPC 및 보안 그룹을 설정합니다. 자습서 단계에서는 동일한 자격 증명을 계속 사용하는 것이 좋습니다.

프로덕션 환경에서 권한을 설정하는 방법에 대한 자세한 내용은 AWS Secrets Manager에 대한 인증 및 액세스 제어 섹션을 참조하세요.

사전 조건

사전 조건 A: Amazon VPC

이 단계에서는 Amazon RDS 데이터베이스와 Amazon EC2 인스턴스를 시작할 수 있는 VPC를 생성합니다. 나중 단계에서는 컴퓨터를 사용하여 인터넷을 통해 Bastion에 연결한 다음 데이터베이스에 연결하게 되므로 VPC에서 나가는 트래픽을 허용해야 합니다. 이를 위해 Amazon VPC는 VPC에 인터넷 게이트웨이를 연결하고 VPC 외부로 향하는 트래픽을 인터넷 게이트웨이로 보내도록 라우팅 테이블에 경로를 추가합니다.

VPC 내에서 Secrets Manager 엔드포인트와 Amazon RDS 엔드포인트를 생성합니다. 나중 단계에서 자동 교체를 설정하면 Secrets Manager가 데이터베이스에 액세스할 수 있도록 VPC 내에 Lambda 교체 함수를 생성합니다. 또한 Lambda 교체 함수는 Secrets Manager 를 호출하여 암호를 업데이트하고 Amazon RDS를 호출하여 데이터베이스 연결 정보를 가져옵니다. VPC 내에 엔드포인트를 생성하여 Lambda 함수에서 Secrets Manager 및 Amazon RDS로의 호출이 AWS 인프라를 벗어나지 못하도록 합니다. 대신 VPC 내의 엔드포인트로 라우팅됩니다.

VPC를 생성하려면
  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. VPC 생성을 선택합니다.

  3. Create VPC(VPC 생성) 페이지에서 VPC 등을 선택합니다.

  4. Name tag auto-generation(이름 태그 자동 생성)의 Auto-generate(자동 생성)에서 SecretsManagerTutorial을 입력합니다.

  5. DNS options(DNS 옵션)에서 Enable DNS hostnamesEnable DNS resolution을 모두 선택합니다.

  6. VPC 생성을 선택합니다.

VPC 내에 Secrets Manager 엔드포인트를 생성하려면
  1. Amazon VPC 콘솔의 Endpoints(엔드포인트)에서 Create Endpoint(엔드포인트 생성)를 선택합니다.

  2. Endpoint settings(엔드포인트 설정)에서 Name(이름)에 SecretsManagerTutorialEndpoint를 입력합니다.

  3. Services(서비스)에서 secretsmanager를 입력하여 목록을 필터링한 다음 AWS 리전에서 Secrets Manager 엔드포인트를 선택합니다. 예를 들어 미국 동부(버지니아 북부)에서 com.amazonaws.us-east-1.secretsmanager를 선택합니다.

  4. VPCvpc**** (SecretsManagerTutorial)를 선택합니다.

  5. 서브넷(Subnets)가용 영역(Availability Zones)을 모두 선택한 다음 각각에 대해 포함할 서브넷 ID(Subnet ID)를 선택합니다.

  6. IP address type(IP 주소 유형)에서 IPv4를 선택합니다.

  7. 보안 그룹(Security groups)에서 기본 보안 그룹을 선택합니다.

  8. 정책(Policy)에서 Full access를 선택합니다.

  9. 엔드포인트 생성(Create endpoint)을 선택합니다.

VPC 내에 Amazon RDS 엔드포인트를 생성하려면
  1. Amazon VPC 콘솔의 Endpoints(엔드포인트)에서 Create Endpoint(엔드포인트 생성)를 선택합니다.

  2. Endpoint Settings(엔드포인트 설정)에서 Name(이름)에 RDSTutorialEndpoint를 입력합니다.

  3. Services(서비스)에서 rds를 입력하여 목록을 필터링한 다음 AWS 리전에서 Amazon RDS 엔드포인트를 선택합니다. 예를 들어 미국 동부(버지니아 북부)에서 com.amazonaws.us-east-1.rds를 선택합니다.

  4. VPCvpc**** (SecretsManagerTutorial)를 선택합니다.

  5. 서브넷(Subnets)가용 영역(Availability Zones)을 모두 선택한 다음 각각에 대해 포함할 서브넷 ID(Subnet ID)를 선택합니다.

  6. IP address type(IP 주소 유형)에서 IPv4를 선택합니다.

  7. 보안 그룹(Security groups)에서 기본 보안 그룹을 선택합니다.

  8. 정책(Policy)에서 Full access를 선택합니다.

  9. 엔드포인트 생성(Create endpoint)을 선택합니다.

사전 조건 B: Amazon EC2 인스턴스

나중 단계에서 생성하는 Amazon RDS 데이터베이스는 VPC에 있게 되므로 여기에 액세스하려면 Bastion Host가 필요합니다. Bastion Host는 VPC에도 있지만 나중 단계에서 SSH를 사용하여 로컬 컴퓨터가 Bastion Host에 연결할 수 있도록 보안 그룹을 구성합니다.

Bastion Host에 대한 EC2 인스턴스를 생성하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 인스턴스(Instances)를 선택한 다음 인스턴스 시작(Launch Instances)을 선택합니다.

  3. Name and tags(이름 및 태그) 아래의 Name(이름)에 SecretsManagerTutorialInstance을 입력하세요.

  4. Application and OS Images(애플리케이션 및 OS 이미지)에서 기본값 Amazon Linux 2 AMI (HMV) Kernel 5.10을 유지합니다.

  5. Instance type(인스턴스 유형)에서 기본값 t2.micro를 유지합니다.

  6. Key pair(키 페어)에서 Create key pair(키 페어 생성)를 선택합니다.

    Create key pair(키 페어 생성) 대화 상자에서 Key pair name(키 페어 이름)에 SecretsManagerTutorialKeyPair를 입력한 다음 Create key pair(키 페어 생성)를 선택합니다.

    키 페어가 자동으로 다운로드됩니다.

  7. Network settings(네트워크 설정)에서 Edit(편집)를 선택하고 다음을 수행합니다.

    1. VPCvpc-**** SecretsManagerTutorial를 선택합니다.

    2. 퍼블릭 IP 자동 할당(Auto-assign Public IP)에서 Enable을 선택합니다.

    3. Firewall(방화벽)에서 Select existing security group(기존 보안 그룹 선택)을 선택합니다.

    4. Common security groups(일반 보안 그룹)에서 default를 선택합니다.

  8. 인스턴스 시작을 선택합니다.

사전 조건 C: Amazon RDS 데이터베이스 및 관리자 자격 증명을 위한 Secrets Manager 암호

이 단계에서는 Amazon RDS MySQL 데이터베이스를 생성하고 Amazon RDS가 관리자 자격 증명을 포함할 암호를 생성하도록 구성합니다. 그러면 Amazon RDS에서 관리자 암호의 교체를 자동으로 관리합니다. 자세한 내용은 관리형 교체 단원을 참조하십시오.

데이터베이스 생성 과정의 일환으로 이전 단계에서 생성한 Bastion Host를 지정합니다. 그러면 Amazon RDS에서 데이터베이스와 인스턴스가 서로 액세스할 수 있도록 보안 그룹을 설정합니다. 로컬 컴퓨터도 연결할 수 있도록 인스턴스에 연결된 보안 그룹에 규칙을 추가합니다.

관리자 자격 증명이 포함된 Secrets Manager 암호를 사용하여 Amazon RDS 데이터베이스를 생성하려면
  1. Amazon RDS 콘솔에서 Create database(데이터베이스 생성)를 선택합니다.

  2. Engine options(엔진 옵션) 섹션의 Engine type(엔진 유형)에서 MySQL을 선택합니다.

  3. Templates(템플릿) 섹션에서 Free tier를 선택합니다.

  4. Settings(설정) 섹션에서 다음을 수행합니다.

    1. DB instance identifier(DB 인스턴스 식별자)에 SecretsManagerTutorial을 입력합니다.

    2. Credential settings(자격 증명 설정)에서 Manage master credentials in AWS Secrets Manager를 선택합니다.

  5. Connectivity(연결성)의 Computer resource(컴퓨터 리소스)에서 Connect to an EC2 computer resource(EC2 컴퓨터 리소스에 연결)를 선택한 다음 EC2 Instance(EC2 인스턴스)에서 SecretsManagerTutorialInstance를 선택합니다.

  6. 데이터베이스 생성를 선택합니다.

사전 조건 D: 로컬 컴퓨터가 EC2 인스턴스에 연결하도록 허용

이 단계에서는 사전 조건 B에서 생성한 EC2 인스턴스를 구성하여 로컬 컴퓨터가 해당 인스턴스에 연결할 수 있도록 합니다. 이렇게 하려면 컴퓨터의 IP 주소가 SSH와 연결할 수 있도록 하는 규칙을 포함하도록 Amazon RDS가 사전 조건 C에 추가한 보안 그룹을 편집해야 합니다. 이 규칙을 사용하면 로컬 컴퓨터(현재 IP 주소로 식별됨)가 인터넷을 통해 SSH를 사용하여 Bastion Host에 연결할 수 있습니다.

로컬 컴퓨터가 EC2 인스턴스에 연결하도록 허용하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. EC2 인스턴스 SecretsManagerTutorialInstanceSecurity(보안) 탭에 있는 Security groups(보안 그룹)에서 sg-*** (ec2-rds-X)를 선택합니다.

  3. Input rules(입력 규칙)에서 Edit inbound rules(인바운드 규칙 편집)를 선택합니다.

  4. Add rule(규칙 추가)을 선택하고 규칙에 대해 다음을 수행합니다.

    1. 유형(Type)에서 SSH를 선택합니다.

    2. Source type(소스 유형)에 My IP를 선택합니다.

1단계: Amazon RDS 데이터베이스 사용자 생성

먼저 보안 암호에 자격 증명을 저장할 사용자가 필요합니다. 사용자를 생성하려면 관리자 자격 증명으로 Amazon RDS 데이터베이스에 로그인합니다. 간소화를 위해 자습서에서는 데이터베이스에 대한 전체 권한을 가진 사용자를 생성합니다. 프로덕션 환경에서 이는 일반적이지 않으므로 최소 권한 원칙을 따르는 것이 좋습니다.

데이터베이스에 연결하려면 MySQL 클라이언트 도구를 사용합니다. 이 자습서에서는 GUI 기반 애플리케이션인 MySQL Workbench를 사용합니다. MySQL Workbench를 설치하려면 MySQL Workbench 다운로드를 참조하세요.

데이터베이스에 연결하려면 MySQL Workbench에서 연결 구성을 생성합니다. 구성을 위해 Amazon EC2 및 Amazon RDS의 일부 정보가 필요합니다.

MySQL Workbench에서 데이터베이스 연결을 생성하려면
  1. MySQL Workbench에서 MySQL 연결(MySQL Connections) 옆에 있는 (+) 버튼을 선택합니다.

  2. 새 연결 설정(Setup New Connection) 대화 상자에서 다음을 수행합니다.

    1. 연결 이름(Connection Name)SecretsManagerTutorial을 입력합니다.

    2. 연결 방법(Connection Method)에서 Standard TCP/IP over SSH를 선택합니다.

    3. 파라미터(Parameters) 탭에서 다음을 수행합니다.

      1. SSH 호스트 이름(SSH Hostname)에 Amazon EC2 인스턴스의 퍼블릭 IP 주소를 입력합니다.

        인스턴스 SecretsManagerTutorialInstance를 선택하여 Amazon EC2 콘솔에서 IP 주소를 찾을 수 있습니다. Public IPv4 DNS 아래에 IP 주소를 복사합니다.

      2. SSH 사용자 이름(SSH Username)ec2-user를 입력합니다.

      3. SSH 키파일(SSH Keyfile)에서 이전 사전 조건에서 다운로드한 키 페어 파일 SecretsManagerTutorialKeyPair.pem을 선택합니다.

      4. MySQL 호스트 이름(MySQL Hostname)에 Amazon RDS 엔드포인트 주소를 입력합니다.

        데이터베이스 인스턴스 secretsmanagertutorialdb를 선택하여 Amazon RDS 콘솔에서 엔드포인트 주소를 찾을 수 있습니다. 엔드포인트(Endpoint) 아래에 주소를 복사합니다.

      5. 사용자 이름(Username)admin을 입력합니다.

    4. 확인(OK)을 선택합니다.

관리자 암호를 검색하려면
  1. Amazon RDS 콘솔에서 데이터베이스로 이동합니다.

  2. Configuration(구성) 탭의 Master Credentials ARN(마스터 자격 증명 ARN)에서 Manage in Secrets Manager(Secrets Manager에서 관리)를 선택합니다.

    Secrets Manager 콘솔이 열립니다.

  3. 보안 암호 세부 정보 페이지에서 Retrieve secret value(보안 암호 값 검색)를 선택합니다.

  4. 암호가 Secret value(암호 값) 섹션에 표시됩니다.

데이터베이스 사용자를 생성하려면
  1. MySQL Workbench에서 SecretsManagerTutorial 연결을 선택합니다.

  2. 암호에서 검색한 관리자 암호를 입력합니다.

  3. MySQL Workbench의 Query(쿼리) 창에서 다음 명령(강력한 암호 포함)을 입력한 다음 Execute(실행)를 선택합니다. 교체 함수는 SELECT를 사용하여 업데이트된 보안 암호를 테스트하므로, appuser에는 최소한 해당 권한이 있어야 합니다.

    CREATE DATABASE myDB; CREATE USER 'appuser'@'%' IDENTIFIED BY 'EXAMPLE-PASSWORD'; GRANT SELECT ON myDB . * TO 'appuser'@'%';

    출력(Output) 창에서 명령이 성공한 것을 볼 수 있습니다.

2단계: 사용자 자격 증명에 대한 보안 암호 생성

다음으로, 방금 생성한 사용자의 자격 증명을 저장하는 보안 암호를 생성합니다. 이것이 교체하게 될 보안 암호입니다. 자동 교체를 설정하고 대체 사용자 전략을 나타내려면 첫 번째 사용자의 암호를 변경할 권한이 있는 별도의 슈퍼 사용자 보안 암호를 선택합니다.

  1. https://console.aws.amazon.com/secretsmanager/에서 Secrets Manager 콘솔을 엽니다.

  2. Store a new secret(새 보안 암호 저장)을 선택합니다.

  3. 보안 암호 유형 선택(Choose secret type) 페이지에서 다음을 수행합니다.

    1. 보안 암호 유형(Secret type)에서 Amazon RDS 데이터베이스에 대한 자격 증명(Credentials for Amazon RDS database)을 선택합니다.

    2. 자격 증명(Credentials)에서 사용자 이름 appuser와 MySQL Workbench를 사용하여 생성한 데이터베이스 사용자에 대해 입력한 암호를 입력합니다.

    3. 데이터베이스(Database)에서 secretsmanagertutorialdb를 선택합니다.

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

  4. 보안 암호 구성(Configure secret) 페이지에서 보안 암호 이름(Secret name)SecretsManagerTutorialAppuser를 입력한 후 다음(Next)을 선택합니다.

  5. 교체 구성(Configure rotation) 페이지에서 다음을 수행합니다.

    1. Automatic rotation(자동 교체)을 켭니다.

    2. 교체 일정(Rotation schedule)에서 일(Days): 2일, 기간(Duration): 2h의 일정을 설정합니다. 즉시 교체(Rotate immediately)를 선택합니다.

    3. 교체 함수(Rotation function)에서 교체 함수 생성(Create a rotation function)을 선택한 다음 함수 이름에 tutorial-alternating-users-rotation을 입력합니다.

    4. 교체 전략에서 대체 사용자를 선택한 다음 관리자 보안 인증 정보 암호에서 이 자습서에서 생성한 데이터베이스의 이름 secretsmanagertutorial을 포함하는 설명이 있는(예: Secret associated with primary RDS DB instance: arn:aws:rds:Region:AccountId:db:secretsmanagertutorial) rds!cluster...라는 이름의 암호를 선택합니다.

    5. 다음(Next)을 선택합니다.

  6. 검토(Review) 페이지에서 시작(Store)을 선택합니다.

    Secrets Manager 보안 암호 세부 정보 페이지로 돌아갑니다. 페이지 상단에서 교체 구성 상태를 확인할 수 있습니다. Secrets Manager는 CloudFormation을 사용하여 Lambda 교체 함수 및 Lambda 함수를 실행하는 실행 역할과 같은 리소스를 생성합니다. CloudFormation이 완료되면 배너가 보안 암호 교체 예약됨(Secret scheduled for rotation)으로 변경됩니다. 첫 번째 교체가 완료되었습니다.

3단계: 교체된 보안 암호 테스트

이제 보안 암호가 교체되었으므로 보안 암호에 유효한 새 자격 증명이 포함되어 있는지 확인할 수 있습니다. 보안 암호의 암호가 원래 자격 증명에서 변경되었습니다.

보안 암호에서 새 암호를 검색하려면
  1. https://console.aws.amazon.com/secretsmanager/에서 Secrets Manager 콘솔을 엽니다.

  2. 보안 암호(Secrets)를 선택한 다음 보안 암호 SecretsManagerTutorialAppuser를 선택합니다.

  3. 보안 암호 세부 정보(Secret details) 페이지를 아래로 스크롤하고 보안 암호 값 검색(Retrieve secret value)을 선택합니다.

  4. 키/값(Key/value) 테이블에서 password에 대한 보안 암호 값(Secret value)을 복사합니다.

자격 증명을 테스트하려면
  1. MySQL Workbench에서 SecretsManagerTutorial 연결을 마우스 오른쪽 버튼으로 클릭한 다음 연결 편집(Edit Connection)을 선택합니다.

  2. 서버 연결 관리(Manage Server Connections) 대화 상자에서 사용자 이름(Username)appuser를 입력한 다음 닫기(Close)를 선택합니다.

  3. MySQL Workbench로 돌아가서 SecretsManagerTutorial 연결을 선택합니다.

  4. SSH 연결 열기(Open SSH Connection) 대화 상자에서 암호(Password)에 보안 암호에서 검색한 암호를 붙여넣은 다음 확인(OK)을 선택합니다.

    자격 증명이 유효한 경우 MySQL Workbench가 데이터베이스의 디자인 페이지에 열립니다.

이는 보안 암호 교체가 성공했음을 나타냅니다. 보안 암호의 자격 증명이 업데이트되었으며 데이터베이스에 연결할 수 있는 유효한 암호입니다.

4단계: 리소스 정리

다른 교체 전략인 single user rotation(단일 사용자 교체)을 시도하려는 경우 리소스 정리를 건너뛰고 AWS Secrets Manager에 대한 단일 사용자 교체 설정로 이동합니다.

그렇지 않으면 잠재적 요금이 부과되지 않도록 하고 인터넷에 액세스할 수 있는 EC2 인스턴스를 제거하기 위해 이 자습서에서 생성한 다음 리소스와 그 사전 조건을 삭제합니다.

  • Amazon RDS 데이터베이스 인스턴스. 자세한 내용은 Amazon RDS 사용 설명서DB 인스턴스 삭제를 참조하세요.

  • Amazon EC2 인스턴스. 자세한 내용은 Amazon EC2 사용 설명서인스턴스 종료를 참조하세요.

  • Secrets Manager 보안 암호 SecretsManagerTutorialAppuser 지침은 AWS Secrets Manager 보안 암호 삭제 단원을 참조하십시오.

  • Secrets Manager 엔드포인트. 자세한 내용은 AWS PrivateLink 설명서VPC 엔드포인트 삭제를 참조하세요.

  • VPC 엔드포인트. 자세한 내용은 AWS PrivateLink 설명서VPC 삭제를 참조하세요.

다음 단계