자습서: Secrets Manager를 사용해 중요한 데이터 지정 - Amazon Elastic Container Service

자습서: Secrets Manager를 사용해 중요한 데이터 지정

Amazon ECS를 사용하면 AWS Secrets Manager 암호에 민감한 데이터를 저장하여 컨테이너에 민감한 데이터를 삽입한 다음 컨테이너 정의에서 참조할 수 있습니다. 자세한 정보는 민감한 데이터를 컨테이너에 전달 섹션을 참조하세요.

다음 자습서에서는 Secrets Manager 보안 암호를 생성하는 방법과 Amazon ECS 태스크 정의에 보안 암호를 참조하고 컨테이너 내에서 내용이 보호되고 있음을 표시하는 환경 변수를 쿼리하여 작동 여부를 확인하는 방법을 설명합니다.

사전 조건

이 자습서에서는 다음 사전 조건이 충족되었다고 가정합니다.

  • Amazon ECS 사용 설정의 단계가 완료되었습니다.

  • AWS 사용자에게는 설명한 Secrets Manager 및 Amazon ECS 리소스를 생성하는 데 필요한 IAM 권한이 있습니다.

1단계: Secrets Manager 보안 암호 생성

Secrets Manager 콘솔을 사용하여 민감한 데이터에 대한 암호를 생성할 수 있습니다. 이 자습서에서는 이후 컨테이너에서 참조할 기본 사용자 이름 및 암호를 저장하는 기본 보안을 생성합니다. 자세한 정보는 AWS Secrets Manager 사용 설명서기본 암호 생성을 참조하세요.

기본 암호를 생성하는 방법

Secrets Manager를 사용하여 민감한 데이터에 대한 암호를 생성합니다.

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

  2. 새 비밀 저장을 선택합니다.

  3. 보안 암호 유형 선택(Select secret type)에서 다른 유형의 보안 암호(Other type of secrets)를 선택합니다.

  4. 보안 암호에 저장될 키/값 페어를 지정(Specify the key/value pairs to be stored in this secret)에서 일반 텍스트(Plaintext) 탭을 선택하고 기존 텍스트를 다음 텍스트로 변경합니다. 여기서 지정하는 텍스트 값은 자습서 종료 시 사용할 컨테이너 내의 환경 변수 값이 됩니다.

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

  6. 보안 암호 이름(Secret name)username_value를 입력하고 다음(Next)을 선택합니다. 여기서 지정하는 보안 암호 이름은 자습서 종료 시 사용할 컨테이너 내의 환경 변수 값이 됩니다.

  7. 자동 교체 구성(Configure automatic rotation)자동 교체 사용 안 함(Disable automatic rotation)으로 둔 채 다음(Next)을 선택합니다.

  8. 설정을 검토한 다음 저장(Store)을 선택하여 Secrets Manager에 새 보안 암호로 입력한 모든 항목을 저장합니다.

  9. 방금 생성한 보안 암호를 선택하고 보안 암호 ARN(Secret ARN)을 저장하여 다음 단계의 작업 실행 IAM 정책 및 태스크 정의에 참조합니다.

2단계: 작업 실행 IAM 역할 업데이트

Amazon ECS가 Secrets Manager 보안 암호에서 중요한 데이터를 불러오려면 Amazon ECS 작업 실행 역할이 있어야 하며 태스크 정의에서 이를 참조해야 합니다. 이렇게 하면 컨테이너 에이전트가 필요한 Secrets Manager 리소스를 가져올 수 있습니다. 작업 실행 IAM 역할을 생성하지 않은 경우 Amazon ECS 태스크 실행 IAM 역할 섹션을 참조하세요.

다음 단계는 작업 실행 IAM 역할을 생성하고 적절히 구성했다고 간주합니다.

작업 실행 IAM 역할을 업데이트하려면

