AWS Fargate 작업과 다른 AWS 서비스 간의 연결 문제를 해결하고 싶습니다.
간략한 설명
Amazon Elastic Container Service(Amazon ECS)를 통해 Fargate 작업 내에서 실행되는 애플리케이션은 다음과 같은 이유로 다른 AWS 서비스에 액세스하지 못할 수 있습니다.
- AWS Identity and Access Management(IAM) 권한 부족
- 잘못된 서브넷 경로
- 네트워크 액세스 제어 목록(네트워크 ACL) 제한
- 잘못된 보안 그룹 규칙
- 잘못된 Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트 구성
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
ECS Exec 설정 및 사용
ECS Exec을 사용하여 Fargate 작업의 애플리케이션 컨테이너와 상호 작용할 수 있습니다. ECS Exec을 사용하기 위한 사전 요구 사항을 충족하십시오. 그런 다음, Fargate 작업을 위해 ECS Exec을 켜십시오.
애플리케이션 컨테이너가 ECS Exec을 실행하기 위한 쉘 세션을 지원하지 않는 경우 aws-cli Docker 이미지를 사용하여 새 Fargate 작업을 생성하십시오. 새 작업은 현재 Fargate 작업과 동일한 서브넷 및 VPC에 있어야 합니다.
Amazon ECS와 다른 AWS 서비스 엔드포인트 간의 연결 구성
Amazon ECS 작업이 다른 서비스에 연결되지 않는 경우 다음 조건을 충족하는지 확인하십시오.
- 프로토콜(http:// 또는 https://), 호스트 이름 및 포트를 포함한 엔드포인트 URL이 올바릅니다. Amazon ECS 서비스 서브넷 구성에 맞는 서브넷으로 VPC 엔드포인트를 구성합니다.
- Amazon ECS 서비스가 사용하는 서브넷에는 엔드포인트 URL을 확인할 수 있는 올바른 DNS 구성(Amazon에서 제공한 DNS 또는 사용자 지정 확인자)이 있어야 합니다.
- Amazon ECS 작업에 연결된 보안 그룹은 대상 서비스의 포트 및 프로토콜에 대한 아웃바운드 액세스를 허용해야 합니다.
- 서브넷의 네트워크 액세스 제어 목록(ACL)은 필수 서비스 엔드포인트로 들어오고 나가는 트래픽을 허용해야 합니다.
Fargate 작업과 AWS 서비스 엔드포인트 간의 연결 테스트
Fargate 작업의 AWS 서비스 엔드포인트 및 포트 연결을 테스트하려면 컨테이너에서 다음 telnet 명령을 실행합니다.
telnet endpoint-url port
참고: 위 명령에서 endpoint-url을 서비스의 엔드포인트 URL로 바꾸고 port를 서비스의 포트 번호로 바꾸십시오.
연결에 성공하면 다음과 같은 예제 출력이 표시됩니다.
Trying 10.0.1.169...
Connected to sns.us-east-1.amazonaws.com.
Escape character is '^]'.
엔드포인트의 DNS 확인을 테스트하려면 다음 nslookup 명령을 실행합니다.
nslookup example-endpoint
출력 예시:
Name: sns.us-east-1.amazonaws.com
Address: 10.0.1.169
컨테이너에 telnet 또는 nslookup 명령을 설치하지 않은 경우 다음 명령 중 하나를 실행하여 설치합니다.
Debian 기반 컨테이너:
apt-get update
apt-get install -y dnsutils telnet
Amazon Linux 컨테이너:
yum install -y bind-utils telnet
연결 시간 초과 오류 해결
연결 시간 초과 오류가 발생하면 네트워크 구성을 확인하십시오.
보안 그룹 규칙
트래픽이 VPC 엔드포인트를 통해 라우팅되는 경우 엔드포인트 보안 그룹은 포트 443에서 다음 중 하나의 TCP 트래픽을 허용해야 합니다.
- Amazon ECS 작업의 보안 그룹
- VPC CIDR 블록
서비스 VPC 엔드포인트로 아웃바운드 트래픽을 허용하도록 작업의 보안 그룹을 구성합니다.
VPC 라우팅
퍼블릭 서브넷의 경우 Fargate 작업에는 인터넷 게이트웨이를 가리키는 기본 경로 0.0.0.0/0이 있어야 합니다.
프라이빗 서브넷의 경우 아키텍처에 따라 라우팅 테이블에 NAT 게이트웨이 또는 전송 게이트웨이에 대한 경로가 있어야 합니다.
프록시 설정
Amazon ECS 작업에서 프록시 서버를 사용하는 경우 프록시 구성이 서비스 엔드포인트로의 트래픽을 허용하는지 확인하십시오.
VPC 흐름 로그 분석
여전히 연결 문제가 발생하면 Amazon VPC 흐름 로그를 사용하여 트래픽 흐름 세부 정보를 확인하십시오.
IAM 권한 문제 해결
Amazon ECS 작업 역할이 애플리케이션 컨테이너에 다른 AWS 서비스와 상호 작용할 수 있는 권한을 부여하는지 확인합니다.
예를 들어 Amazon Simple Notification Service(Amazon SNS) 엔드포인트에 연결하려고 할 때 다음과 같은 오류가 발생할 수 있습니다.
VPC 엔드포인트 정책 오류 메시지의 예:
"An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:region-name:123456789012:* with an explicit deny in a VPC endpoint policy"
이 문제를 해결하려면 Amazon VPC 엔드포인트에 AWS 서비스에 대해 필요한 작업을 수행할 수 있는 권한을 부여하십시오. 위의 예제 오류 메시지에서 Amazon VPC 엔드포인트에는 ListTopics 권한이 있어야 합니다.
작업 역할 권한 오류 메시지의 예:
"An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:region-name:123456789012:* because no identity-based policy allows the SNS:ListTopics action"
이 문제를 해결하려면 Amazon ECS 작업의 IAM 역할에 수신자 서비스에 대해 필요한 작업을 수행할 수 있는 권한을 부여하십시오. 위의 예제 오류 메시지에서 IAM 역할에는 ListTopics 권한이 있어야 합니다.