프라이빗 Docker 이미지를 위한 Amazon ECS 컨테이너 인스턴스 구성 - Amazon Elastic Container Service

프라이빗 Docker 이미지를 위한 Amazon ECS 컨테이너 인스턴스 구성

Amazon ECS 컨테이너 에이전트는 기본 인증을 사용하여 프라이빗 레지스트리로 인증할 수 있습니다. 프라이빗 레지스트리 인증을 활성화하면 태스크 정의에서 프라이빗 Docker 이미지를 사용할 수 있습니다. 이 기능은 EC2 시작 유형을 사용하는 태스크에서만 지원됩니다.

프라이빗 레지스트리 인증을 활성화하는 또 다른 방법은 AWS Secrets Manager를 사용하여 프라이빗 레지스트리 자격 증명을 안전하게 저장한 후 나중에 컨테이너 정의에서 참조합니다. 태스크에서 프라이빗 리포지토리의 이미지를 사용할 수 있는 것도 이러한 인증 기능 때문입니다. 이 방법은 EC2 또는 Fargate 시작 유형을 사용하는 작업만 지원합니다. 자세한 정보는 Amazon ECS에서 AWS 컨테이너가 아닌 이미지 사용을 참조하세요.

Amazon ECS 컨테이너 에이전트는 시작할 때 다음 환경 변수 2개를 찾습니다.

  • ECS_ENGINE_AUTH_TYPE, 전송되는 인증 데이터의 유형을 지정합니다.

  • ECS_ENGINE_AUTH_DATA, 실제 인증 자격 증명이 포함됩니다.

Amazon ECS 최적화 AMI의 Linux 변형은 컨테이너 인스턴스가 시작될 때, 그리고 서비스가 시작될 때마다이 변수에 대해 /etc/ecs/ecs.config 파일을 스캔할 수 있습니다(sudo start ecs 명령 사용). Amazon ECS 최적화가 아닌 AMI는 이러한 환경 변수를 파일에 저장하고 --env-file path_to_env_file 옵션을 사용하여 컨테이너 에이전트를 시작하는 docker run 명령에 전달해야 합니다.

중요

이러한 인증 환경 변수를 인스턴스 시작 시 Amazon EC2 사용자 데이터를 사용하여 첨가하거나 --env 옵션을 사용하여 docker run 명령으로 전달하지 않는 것이 좋습니다. 인증 자격 증명과 같은 민감한 정보인 경우 이러한 방법이 적절하지 않습니다. 인증 자격 증명을 컨테이너 인스턴스에 안전하게 추가하는 방법에 대한 자세한 내용은 Amazon S3에 Amazon ECS 컨테이너 인스턴스 구성 저장 섹션을 참조하세요.

인증 형식

프라이빗 레지스트리 인증에 dockercfgdocker 두 가지 형식을 사용할 수 있습니다.

Dockercfg 인증 형식

dockercfg 형식은 docker login 명령을 실행하면 만들어지는 구성 파일에 저장된 인증 정보를 사용합니다. 이 파일은 로컬 시스템에서 docker login을 실행하고 레지스트리 사용자 이름, 암호 및 이메일 주소를 입력하여 만들 수 있습니다. 컨테이너 인스턴스에 로그인한 후 그 인스턴스에서 명령을 실행할 수도 있습니다. Docker 버전에 따라 이 파일은 ~/.dockercfg 또는 ~/.docker/config.json으로 저장됩니다.

cat ~/.docker/config.json

출력:

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}
중요

Docker 버전이 새로우면 바깥쪽 auths 객체를 사용하여 위와 같은 구성 파일이 생성됩니다. Amazon ECS 에이전트는 auths 객체 없이 아래 형식의 dockercfg 인증 데이터만 지원합니다. jq 유틸리티가 설치된 경우에는 cat ~/.docker/config.json | jq .auths 명령으로 이 데이터를 추출할 수 있습니다.

cat ~/.docker/config.json | jq .auths

출력:

{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}

