Amazon ECS에서 “unable to pull secrets or registry auth” 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 4월 7일

Amazon Elastic Container Service(Amazon ECS) 태스크를 시작할 때 다음 오류 중 하나가 발생했습니다.

ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried

간략한 설명

AWS Fargate 플랫폼 버전 1.4.0은 태스크 탄력적 네트워크 인터페이스를 사용하여 이미지와 보안 암호를 가져옵니다. 모든 네트워크 트래픽은 Amazon Virtual Private Cloud(Amazon VPC) 내의 탄력적 네트워크 인터페이스를 통해 흐릅니다. Amazon VPC 흐름 로그를 통해 이 트래픽을 볼 수 있습니다. 하지만 이 태스크는 Fargate가 소유한 탄력적 네트워크 인터페이스를 사용하는 대신 사용자의 네트워크 구성을 사용합니다. 이는 탄력적 네트워크 인터페이스가 Amazon VPC 내에 배치되기 때문입니다.

Amazon ECS 컨테이너 에이전트는 태스크 실행 AWS Identity and Access Management(IAM) 역할을 사용하여 AWS Systems Manager Parameter Store 또는 AWS Secrets Manager에서 정보를 가져옵니다. Systems Manager Parameter Store 또는 Secrets Manager의 데이터를 암호화하기 위해 고객 관리형 AWS Key Management Service(AWS KMS) 키를 사용하는 경우 ssm:GetParameters, secretsmanager:GetSecretValue, kms:Decrypt 작업에 대한 권한을 태스크 실행 IAM 역할에 부여해야 합니다.

해결 방법

서브넷에서 인터넷으로의 경로 확인

퍼블릭 서브넷에 Fargate 태스크가 있는 경우 할당된 퍼블릭 IP 주소와, 인터넷 게이트웨이에 대한 기본 경로(0.0.0.0/0)가 태스크에 있는지 확인합니다. 새 태스크를 시작하거나 새 서비스를 생성할 때 Auto-assign public을 활성화해야 합니다. 퍼블릭 서브넷에서 Secrets Manager 또는 Systems Manager VPC 엔드포인트를 사용하고 Amazon VPC의 DHCP 옵션 설정에서 AmazonProvidedDNS를 활성화한 경우, 퍼블릭 서브넷의 인터넷 게이트웨이 대신 Amazon VPC 엔드포인트를 사용하여 Secrets Manager 또는 Systems Manager에 연결합니다.

참고: 기존 태스크에는 이 옵션을 활성화할 수 없습니다. 기존 서비스의 경우 AWS 관리 콘솔을 사용하여 이 옵션을 활성화할 수 없습니다. 하지만 AWS Command Line Interface(AWS CLI)를 사용하여 기존 서비스를 재구성할 수 있습니다. AWS CloudFormation 스택을 사용하여 Amazon ECS 서비스를 생성한 경우 AWS::ECS::ServiceNetworkConfiguration 속성을 수정하여 서비스를 업데이트할 수 있습니다.

프라이빗 서브넷에 Fargate 태스크가 있는 경우 NAT 게이트웨이, AWS PrivateLink 또는 다른 인터넷 연결 소스에 대한 기본 경로(0.0.0.0/0)가 태스크에 있는지 확인합니다.

  • NAT 게이트웨이를 사용하는 경우 NAT 게이트웨이를 퍼블릭 서브넷에 배치합니다. 자세한 내용은 인터넷 게이트웨이 및 NAT 게이트웨이를 사용한 아키텍처를 참조하세요.
  • PrivateLink를 사용하는 경우 Fargate 인프라가 Amazon VPC 엔드포인트에 대한 보안 그룹을 사용할 수 있는지 확인해야 합니다.
  • 사용자 지정 이름 도메인 서버를 사용하는 경우 DNS 쿼리에서 UDP 및 TCP 프로토콜을 사용하는 포트 53에 대한 아웃바운드 액세스와 포트 443에 대한 HTTPS 액세스가 있는지 확인합니다.

네트워크 ACL 및 보안 그룹 설정 확인

네트워크 액세스 제어 목록(ACL)과 보안 그룹이 서브넷에서 포트 443에 대한 아웃바운드 액세스를 차단하지 않는지 확인합니다. 자세한 내용은 VPC의 보안 그룹을 참조하세요.

