ECS 작업에 대한 보안 암호를 가져오거나 Amazon ECR 인증을 검색하려고 할 때 발생하는 "ResourceInitializationError"를 해결하려면 어떻게 해야 합니까?
Amazon Elastic Container Service(Amazon ECS) 작업을 시작하면 ResourceInitializationError 메시지가 표시됩니다.
간략한 설명
Fargate 시작 유형에서 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."
- "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr..amazonaws.com/": dial tcp …443: i/o timeout. Please check your task network configuration."
- "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager…"
- "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret arn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: InvalidParameter: 1 validation error(s) found. – (minimum field size of 32/ maximum field size of 64), GetSecretValueInput.VersionId."
- "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: AccessDeniedException: User: arn:aws:sts::<accountID>::assumed-role/<roleName> is not authorized to perform: secretsmanager:GetSecretValue on resource: rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> because no identity-based policy allows the secretsmanager:GetSecretValue action status code: 400"
AWS Fargate 버전 1.4.0은 작업 탄력적 네트워크 인터페이스를 사용하여 이미지와 보안 암호를 가져옵니다. 모든 네트워크 트래픽은 Amazon Virtual Private Cloud(Amazon VPC) 내의 네트워크 인터페이스를 통해 이동합니다. VPC 흐름 로그를 사용하여 트래픽을 볼 수 있습니다. 하지만 Fargate는 Amazon VPC에 네트워크 인터페이스를 배치하므로 작업에는 사용자의 네트워크 구성이 사용됩니다.
Amazon ECS 컨테이너 에이전트는 작업 실행 AWS Identity and Access Management(IAM) 역할을 사용하여 Parameter Store, AWS Systems Manager의 기능 및 AWS Secrets Manager에서 정보를 가져옵니다.
고객 관리형 AWS Key Management Service(AWS KMS) 키를 사용하여 암호화한 데이터의 경우, 작업 실행 IAM 역할에 다음 권한을 부여합니다.
- ssm:GetParameters
- secretsmanager:GetSecretValue
- kms:Decrypt
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
TroubleshootECSTaskFailedToStart 런북 사용
시작하지 못한 Amazon ECS 작업의 문제를 해결하려면 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용합니다.
중요: ECS 클러스터 리소스가 위치해 있는 동일한 AWS 리전에서 런북을 사용하십시오. 작업 상태 정리로 인해 분석이 중단되지 않도록 가장 최근에 실패한 작업 ID를 사용하십시오. 실패한 작업이 Amazon ECS 서비스의 일부인 경우, 서비스에서 가장 최근에 실패한 작업을 사용합니다. 실패한 작업은 자동화를 실행할 때 ECS:DescribeTasks에 표시되어야 합니다. 기본적으로 중지된 ECS 작업은 중지됨 상태가 된 후 1시간 동안 표시됩니다.
AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하려면 다음 단계를 수행합니다.
- AWS Systems Manager 콘솔을 엽니다.
- 탐색 창의 변경 관리에서 자동화를 선택합니다.
- 자동화 실행을 선택합니다.
- Amazon 소유 탭을 선택합니다.
- 자동화 문서 아래의 검색 창에 TroubleshootECSTaskFailedToStart를 입력합니다.
- AWSSupport-TroubleshootECSTaskFailedToStart 카드를 선택합니다.
참고: 하이퍼링크된 자동화 이름을 선택하지 마십시오. - 다음을 선택합니다.
- 자동화 문서 실행에서 간단한 실행을 선택합니다.
- 입력 파라미터 섹션에서 AutomationAssumeRole에 자동화가 작업을 수행하도록 허용하는 역할의 ARN을 입력합니다.
참고: 서비스 또는 IAM 사용자나 역할에 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하는 데 필요한 IAM 권한이 있는지 확인하십시오. IAM 역할을 지정하지 않으면 자동화는 런북을 실행하는 IAM 사용자 또는 역할의 권한을 사용합니다. 자동화에 대한 서비스 역할을 만드는 방법에 관한 자세한 내용은 작업 1: 자동화를 위한 서비스 역할 생성을 참조하십시오. - ClusterName에 작업 시작에 실패한 클러스터 이름을 입력합니다.
- TaskId에 가장 최근에 실패한 작업의 ID를 입력합니다.
- 실행을 선택합니다.
참고: 실행 후 분석 결과는 글로벌 출력 섹션에 표시됩니다. 그러나 문서 상태가 성공으로 바뀔 때까지 기다리십시오. 또한 예외가 있는지 출력 섹션을 검토하십시오.
문제를 수동으로 해결할 수도 있습니다.
서브넷에서 인터넷으로의 경로 확인
Fargate 작업이 퍼블릭 서브넷에 있는 경우, 작업에 퍼블릭 IP 주소를 할당했는지 확인합니다. 또한 작업에 인터넷 게이트웨이로의 기본 경로(0.0.0.0/0)가 있는지 확인합니다. 새 작업을 시작하거나 새 서비스를 만들 때는 퍼블릭 자동 할당을 활성화합니다.
AWS CloudFormation 스택을 사용하여 Amazon ECS 서비스를 생성한 경우 AWS::ECS::Service의 NetworkConfiguration 속성을 수정하여 서비스를 업데이트합니다. 기존 서비스의 구성을 업데이트하려면 CloudFormation을 사용하여 AssignPublicIp 파라미터를 활성화하십시오. 또는 다음 update-service AWS CLI 명령을 실행합니다.
aws ecs update-service --service serviceName --region regionName "awsvpcConfiguration={subnets=[subnet-123,subnet-456],securityGroups=[sg-123,sg-456],assignPublicIp=ENABLED}"
참고: regionName을 해당 리전으로 바꾸십시오.
다음 구성을 사용하는 경우, 퍼블릭 서브넷의 인터넷 게이트웨이를 사용하여 Secrets Manager 또는 Systems Manager에 연결하지 마십시오.
- Secrets Manager 또는 Systems Manager VPC 엔드포인트가 퍼블릭 서브넷에 있습니다.
- Amazon VPC DHCP 설정에서 AmazonProvidedDNS를 활성화했습니다.
대신 Amazon VPC 엔드포인트를 사용하십시오.
참고: 기존 작업의 경우 퍼블릭 자동 할당을 활성화할 수 없습니다. 기존 서비스를 재구성하려면 AWS Management Console이 아닌 AWS CLI를 사용하십시오.
Fargate 작업이 프라이빗 서브넷에 있는 경우, 작업에 인터넷 연결 소스에 대한 기본 경로(0.0.0.0/0)가 있는지 확인합니다.
인터넷 연결 소스는 NAT 게이트웨이, AWS PrivateLink 또는 사용자 지정 이름 도메인 서버일 수 있습니다.
NAT 게이트웨이를 사용하는 경우 NAT 게이트웨이를 퍼블릭 서브넷에 배치하십시오. 자세한 내용은 AWS Network Firewall을 사용하는 인터넷 게이트웨이 및 NAT 게이트웨이가 있는 아키텍처를 참조하십시오. PrivateLink를 사용하는 경우 Amazon VPC 엔드포인트의 보안 그룹이 Fargate 작업으로의 트래픽을 허용하는지 확인하십시오. 사용자 지정 이름 도메인 서버를 사용하는 경우 DNS 쿼리의 설정을 확인하십시오. 쿼리는 포트 53에서 아웃바운드 액세스 권한이 있어야 하며 UDP 및 TCP 프로토콜을 사용해야 합니다. 또한 쿼리는 포트 443에서 HTTPS 액세스 권한도 있어야 합니다.
네트워크 ACL 및 보안 그룹 설정 확인
네트워크 액세스 제어 목록(네트워크 ACL)과 보안 그룹이 서브넷에서 포트 443으로의 아웃바운드 액세스를 차단하지 않는지 확인합니다. 자세한 내용을 보려면 보안 그룹을 사용하여 AWS 리소스에 대한 트래픽 제어를 참조하십시오.
참고: 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 Elastic Container Registry(Amazon ECR) VPC 엔드포인트에 대한 고려 사항을 참조하십시오.
참고: 작업 정의에서 Secrets Manager, Parameter Store 또는 Amazon CloudWatch Logs를 사용하는 경우 엔드포인트를 정의해야 합니다. 자세한 내용은 AWS Secrets Manager VPC 엔드포인트 사용 및 Amazon ECS용 VPC 엔드포인트 생성을 참조하십시오.
PrivateLink의 경우 Amazon VPC 보안 그룹이 TCP 포트 443에서 Fargate 작업 보안 그룹 또는 VPC CIDR 범위의 트래픽을 허용하는지 확인하십시오.
Fargate 인프라에 서비스 액세스 권한이 있는지 확인하려면 VPC 엔드포인트 정책 및 Amazon Simple Storage Service(Amazon S3) 게이트웨이 엔드포인트 정책을 확인하십시오.
IAM 역할 및 권한 확인
작업 실행 역할은 Amazon ECS 컨테이너 및 Fargate 에이전트에 작업에 대한 API 호출을 수행하는 데 필요한 권한을 부여합니다.
Fargate는 다음과 같은 작업을 수행할 때 작업 실행 역할이 필요합니다.
- Amazon ECR에서 컨테이너 이미지 가져오기.
- awslogs 로그 드라이버 사용.
- 프라이빗 레지스트리 인증 사용.
- Secrets Manager 보안 암호 또는 Parameter Store 파라미터를 사용하여 민감한 데이터 참조.
위 시나리오에서는 작업 실행 역할에 필요한 권한을 정의합니다. Secrets Manager 보안 암호 또는 Parameter Store 파라미터에 액세스하여 민감한 데이터를 검색할 때는 필요한 secretsmanager:GetSecretValue 또는 ssm:GetParameters 권한이 있는지 확인하십시오. 필요한 권한 목록에 대해서는 Secrets Manager 또는 Systems Manager 권한을 참조하십시오.
Amazon ECS 작업 정의에서 민감한 데이터 확인
보안 암호 및 파라미터 이름이 Amazon ECS 작업 정의에서 참조한 이름과 일치하는지 확인합니다. 그런 다음, 컨테이너 정의의 값이 Amazon ECS 작업 정의의 값과 일치하는지 확인합니다. 자세한 내용은 Amazon ECS 작업에서 보안 암호 또는 민감한 정보를 컨테이너에 안전하게 전달하려면 어떻게 해야 합니까?를 참조하십시오.
작업 정의에 지정된 것과 동일한 ARN 또는 이름으로 보안 암호 또는 파라미터를 구성해야 합니다. 리소스가 다른 리전에 있는 경우에는 전체 ARN을 제공해야 합니다.
GetSecretValueInput 내의 VersionId 파라미터를 사용하여 검색된 보안 암호 값의 버전을 지정합니다. 특정 버전이 필요하지 않으면 VersionId 필드를 삭제하십시오. Secrets Manager는 기본적으로 최신 버전을 검색합니다.
Parameter Store 파라미터와 작업이 같은 리전에 있는 경우, 전체 ARN 또는 보안 암호의 이름을 사용하십시오. 파라미터가 다른 리전에 있는 경우 전체 ARN을 지정해야 합니다.
파라미터 이름과 ARN을 확인하려면 다음 단계를 완료하십시오.
- AWS Systems Manager 콘솔을 엽니다.
- 탐색 창에서 Parameter Store를 선택한 다음, Parameter Store 이름을 확인합니다.
- 파라미터의 ARN을 가져오려면 다음 get-parameter AWS CLI 명령을 실행합니다.
참고: name_of_parameter_store_secret을 Parameter Store 보안 암호 이름으로 바꾸십시오. Secrets Manager 보안 암호를 참조하는 파라미터는 Parameter Store 버전 또는 기록 기능을 사용할 수 없습니다. 자세한 내용은 제한 사항을 참조하십시오.aws ssm get-parameter --name name_of_parameter_store_secret --with-decryption
관련 정보
Fargate 시작 유형을 위한 Amazon ECS 작업 네트워킹 옵션
- 언어
- 한국어

관련 콘텐츠
AWS 공식업데이트됨 9달 전