IAM 콘솔을 사용해 작업 실행 역할에 필요한 권한을 업데이트합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할(Roles)을 선택합니다.

  3. 역할 목록에서 ecsTaskExecutionRole을 검색하고 선택합니다.

  4. 권한(Permissions)에서 인라인 정책 추가(Add inline policy)를 선택합니다.

  5. JSON 탭을 선택하고 다음 JSON 문자열을 지정하여 1단계에서 생성한 Secrets Manager 보안 암호의 전체 ARN을 지정했는지 확인합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K" ] } ] }
  6. 정책 검토(Review policy)를 선택합니다. 이름의 경우, ECSSecretsTutorial를 입력한 후 정책 생성(Create policy)을 선택합니다.

3단계: Amazon ECS 태스크 정의 생성

Amazon ECS 콘솔을 사용하면 Secrets Manager 보안 암호를 참조하는 태스크 정의를 생성할 수 있습니다.

암호를 지정하는 태스크 정의를 생성하려면

IAM 콘솔을 사용해 작업 실행 역할에 필요한 권한을 업데이트합니다.

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 탐색 창에서 태스크 정의(Task Definitions), 새 태스크 정의 생성(Create new Task Definition)을 차례대로 선택합니다.

  3. 시작 유형 호환성 선택 페이지에서 EC2, 다음 단계(Next step)를 선택합니다.

  4. JSON을 통한 구성(Configure via JSON)을 선택하고 다음 태스크 정의 JSON 문자열을 입력하여 1단계에서 생성한 Secrets Manager 보안 암호의 전체 ARN과 2단계에서 업데이트한 작업 실행 IAM 역할을 지정했는지 확인합니다. 저장(Save)을 선택합니다.

    { "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "entryPoint": [ "sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "cpu": 10, "secrets": [ { "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }
  5. 설정을 검토한 다음 생성(Create)을 선택합니다.

4단계: Amazon ECS 클러스터 생성

Amazon ECS 콘솔을 사용해 태스크를 실행할 컨테이너 인스턴스가 있는 클러스터를 생성합니다. 기존 클러스터에 자습서를 위한 태스크 정의 인스턴스를 실행할 수 있는 가용 리소스가 있는 컨테이너 인스턴스가 적어도 하나 등록된 경우에는 다음 단계로 이동합니다.

이 자습서에서는 Amazon ECS 최적화 Amazon Linux 2 AMI를 사용하여 하나의 t2.micro 컨테이너 인스턴스로 클러스터를 생성합니다.

클러스터를 생성하려면

Amazon ECS 콘솔을 사용해 클러스터를 생성하고 컨테이너 인스턴스 하나를 등록합니다.

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 탐색 모음에서 생성한 Secrets Manager 보안 암호 및 Amazon ECS 태스크 정의가 모두 포함된 리전을 선택합니다.

  3. 탐색 창에서 클러스터(Clusters)를 선택합니다.

  4. 클러스터 페이지에서 클러스터 생성(Create Cluster)을 선택합니다.

  5. EC2 인스턴스 유형(EC2 instance type)에서 t2.micro를 선택합니다.

  6. 키 페어(Key pair)에서 컨테이너 인스턴스에 추가할 키 페어를 선택합니다.

    중요

    자습서를 완료하려면 키 페어가 필요하므로 키 페어를 생성하지 않은 경우 EC2 콘솔로 이동하는 다음 링크를 사용해 키 페어를 생성합니다.

  7. 다른 필드를 기본값으로 그대로 두고 생성(Create)을 선택합니다.

5단계: Amazon ECS 작업 실행

Amazon ECS 콘솔을 사용해 생성한 태스크 정의로 태스크를 실행할 수 있습니다. 이 자습서에서는 이전 단계에서 생성한 클러스터에서 EC2 시작 유형을 사용해 태스크를 실행합니다.

태스크를 실행하려면

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 탐색 창에서 태스크 정의(Task Definitions)를 선택한 후 생성한 esc-secrets-tutorial 태스크 정의를 선택합니다.

  3. 최신 버전의 태스크 정의를 선택하고 작업(Actions), 작업 실행(Run Task)을 선택합니다.

  4. 시작 유형(Launch Type)EC2로 선택합니다.

  5. 클러스터(Cluster)에서 이전 단계에서 생성한 esc-secrets-tutorial 클러스터를 선택합니다.

  6. 작업 태그 구성(Task tagging configuration)에서 ECS 관리형 태그 활성화(Enable ECS managed tags)를 해제합니다. 이 자습서에서는 필요하지 않습니다.

  7. 작업 정보를 검토하고 작업 실행(Run Task)을 선택합니다.

    참고

    작업이 PENDING에서 STOPPED로 이동하거나 PENDING 상태를 표시한 다음 나열된 작업에서 사라지면 작업이 오류로 인해 중지된 것일 수 있습니다. 자세한 정보는 문제 해결 섹션의 오류로 인해 중지된 작업 확인를 참조하세요.

6단계: 확인

모든 단계가 성공적으로 완료되었으며 다음 단계를 따라 컨테이너 내에서 생성한 환경 변수가 잘 생성되었는지 확인합니다.

생성한 환경 변수 확인

  1. 컨테이너 인스턴스의 퍼블릭 IP 또는 DNS 주소를 찾습니다.

    1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

    2. 컨테이너 인스턴스를 호스팅하는 ecs-secrets-tutorial 클러스터를 선택합니다.

    3. 클러스터 페이지에서 ECS 인스턴스(ECS Instances)를 선택합니다.

    4. 컨테이너 인스턴스(Container Instance) 열에서 연결할 컨테이너 인스턴스를 선택합니다.

    5. 컨테이너 인스턴스 페이지에서 인스턴스의 퍼블릭 IP(Public IP) 또는 퍼블릭 DNS(Public DNS)를 기록합니다.

  2. Mac OS 또는 Linux 컴퓨터를 사용 중인 경우, 다음 명령을 사용하여 인스턴스에 연결해 프라이빗 키 경로와 인스턴스의 퍼블릭 주소를 대체합니다.

    $ ssh -i /path/to/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

    Windows 컴퓨터 사용에 대한 자세한 정보는 Linux 인스턴스용 Amazon EC2 사용 설명서PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결을 참조하세요.

    중요

    인스턴스 연결 문제에 대한 자세한 정보는 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스에 연결 문제 해결을 참조하세요.

  3. 인스턴스에서 실행되는 컨테이너 목록을 표시합니다. ecs-secrets-tutorial 컨테이너의 컨테이너 ID를 기록합니다.

    docker ps
  4. 이전 단계의 결과로 얻은 컨테이너 ID를 사용해 ecs-secrets-tutorial 컨테이너에 연결합니다.

    docker exec -it container_ID /bin/bash
  5. echo 명령을 사용해 환경 변수 값을 프린트합니다.

    echo $username_value

    자습서가 성공했다면 다음 결과가 표시되어야 합니다.

    password_value
    참고

    또한 env(또는 printenv) 명령을 사용해 컨테이너 내의 모든 환경 변수 목록을 표시할 수 있습니다.

7단계: 정리

이 자습서로 완료를 한 후에 사용하지 않는 리소스에 대해 요금이 발생하는 것을 방지하기 위해 연결된 리소스를 정리해야 합니다.

리소스 정리

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 생성한 ecs-secrets-tutorial 클러스터(ecs-secrets-tutorial cluster)를 선택합니다.

  3. 클러스터 페이지에서 클러스터 삭제(Delete Cluster)를 선택합니다.

  4. 클러스터 삭제 확인을 입력하고 삭제(Delete)를 선택합니다. 이 과정에는 몇 분이 소요되지만 모든 Amazon ECS 클러스터 리소스를 정리합니다.

  5. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  6. 탐색 창에서 역할(Roles)을 선택합니다.

  7. 역할 목록에서 ecsTaskExecutionRole을 검색하고 선택합니다.

  8. 권한(Permissions)을 선택한 다음 ECSSecretsTutorial 옆에 있는 X를 선택합니다. 제거(Remove)를 선택해 인라인 정책 삭제를 확인합니다.

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

  10. 생성한 username_value 보안 암호를 선택하고 작업(Actions), 보안 암호 삭제(Delete secret)를 선택합니다.