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 사용 설명서기본 암호 생성을 참조하세요.

이 보안 암호에 저장되는 키/값 페어는 자습서 마지막에 있는 컨테이너의 환경 변수 값입니다.

Secret ARN(보안 암호 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" ] } ] }
  6. 정책 검토(Review policy)를 선택합니다. 이름의 경우, ECSSecretsTutorial를 입력한 후 정책 생성(Create policy)을 선택합니다.

3단계: Amazon ECS 작업 정의 생성

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

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

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

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

  2. 탐색 창에서 작업 정의를 선택합니다.

  3. 새 태스크 정의 생성(Create new task definition), JSON으로 새 태스크 정의 생성(Create new task definition with JSON)을 선택합니다.

  4. JSON을 편집기 상자에 다음 작업 정의 JSON 문자열을 입력하여 1단계에서 생성한 Secrets Manager 보안 암호의 전체 ARN과 2단계에서 업데이트한 작업 실행 IAM 역할을 지정했는지 확인합니다. 저장을 선택합니다.

  5. { "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", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }
  6. 생성을 선택하세요.

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

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

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

EC2 시작 유형의 클러스터를 생성하는 방법에 대한 자세한 내용은 콘솔을 사용하여 Amazon EC2 시작 유형에 대한 클러스터 생성 섹션을 참조하세요.

5단계: Amazon ECS 작업 실행

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

작업을 실행하는 방법에 대한 정보는 애플리케이션을 Amazon ECS 태스크로 실행 섹션을 참조하세요.

6단계: 확인

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

생성한 환경 변수 확인
  1. 컨테이너 인스턴스의 퍼블릭 IP 또는 DNS 주소를 찾습니다.

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

    2. 탐색 창에서 Clusters(클러스터)를 선택한 다음 생성한 클러스터를 선택합니다.

    3. Infrastructure(인프라)를 선택한 다음 컨테이너 인스턴스를 선택합니다.

    4. 인스턴스로 인스턴스의 Public IP(퍼블릭 IP) 또는 Public DNS(퍼블릭 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/v2에서 콘솔을 엽니다.

  2. 탐색 창에서 클러스터를 선택합니다.

  3. 클러스터(Clusters) 페이지에서 클러스터를 선택합니다.

  4. 클러스터 삭제(Delete Cluster)를 선택합니다.

  5. 확인 상자에 delete cluster name을 입력한 다음 삭제를 선택합니다.

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

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

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

  9. 권한을 선택한 다음 ECS 옆의 X를 선택합니다. SecretsTutorial 제거를 선택합니다.

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

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