참고: 발신 트래픽을 허용하고 Amazon ECS 엔드포인트에 액세스하려면 Fargate 태스크에 포트 443에 대한 아웃바운드 액세스 권한이 있어야 합니다.

Amazon VPC 엔드포인트 확인

PrivateLink를 사용하는 경우 필요한 엔드포인트를 생성했는지 확인하세요.

Fargate 플랫폼 버전 1.4.0 이상에 필요한 엔드포인트는 다음과 같습니다.

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • S3 게이트웨이 엔드포인트
  • com.amazonaws.region.logs

자세한 내용은 Amazon ECR VPC 엔드포인트 고려 사항을 참조하세요.

참고: 태스크 정의에서 Secrets Manager, Systems Manager 파라미터 또는 Amazon CloudWatch Logs를 사용하는 경우 엔드포인트를 정의해야 할 수 있습니다. 자세한 내용은 VPC 엔드포인트로 Secrets Manager 사용, Amazon ECS의 VPC 엔드포인트 생성인터페이스 VPC 엔드포인트로 CloudWatch Logs 사용을 참조하세요.

PrivateLink를 사용하는 경우 Amazon VPC 엔드포인트에 연결된 보안 그룹이 TCP 포트 443의 Fargate 태스크 보안 그룹 또는 Fargate 태스크 VPC CIDR 범위의 트래픽을 허용하는지 확인합니다.

VPC 엔드포인트 정책Amazon Simple Storage Service(Amazon S3)에 대한 엔드포인트 정책을 확인하여 Fargate 인프라가 서비스에 액세스할 수 있는지 확인합니다.

IAM 역할 및 권한 확인

태스크 실행 역할은 태스크에 대한 API 호출을 수행하는 데 필요한 권한을 Amazon ECS 컨테이너 및 Fargate 에이전트에 부여합니다. 다음과 같은 작업을 수행하는 경우 Fargate에 이 역할이 필요합니다.

  • Amazon Elastic Container Registry(Amazon ECR)에서 컨테이너 이미지를 가져옵니다.
  • awslogs 로그 드라이버를 사용합니다.
  • 프라이빗 레지스트리 인증을 사용합니다.
  • Secrets Manager 보안 암호 또는 Systems Manager Parameter Store 파라미터를 사용하여 민감한 데이터를 참조합니다.

사용 사례에 앞의 시나리오가 포함된 경우 태스크 실행 역할에 필요한 권한이 정의되어 있는지 확인합니다. 필요한 권한의 전체 목록은 Amazon ECS 태스크 실행 IAM 역할을 참조하세요.

Amazon ECS 태스크 정의에서 참조된 민감한 정보 확인

보안 암호 및 파라미터의 이름이 Amazon ECS 태스크 정의의 참조된 이름과 일치하는지 확인합니다. 그런 다음 태스크 정의의 컨테이너 정의 값이 Amazon ECS 태스크 정의 값과 일치하는지 확인합니다. 자세한 내용은 보안 암호 또는 민감한 정보를 Amazon ECS 태스크의 컨테이너에 안전하게 전달하려면 어떻게 해야 하나요?를 참조하세요.

Systems Manager Parameter Store 파라미터가 시작하는 태스크와 동일한 리전에 있는 경우 전체 ARN 또는 보안 암호 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있는 경우 전체 ARN을 지정해야 합니다.

System Manager 파라미터 이름과 ARN을 확인하려면 다음을 수행합니다.

1.    AWS Systems Manager 콘솔을 엽니다.

2.    탐색 창에서 Parameter Store를 선택하고 Parameter Store 이름을 확인합니다.

3.    그런 다음 파라미터에 대한 ARN 정보를 얻으려면 AWS Command Line Interface(AWS CLI)를 사용하고 다음 명령을 실행합니다.
참고: name_of_parameter_store_secret을 Parameter Store 보안 암호 이름으로 바꿉니다.

$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

참고: Secrets Manager 보안 암호를 참조하는 매개 변수는 Parameter Store 버전 관리 또는 이력 기능을 사용할 수 없습니다. 자세한 내용은 제한 사항을 참조하세요.


이 문서가 도움이 되었습니까?


Besoin d'aide pour une question technique ou de facturation ?