AWS Secrets Manager 또는 환경 변수를 통해 제공되는 Amazon Elastic Container Service(Amazon ECS) 컨테이너 에이전트에서 프라이빗 리포지토리 자격 증명을 업데이트하려고 합니다.
간략한 설명
Amazon ECS 컨테이너 에이전트에 프라이빗 리포지토리 자격 증명을 제공하려면 작업 정의 또는 환경 변수에 Secrets Manager를 사용하십시오.
참고: 컨테이너 인스턴스에 자격 증명을 일반 텍스트로 저장하는 것은 보안 모범 사례가 아닙니다. 컨테이너 인스턴스 내에 레지스트리 자격 증명을 저장하는 것에 대한 직접적인 아키텍처 의존성이 없는 한 Secrets Manager를 대신 사용하십시오.
해결 방법
Secrets Manager를 사용하여 프라이빗 리포지토리 자격 증명 업데이트
다음 단계를 완료하십시오.
- Secrets Manager 콘솔을 엽니다.
- 보안 암호를 선택한 다음, 보안 암호 값 검색을 선택합니다.
- 편집을 선택합니다.
- 프라이빗 레지스트리에 대해 저장된 자격 증명을 업데이트한 다음, 저장을 선택합니다.
- 업데이트된 프라이빗 리포지토리 자격 증명 테스트 섹션의 단계를 완료합니다.
환경 변수를 사용하여 프라이빗 리포지토리 자격 증명 업데이트
다음 단계를 완료하십시오.
- 컨테이너 인스턴스에 연결합니다.
- ECS 컨테이너 에이전트에 어떻게 Docker 자격 증명을 제공하고 있는지 검토하려면 다음 명령을 실행합니다.
$ cat /etc/ecs/ecs.config
이 명령은 /etc/ecs/ecs.config 파일의 내용을 반환합니다.
ECS_ENGINE_AUTH_TYPE 변수가 docker로 설정된 경우, Docker 자격 증명을 일반 텍스트로 ECS 컨테이너 에이전트에 직접 전달합니다. 하지만 이 방법을 사용하는 것은 권장하지 않습니다. 대신 Secrets Manager를 사용하십시오. 또는 아래의 새 Docker 인증 값 가져오기 섹션에 나온 dockercfg 형식 접근 방식을 사용하십시오.
ECS_ENGINE_AUTH_TYPE 변수가 dockercfg로 설정된 경우, docker login 명령이 생성하는 Docker 생성 인증 값을 통해 Docker 자격 증명을 전달하게 됩니다. 이 방법을 사용하는 경우 새 Docker 인증 값 가져오기 섹션의 단계를 완료하십시오.
새 Docker 인증 값 가져오기
다음 단계를 완료하십시오.
-
Docker 계정에 로컬로 로그인하려면 다음 명령을 실행한 후 새 자격 증명을 입력합니다.
$ docker login
-
config.json 파일을 연결하려면 다음 명령을 실행한 후 Docker 생성 인증 키 값을 복사합니다.
$ cat ~/.docker/config.json
-
ECS_ENGINE_AUTH_DATA 변수를 업데이트하려면 다음 명령을 실행합니다.
$ sudo vi /etc/ecs/ecs.config
-
vi 편집기에서 ECS_ENGINE_AUTH_DATA 변수의 값을 Docker 인증 키 값으로 업데이트합니다. 예를 들어 다음과 같습니다.
ECS_CLUSTER=TestECSCluster
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"a2vpdGhhd3M6UGFzc3dvcmQ=","email":"email@example.com"}}
-
ECS 컨테이너 에이전트 재시작 섹션의 단계를 완료합니다.
ECS 컨테이너 에이전트 재시작
다음 단계를 완료하십시오.
- ECS 컨테이너 에이전트를 재시작하려면 컨테이너 인스턴스가 실행되고 있는 Amazon Machine Image(AMI)를 기반으로 다음 명령 중 하나를 실행합니다.
Amazon Linux 2 ECS에 최적화된 AMI:
$ sudo systemctl restart ecs
참고: Amazon Linux 1은 2023년 12월 31일에 서비스 종료되었습니다. Amazon Linux AMI는 더 이상 보안 업데이트 또는 버그 수정을 받지 못합니다. 자세한 내용은 Amazon Linux AMI 서비스 종료 시 업데이트를 참조하십시오.
Amazon Linux ECS에 최적화된 AMI:
$ sudo stop ecs && sudo start ecs
참고: ECS 클러스터의 다른 컨테이너 인스턴스에서 /etc/ecs/ecs.config 파일을 업데이트하려면 환경 변수를 사용하여 프라이빗 리포지토리 자격 증명 업데이트를 참조하십시오. 그런 다음, 각 컨테이너 인스턴스의 업데이트 프로세스를 따르십시오.
- 업데이트된 프라이빗 리포지토리 자격 증명 테스트 섹션의 단계를 완료합니다.
업데이트된 프라이빗 리포지토리 자격 증명 테스트
참고: 다음 테스트 예에서는 업데이트된 이미지가 클러스터 전체에 배포됩니다.
다음 단계를 완료하십시오.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창에서 클러스터를 선택한 다음, 원하는 클러스터를 선택합니다.
- 서비스를 선택한 다음, 업데이트를 선택합니다.
- 새 배포 강제 적용 확인란을 선택합니다.
- 업데이트를 선택합니다.
- 배포 탭에서 새 배포를 검토합니다. Amazon ECS는 이전 배포에서 진행하던 작업을 점진적으로 중단합니다. 그런 다음, Amazon ECS가 새 배포에서 작업을 다시 시작하고 ECS는 새 이미지 가져오기를 시도합니다.
참고: EC2 시작 유형 작업을 사용하는 경우 클러스터에는 롤링 업데이트 배포 유형을 성공적으로 수행할 수 있는 충분한 리소스가 있어야 합니다.
- 작업 탭을 선택한 다음, 각 개별 작업과 상태를 검토합니다.
새 작업 상태가 실행 중으로 설정된 경우 서비스가 오류 없이 작업을 성공적으로 업데이트한 것입니다.
새 작업의 마지막 상태가 중지됨 | 작업 시작 실패로 설정된 경우에는 서비스가 이 작업을 업데이트한 후 오류가 발생한 것입니다. ECS 컨테이너 에이전트는 새 컨테이너 이미지를 가져올 수 없으며 이전에 캐시된 이미지를 사용하고 있습니다. 자격 증명이 업데이트되었는지 확인한 다음, 다른 서비스 배포 업데이트를 수행하십시오.
참고: 작업의 전체 세부 정보를 표시하고 "pull access denied" 오류를 확인하려면 실패한 작업 ID를 선택하십시오. **설명 ** 페이지의 컨테이너에서 중지됨을 선택하십시오.
오류 메시지 예시:
"CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'"
관련 정보
Amazon ECS 컨테이너 에이전트 구성
인증 형식