내용으로 건너뛰기

Amazon ECS와 Amazon S3 간의 연결 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Container Service(Amazon ECS) 작업에서 Amazon Simple Storage Service(Amazon S3)에 액세스하려고 하는데 연결 문제가 발생했습니다.

해결 방법

CloudWatch 로그를 분석하여 Amazon S3 액세스 문제의 원인 파악

먼저 CloudWatch Logs에 대한 액세스를 설정하십시오. 그런 다음, CloudWatch Logs Insights를 사용하여 문제의 원인을 파악하십시오.

CloudWatch Logs 액세스 설정

Amazon ECS 작업 정의에 맞게 Amazon CloudWatch Logs를 구성하려면 다음 단계를 완료하십시오.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 작업 정의를 선택합니다.
  3. 작업 정의를 선택한 후 작업 정의에 다음 코드를 추가합니다.
    {
        "containerDefinitions": [
            {
                "name": "my-container",
                "image": "my-image:latest",
                "logConfiguration": {
                    "logDriver": "awslogs",
                    "options": {
                        "awslogs-group": "/ecs/my-task",
                        "awslogs-region": "region-code",
                        "awslogs-stream-prefix": "ecs"
                    }
                }
            }
        ]
    }
    참고: my-container를 해당 컨테이너 인스턴스 이름으로 바꾸고, my-image:latest을 해당 이미지 이름 및 태그로 바꾸고, region-code를 해당 AWS 리전으로 바꾸십시오.
  4. 최신 버전의 작업 정의를 사용하도록 Amazon ECS 서비스를 업데이트합니다.

CloudWatch Logs Insights를 사용하여 문제의 원인 파악

일반 Amazon S3 오류를 검색하려면 다음 쿼리를 실행하십시오.

filter @message like /S3|AccessDenied|NoSuchBucket/

특정 버킷 액세스 문제를 검색하려면 다음 쿼리를 실행하십시오.

filter @message like /my-bucket-name/

참고: my-bucket-name을 해당 버킷 이름으로 바꾸십시오.

이 정보를 사용하여 문제가 WS Identity and Access Management(IAM) 권한, 네트워크 연결, 버킷 구성 또는 애플리케이션 문제와 관련이 있는지 확인할 수 있습니다. 그런 다음, 관련 문제 해결 단계를 완료하십시오.

IAM 역할 구성 확인

Amazon ECS 작업의 작업 역할에 필요한 Amazon S3 권한(예: 읽기 전용 작업을 위한 AmazonS3ReadOnlyAccess 정책)이 있는지 확인합니다. AWS CloudTrail 로그를 검토하여 Amazon S3와 관련된 거부된 작업을 파악합니다. 예를 들어 Amazon ECS 작업이 my-app-data 버킷에서 객체를 읽어야 하는 경우 다음 사용자 지정 정책을 작업에 연결하십시오.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-app-data",
                "arn:aws:s3:::my-app-data/*"
            ]
        }
    ]
}

참고: 위 정책은 작업이 my-app-data 버킷의 내용을 나열하고 객체를 검색할 수 있도록 허용합니다.

네트워크 구성 확인

퍼블릭 서브넷의 작업

퍼블릭 서브넷 작업의 경우 인스턴스가 속한 가상 프라이빗 클라우드(VPC)의 네트워크 액세스 제어 목록(네트워크 ACL)을 확인하십시오. 네트워크 ACL은 포트 443에서 아웃바운드 트래픽을 허용해야 합니다. 또한 작업과 연결된 보안 그룹이 포트 443에서 Amazon S3 AWS 관리형 접두사 목록으로의 아웃바운드 HTTPS 트래픽을 허용하는지 확인하십시오.

프라이빗 서브넷의 작업

프라이빗 서브넷 작업의 경우 NAT 게이트웨이가 서브넷의 라우팅 테이블에 연결되어 있는지 확인하십시오. NAT 게이트웨이는 Amazon S3 엔드포인트에 도달하기 위한 인터넷 경로를 생성합니다. Amazon S3용 VPC 엔드포인트를 사용하는 경우 Amazon S3 게이트웨이 엔드포인트의 VPC와 연결된 라우팅 테이블을 확인하십시오. 라우팅 테이블에 트래픽을 Amazon S3 게이트웨이 엔드포인트로 보내는 Amazon S3 AWS 관리형 접두사 목록에 대한 경로가 포함되어 있는지 확인하십시오. 이 경로는 Amazon S3에 대한 요청이 퍼블릭 인터넷을 통해 전송되지 않도록 합니다.

Amazon S3 인터페이스 엔드포인트를 사용하는 경우 엔드포인트에 연결된 보안 그룹이 포트 443에서 인바운드 HTTPS 트래픽을 허용하는지 확인하십시오. 또한 엔드포인트의 프라이빗 DNS 설정과 VPC의 DNS 호스트 이름 활성화DNS 지원 활성화 DNS 설정이 활성화되어 있는지 확인하십시오. 마지막으로 애플리케이션이 s3.amazonaws.com 글로벌 엔드포인트가 아닌 s3.region.amazonaws.com 엔드포인트를 사용하는지 확인하십시오.

Amazon ECS 작업에서 Amazon S3 엔드포인트로의 네트워크 연결 테스트

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

방화벽과 보안 그룹을 포함한 네트워크 구성이 Amazon S3 엔드포인트에 대한 트래픽을 허용하는지 확인하십시오.

참고: ECS Exec을 사용하여 다음 명령을 실행할 수 있습니다.

포트 443에서 Amazon S3 엔드포인트에 대한 HTTPS 연결을 테스트하려면 다음 telnet 또는 curl 명령을 실행하십시오.

telnet s3.region-code.amazonaws.com 443
curl -v https://s3.region-code.amazonaws.com

참고: region-code을 사용자의 리전으로 바꾸십시오. telnet 명령을 설치해야 할 수 있습니다.

컨테이너 인스턴스가 Amazon S3 작업을 인증하고 수행할 수 있는지 테스트하려면 ls AWS CLI 명령을 실행하십시오.

aws s3 ls

위 테스트에 실패하면 보안 그룹, 네트워크 ACL 및 방화벽 규칙을 검토하여 차단된 포트가 있는지 확인하십시오.

관련 정보

Amazon S3의 403 Access Denied 오류 문제를 해결하려면 어떻게 해야 합니까?

Fargate의 Amazon ECS 작업에서 다른 AWS 서비스에 액세스하려면 어떻게 해야 합니까?

Amazon S3 버킷에서 "cp" 또는 명령을 실행할 때 발생하는 연결 오류 문제를 해결하려면 어떻게 해야 합니까?"sync"

AWS 공식업데이트됨 일 년 전