Amazon ECS에서 IAM 작업 역할을 구성하여 "Access Denied" 오류를 방지하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 16일

애플리케이션에서 AWS API를 호출할 때 "Access Denied" 오류 메시지가 나타납니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

IAM 작업 역할을 올바르게 구성하지 않으면 애플리케이션에서 AWS API를 호출할 때 "Access Denied" 오류 메시지가 나타납니다.

이 오류를 방지하려면 Amazon Elastic Container Service(Amazon ECS) 작업의 작업 정의에 AWS Identity and Access Management(IAM) 작업 역할을 제공하십시오. 작업 시 이 IAM 역할을 AWS API 호출에 사용할 수 있습니다. IAM 작업 역할에는 애플리케이션에 필요한 모든 권한이 있어야 합니다. 작업에서 구성 문제로 인해 IAM 작업 역할을 찾지 못할 경우 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 역할이 대신 사용됩니다.

해결 방법

작업에 대해 IAM 역할을 올바르게 구성하려면 다음을 확인합니다.

ECS 컨테이너 에이전트가 실행 중인지 확인

ECS 컨테이너 에이전트가 실행 중인지 확인하려면 다음 명령을 실행합니다.

docker ps

ECS 컨테이너 에이전트 구성 파일에서 IAM 역할 활성화

1.    /etc/ecs/ecs.config 파일을 엽니다.

2.    브리지기본 네트워크 모드의 컨테이너에 있는 작업에 대해 IAM 역할을 활성화하려면 ECS_ENABLE_TASK_IAM_ROLEtrue로 설정합니다. 다음 예제를 참조하십시오.

ECS_ENABLE_TASK_IAM_ROLE=true

3.    호스트 네트워크 모드의 컨테이너에 있는 작업에 대해 IAM 역할을 활성화하려면 ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOSTtrue로 설정합니다. 다음 예제를 참조하십시오.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

4.    구성 파일을 업데이트하려면 다음 명령 중 하나를 실행하여 AECS 컨테이너 에이전트를 다시 시작합니다.

Amazon ECS 최적화 Amazon Linux AMI의 경우:

sudo stop ecs
sudo start ecs

Amazon ECS 최적화 Amazon Linux 2 AMI의 경우:

sudo systemctl restart ecs

IAM 정책과 Amazon ECS 작업 간에 올바른 신뢰 관계가 설정되어 있는지 확인

IAM 역할에 올바른 신뢰 관계가 설정되어 있는지 확인하려면 다음과 같이 IAM 정책을 업데이트합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ECS 컨테이너 에이전트의 프록시 설정 확인

Amazon ECS 컨테이너 에이전트 구성에 HTTP_PROXY를 사용 중인 경우 다음과 같이 NO_PROXY 설정을 적용합니다.

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

적절한 AWS SDK를 사용 중인지 확인

컨테이너에서 실행 중인 애플리케이션은 2016년 7월 버전 이상의 AWS SDK 버전을 사용해야 합니다.

AWS SDK를 업데이트하려면 AWS에서 구축할 도구를 참조하십시오.

Amazon ECS 최적화 AMI 이외의 AMI에 대한 요구 사항 충족

Amazon ECS 최적화 AMI 이외의 AMI를 사용 중인 경우 iptables필요한 규칙을 설정합니다.

참고: 인스턴스를 다시 시작하면 iptables에 대한 규칙이 기본값으로 재설정됩니다. 재설정되지 않도록 하려면 다음 명령 중 하나를 실행하여 규칙을 저장합니다.

Amazon ECS 최적화 Amazon Linux AMI의 경우:

sudo service iptables save

Amazon ECS 최적화 Amazon Linux 2 AMI의 경우:

sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

자격 증명 경로 환경 변수를 비 PID 1 프로세스에 사용할 수 있도록 설정

AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 환경 변수는 컨테이너 내의 PID 1 프로세스에만 사용할 수 있습니다. 컨테이너에서 여러 프로세스 또는 init 프로세스(예: 래퍼 스크립트, 시작 스크립트 또는 supervisord)를 실행 중인 경우 비 PID 1 프로세스에 이 환경 변수를 사용할 수 없습니다.

비 PID 1 프로세스에 사용할 수 있도록 환경 변수를 설정하려면 .profile 파일의 환경 변수를 내보냅니다. 예를 들어, 다음 명령을 실행하여 컨테이너 이미지에 대한 Dockerfile의 변수를 내보냅니다.

RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile

이제 추가 프로세스에서 환경 변수에 액세스할 수 있습니다.

참고: 환경 변수를 내보낼 때 문자열 및 grep 명령에 대한 종속성이 적용됩니다.


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

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?