Amazon ECS에서 Secrets Manager 시크릿을 사용해 민감한 데이터 지정하기

Amazon ECS에서 Secrets Manager 시크릿을 사용해 민감한 데이터 지정하기

Amazon ECS를 사용하면 민감한 데이터를 AWS Secrets Manager 시크릿에 저장한 다음 컨테이너 정의에서 참조해 컨테이너에 주입할 수 있어요. 자세한 내용은 Pass sensitive data to an Amazon ECS container 를 참고해 주세요.

출처: 문서

본문

이 튜토리얼에서는 Secrets Manager 시크릿을 만들고, Amazon ECS 태스크 정의에서 시크릿을 참조하고, 컨테이너 내부의 환경 변수를 조회해 시크릿 내용이 표시되는지 확인하는 방법을 배워요.

전제 조건 이 튜토리얼에서는 다음 전제 조건이 완료되었다고 가정해요.

  • Set up to use Amazon ECS 의 단계가 완료되었음.
  • 사용자가 Secrets Manager 및 Amazon ECS 리소스를 만들 수 있는 필요한 IAM 권한을 보유하고 있음.

1단계: Secrets Manager 시크릿 만들기 Secrets Manager 콘솔을 사용해 민감한 데이터용 시크릿을 만들 수 있어요. 이 튜토리얼에서는 나중에 컨테이너에서 참조할 사용자 이름과 비밀번호를 저장하는 기본 시크릿을 만들 거예요. 자세한 내용은 AWS Secrets Manager User Guide 의 Create an AWS Secrets Manager secret 을 참고해 주세요. 이 시크릿에 저장할 키/값 쌍은 튜토리얼이 끝날 때 컨테이너의 환경 변수 값이 돼요. 이후 단계에서 태스크 실행 IAM 정책과 태스크 정의에서 참조할 수 있도록 Secret ARN 을 저장해 주세요.

2단계: 태스크 실행 역할에 시크릿 권한 추가 Amazon ECS가 Secrets Manager 시크릿에서 민감한 데이터를 검색하려면 태스크 실행 역할에 시크릿 권한이 있어야 해요. 자세한 내용은 Secrets Manager or Systems Manager permissions 을 참고해 주세요.

3단계: 태스크 정의 만들기 Amazon ECS 콘솔을 사용해 Secrets Manager 시크릿을 참조하는 태스크 정의를 만들 수 있어요.

시크릿을 지정하는 태스크 정의를 만들려면

  1. IAM 콘솔을 사용해 태스크 실행 역할을 필요한 권한으로 업데이트합니다.
  2. https://console.aws.amazon.com/ecs/v2 에서 콘솔을 엽니다.
  3. 탐색 창에서 Task definitions 를 선택합니다.
  4. Create new task definition , Create new task definition with JSON 을 선택합니다.
  5. JSON 편집기 상자에 다음 태스크 정의 JSON 텍스트를 입력합니다. 1단계에서 만든 Secrets Manager 시크릿의 전체 ARN과 2단계에서 업데이트한 태스크 실행 역할을 지정해야 합니다. 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",
                        "name": "username_value"
                    }
                ],
                "memory": 300,
                "image": "public.ecr.aws/docker/library/httpd:2.4",
                "essential": true,
                "name": "ecs-secrets-container"
            }
        ],
        "family": "ecs-secrets-tutorial"
    }
    
  6. Create 를 선택합니다.

4단계: 클러스터 만들기 Amazon ECS 콘솔을 사용해 태스크를 실행할 컨테이너 인스턴스가 포함된 클러스터를 만들 수 있어요. 이 튜토리얼을 위해 만든 태스크 정의 인스턴스 하나를 실행할 수 있는 사용 가능한 리소스가 있는 컨테이너 인스턴스가 하나 이상 등록된 기존 클러스터가 있다면 다음 단계로 건너뛸 수 있어요. 이 튜토리얼에서는 Amazon ECS-optimized Amazon Linux 2 AMI를 사용하는 t2.micro 컨테이너 인스턴스 하나로 클러스터를 만들 거예요. EC2용 클러스터를 만드는 방법에 대한 정보는 Creating an Amazon ECS cluster for Amazon EC2 workloads 를 참고해 주세요.

5단계: 태스크 실행 Amazon ECS 콘솔을 사용해 만든 태스크 정의로 태스크를 실행할 수 있어요. 이 튜토리얼에서는 이전 단계에서 만든 클러스터를 사용해 EC2로 태스크를 실행할 거예요. 태스크를 실행하는 방법은 Running an application as an Amazon ECS task 를 참고해 주세요.

6단계: 확인 다음 단계를 사용해 모든 단계가 성공적으로 완료되었고 환경 변수가 컨테이너에 제대로 생성되었는지 확인할 수 있어요.

환경 변수가 생성되었는지 확인하려면

  1. 컨테이너 인스턴스의 퍼블릭 IP 또는 DNS 주소를 찾습니다.
  2. https://console.aws.amazon.com/ecs/v2 에서 콘솔을 엽니다.
  3. 탐색 창에서 Clusters 를 선택한 다음 만든 클러스터를 선택합니다.
  4. Infrastructure 를 선택한 다음 컨테이너 인스턴스를 선택합니다.
  5. 인스턴스의 Public IP 또는 Public DNS 를 기록해 둡니다.
  6. macOS 또는 Linux 컴퓨터를 사용한다면 다음 명령으로 인스턴스에 연결합니다. 프라이빗 키 경로와 인스턴스의 퍼블릭 주소를 바꿔 주세요.
    $ ssh -i /path/to/my-key-pair.pem [email protected]
    

더 알아보기 (Learn more)