위 예제에서는 실행 시간에 Amazon ECS 컨테이너 에이전트가 로드하는 환경 변수 파일(Amazon ECS 최적화 AMI의 경우에는 /etc/ecs/ecs.config)에 다음 환경 변수를 추가해야 합니다. Amazon ECS 최적화 AMI를 사용하지 않고 docker run을 사용하여 수동으로 에이전트를 시작하는 경우 에이전트를 시작할 때 --env-file path_to_env_file 옵션을 통해 환경 변수 파일을 지정합니다.

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

다음 구문을 사용하면 여러 프라이빗 레지스트리를 구성할 수 있습니다.

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}
Docker 인증 형식

docker 형식은 에이전트가 인증할 때 사용하는 레지스트리 서버의 JSON 표현을 사용합니다. 여기에는 해당 레지스트리가 요구하는 인증 파라미터도 포함됩니다(예: 해당 계정의 사용자 이름, 암호, 이메일 주소). Docker Hub 계정의 경우 JSON 표현은 다음과 같습니다.

{ "https://index.docker.io/v1/": { "username": "my_name", "password": "my_password", "email": "email@example.com" } }

이 예제에서는 실행 시간에 Amazon ECS 컨테이너 에이전트가 로드하는 환경 변수 파일(Amazon ECS 최적화 AMI의 경우에는 /etc/ecs/ecs.config)에 다음 환경 변수를 추가해야 합니다. Amazon ECS 최적화 AMI를 사용하지 않고 docker run을 사용하여 수동으로 에이전트를 시작하는 경우 에이전트를 시작할 때 --env-file path_to_env_file 옵션을 통해 환경 변수 파일을 지정합니다.

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

다음 구문을 사용하면 여러 프라이빗 레지스트리를 구성할 수 있습니다.

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}

절차

컨테이너 인스턴스에 대한 프라이빗 레지스트리를 사용 설정하려면 다음 절차를 따르세요.

Amazon ECS 최적화 AMI에서 프라이빗 레지스트리를 활성화하는 방법
  1. SSH를 사용해 컨테이너 인스턴스에 로그인합니다.

  2. /etc/ecs/ecs.config 파일을 열고 레지스트리 및 계정으로 다음과 같이 ECS_ENGINE_AUTH_TYPEECS_ENGINE_AUTH_DATA 값을 추가합니다.

    sudo vi /etc/ecs/ecs.config

    이 예제에서는 Docker Hub 사용자 계정을 인증합니다.

    ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
  3. 에이전트가 ECS_DATADIR 환경 변수를 사용하여 해당 상태를 다음과 같이 저장하는지 확인합니다.

    docker inspect ecs-agent | grep ECS_DATADIR

    출력:

    "ECS_DATADIR=/data",
    중요

    이전 명령이 ECS_DATADIR 환경 변수를 반환하지 않으면 에이전트를 중지하기 전에 이 컨테이너 인스턴스에서 실행 중인 태스크를 모두 중지해야 합니다. ECS_DATADIR 환경 변수를 사용하는 새 버전의 에이전트는 해당 상태를 저장하며 태스크가 실행되는 동안 에이전트를 중지하고 시작해도 문제가 발생하지 않습니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트을 참조하세요.

  4. 다음과 같이 ecs 서비스를 중단합니다.

    sudo stop ecs

    출력:

    ecs stop/waiting
  5. ecs 서비스를 다시 시작합니다.

    • Amazon ECS 최적화 Amazon Linux 2 AMI의 경우:

      sudo systemctl restart ecs
    • Amazon ECS 최적화 Amazon Linux AMI의 경우:

      sudo stop ecs && sudo start ecs
  6. (선택 사항) 에이전트 내부 검사 API 태스크를 쿼리하여 에이전트가 실행 중인지 확인하고 새 컨테이너 인스턴스에 대한 일부 정보를 볼 수 있습니다. 자세한 내용은 Amazon ECS 컨테이너 내부 검사 단원을 참조하십시오.

    curl http://localhost:51678/v1/metadata