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

6분 분량
0

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(VPC) 내의 탄력적 네트워크 인터페이스를 통해 이동합니다. Amazon VPC 플로우 로그에서 이 트래픽을 볼 수 있습니다. 그러나 이 작업은 Fargate 소유의 탄력적 네트워크 인터페이스 대신 사용자의 네트워크 구성을 사용합니다. 이는 탄력적 네트워크 인터페이스가 Amazon VPC 내에 배치되기 때문입니다.

Amazon ECS 컨테이너 에이전트는 작업 실행 AWS Identity and Access Management(IAM) 역할을 사용하여 다음 서비스에서 정보를 가져옵니다.

  • AWS Systems Manager Parameter Store
  • AWS Secrets Manager

고객 관리형 AWS Key Management Service(AWS KMS) 키를 사용하여 데이터를 암호화하는 경우, 작업 실행 IAM 역할에 다음 권한을 부여하세요.

  • ssm:GetParameters
  • secretsmanager:GetSecretValue
  • kms:Decrypt.

시작하지 못한 Amazon ECS 작업의 문제를 해결하려면 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용하세요. 이 자동화는 다음 구성을 검토합니다.

  • 구성된 컨테이너 레지스트리에 대한 네트워크 연결
  • 작업 실행 역할에 필요한 IAM 권한 누락
  • Virtual Private Cloud(VPC) 엔드포인트 연결
  • 보안 그룹 규칙 구성
  • AWS Secrets Manager 비밀 참조
  • 로깅 구성

런북의 출력에서 권장 사항을 제공하지 않은 경우 다음 섹션의 수동 문제 해결 방법을 사용하세요.

해결 방법

중요:

  • ECS 클러스터 리소스가 위치해 있는 같은 AWS 리전에서 런북을 사용하세요.
  • 런북을 사용할 때는 가장 최근에 실패한 작업 ID를 사용해야 합니다. 실패한 작업이 Amazon ECS 서비스의 일부인 경우, 서비스에서 가장 최근에 실패한 작업을 사용합니다. 실패한 작업은 자동화 실행 중에 ECS:DescribeTasks에 표시되어야 합니다. 기본적으로 중지된 ECS 작업은 중지됨 상태로 전환된 후 1시간 동안 표시됩니다. 가장 최근에 실패한 작업 ID를 사용하면 자동화 도중에 작업 상태 정리가 분석을 방해하지 않습니다.

AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하려면 다음 단계를 수행합니다.

  1. AWS Systems Manager 콘솔을 엽니다.
  2. 탐색 창의 변경 관리에서 자동화를 선택합니다.
  3. 자동화 실행을 선택합니다.
  4. Amazon 소유 탭을 선택합니다.
  5. 자동화 문서에서 TroubleshootECSTaskFailedToStart를 검색합니다.
  6. AWSSupport-TroubleshootECSTaskFailedToStart 카드를 선택합니다.
    참고: 하이퍼링크로 연결된 자동화 이름이 아니라 카드의 라디오 버튼을 선택하세요.
  7. 다음을 선택합니다.
    **참고:**실행 후 분석 결과가 글로벌 출력 섹션에 표시됩니다. 그러나 문서 상태가 성공으로 바뀔 때까지 기다리세요. 또한 출력 섹션에서 예외가 있는지 확인하세요.
  8. 자동화 문서 실행에서 단순 실행을 선택합니다.
  9. 입력 파라미터 섹션에서 AutomationAssumeRole에 Systems Manager Automation이 작업을 수행하도록 허용하는 역할의 ARN을 입력합니다.
    참고: AutomationAssumeRole 또는 IAM 사용자나 역할에 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하는 데 필요한 IAM 권한이 있는지 확인하세요. IAM 역할을 지정하지 않으면, Systems Manager Automation은 런북을 실행하는 IAM 사용자 또는 역할의 권한을 사용합니다. Systems Manager Automation에 대한 위임 역할 만들기에 관한 자세한 내용은 작업 1: 자동화를 위한 서비스 역할 생성을 참조하세요.
  10. ClusterName에 작업 시작에 실패한 클러스터 이름을 입력합니다.
  11. TaskId에 가장 최근에 실패한 작업의 ID를 입력합니다.
  12. 실행을 선택합니다.

자동화 결과에 따라 다음 수동 문제 해결 단계 중 하나를 사용합니다.

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

Fargate 작업이 공용 서브넷에 있는 경우, 작업에 공용 IP 주소가 할당되어 있는지 확인합니다. 또한 작업에 인터넷 게이트웨이로의 기본 경로(0.0.0.0/0)가 있는지 확인합니다. 새 작업을 시작하거나 새 서비스를 만들 때는 퍼블릭 자동 할당을 활성화하세요.

다음 구성을 사용하는 경우, 공용 서브넷의 인터넷 게이트웨이를 사용하여 Secrets Manager 또는 Systems Manager에 연결하지 마세요. 대신 Amazon VPC 엔드포인트를 사용하세요.

  • Secrets Manager 또는 Systems Manager VPC 엔드포인트는 공용 서브넷에 있습니다.
  • Amazon VPC DHCP 설정에서 AmazonProvidedDNS를 활성화했습니다.

참고: 기존 작업에는 퍼블릭 자동 할당을 켤 수 없습니다. 기존 서비스의 경우 AWS Command Line Interface(AWS CLI)로만 서비스를 재구성할 수 있습니다. AWS Management Console은 사용할 수 없습니다. AWS CloudFormation 스택을 사용하여 Amazon ECS 서비스를 생성한 경우 NetworkConfiguration 속성을 AWS::ECS::Service로 수정하여 서비스를 업데이트합니다.

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

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

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

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

참고: Fargate 작업이 발신 트래픽을 허용하고 Amazon ECS 엔드포인트에 액세스하려면 포트 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를 사용하는 경우 엔드포인트를 정의해야 할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

PrivateLink를 사용하는 경우 Amazon VPC의 보안 그룹이 올바른 트래픽을 허용하는지 확인하세요. 그룹은 Fargate 작업 보안 그룹 또는 TCP 포트 443의 Fargate 작업 VPC CIDR 범위에서 오는 트래픽을 허용해야 합니다.

Fargate 인프라에 서비스 액세스 권한이 있는지 확인하려면 VPC 엔드포인트 정책Amazon Simple Storage Solution(Amazon S3)의 엔드포인트 정책을 확인하세요.

IAM 역할 및 권한 확인

작업 실행 역할은 Amazon ECS 컨테이너 및 Fargate 에이전트에 작업에 대한 API 호출을 수행하는 데 필요한 권한을 부여합니다. 다음 작업을 수행할 때 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을 지정해야 합니다.

Systems Manager 파라미터 이름과 ARN을 확인하려면 다음 단계를 완료하세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

  1. AWS Systems Manager 콘솔을 엽니다.
  2. 탐색 창에서 Parameter Store를 선택한 다음 Parameter Store 이름을 확인합니다.
  3. 파라미터의 ARN을 가져오려면 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 버전 관리 또는 기록 기능을 사용할 수 없습니다. 자세한 내용은 제한을 참조하세요.

관련 정보

중지된 작업의 오류 확인

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음