

# Amazon ECS에서 Secrets Manager 암호를 사용하여 민감한 데이터 지정
<a name="specifying-sensitive-data-tutorial"></a>

Amazon ECS에서는 AWS Secrets Manager 암호에 민감한 데이터를 저장하고 컨테이너 정의에서 참조하는 방식으로 컨테이너에 민감한 데이터를 삽입할 수 있습니다. 자세한 내용은 [Amazon ECS 컨테이너로 민감한 데이터 전달](specifying-sensitive-data.md) 섹션을 참조하세요.

Secrets Manager 보안 암호를 생성하고, Amazon ECS 태스크 정의에서 보안 암호를 참조한 다음, 보안 암호 내용을 표시하는 컨테이너 내부의 환경 변수를 쿼리하여 작동하는지 확인하는 방법을 알아보세요.

## 사전 조건
<a name="specifying-sensitive-data-tutorial-prereqs"></a>

이 자습서에서는 다음 사전 조건이 충족되었다고 가정합니다.
+ [Amazon ECS 사용 설정](get-set-up-for-amazon-ecs.md)의 단계가 완료되었습니다.
+ 사용자에게는 Secrets Manager 및 Amazon ECS 리소스를 생성하는 데 필요한 IAM 권한이 있습니다.

## 1단계: Secrets Manager 보안 암호 생성
<a name="specifying-sensitive-data-tutorial-create-secret"></a>

Secrets Manager 콘솔을 사용하여 민감한 데이터에 대한 암호를 생성할 수 있습니다. 이 자습서에서는 이후 컨테이너에서 참조할 기본 사용자 이름 및 암호를 저장하는 기본 보안을 생성합니다. 자세한 정보는 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)을 참조하세요.

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

**Secret ARN**(보안 암호 ARN)을 저장하여 이후 단계의 작업 실행 IAM 정책 및 작업 정의에 참조합니다.

## 2단계: 태스크 실행 역할에 보안 암호 권한 추가
<a name="specifying-sensitive-data-tutorial-update-iam"></a>

Amazon ECS가 Secrets Manager 보안 암호에서 민감한 데이터를 가져오려면 작업 실행 역할에 대한 보안 암호 권한을 보유해야 합니다. 자세한 내용은 [Secrets Manager 또는 Systems Manager 권한](task_execution_IAM_role.md#task-execution-secrets) 섹션을 참조하세요.

## 3단계: 태스크 정의 생성
<a name="specifying-sensitive-data-tutorial-create-taskdef"></a>

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

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

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

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

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

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

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

1. 

   ```
   {
       "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"
   }
   ```

1. **생성(Create)**을 선택합니다.

## 4단계: 클러스터 생성
<a name="specifying-sensitive-data-tutorial-create-cluster"></a>

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

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

EC2에 대한 클러스터를 생성하는 방법에 대한 자세한 내용은 [Amazon EC2 워크로드에 대한 Amazon ECS 클러스터 생성](create-ec2-cluster-console-v2.md) 섹션을 참조하세요.

## 5단계: 태스크 실행
<a name="specifying-sensitive-data-tutorial-run-task"></a>

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

작업을 실행하는 방법에 대한 정보는 [애플리케이션을 Amazon ECS 태스크로 실행](standalone-task-create.md) 섹션을 참조하세요.

## 6단계: 확인
<a name="specifying-sensitive-data-tutorial-verify"></a>

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

**생성한 환경 변수 확인**

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

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

   1. 탐색 창에서 **클러스터**를 선택한 다음, 생성한 클러스터를 선택합니다.

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

   1. 인스턴스로 인스턴스의 **Public IP**(퍼블릭 IP) 또는 **Public DNS**(퍼블릭 DNS)를 기록합니다.

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

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

   Windows 컴퓨터 사용에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [PuTTY를 사용하여 Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-from-windows.html)을 참조하세요.
**중요**  
인스턴스 연결 문제에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스에 연결 문제 해결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)을 참조하세요.

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

   ```
   docker ps
   ```

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

   ```
   docker exec -it container_ID /bin/bash
   ```

1. `echo` 명령을 사용해 환경 변수 값을 프린트합니다.

   ```
   echo $username_value
   ```

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

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

## 7단계: 정리
<a name="specifying-sensitive-data-tutorial-cleanup"></a>

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

**리소스 정리**

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

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

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

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

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

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

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

1. **Permissions**(권한)를 선택한 다음 **ECSSecretsTutorial** 옆에 있는 **X**를 선택합니다. **** 제거를 선택합니다.

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

1. 생성한 **username\$1value** 보안 암호를 선택하고 **작업(Actions)**, **보안 암호 삭제(Delete secret)**를 선택합니다.