서비스 계정에 대한 IAM 역할 - Amazon EKS

서비스 계정에 대한 IAM 역할

IAM 역할을 Kubernetes 서비스 계정에 연결합니다. 이렇게 하면 이 서비스 계정에서는 해당 서비스 계정을 사용하는 모든 pod에 있는 컨테이너에 AWS 권한을 제공할 수 있습니다. 이 기능을 사용하면 해당 노드의 Amazon EKS 노드 IAM 역할에서 pods API를 호출할 수 있도록 AWS에 확장된 권한을 제공할 필요가 없습니다.

애플리케이션은 AWS 자격 증명으로 AWS API 요청에 서명해야 합니다. 이 기능은 Amazon EC2 인스턴스 프로파일이 Amazon EC2 인스턴스에 자격 증명을 제공하는 것과 비슷한 방식으로 애플리케이션에서 자격 증명을 관리할 수 있는 전략을 제공합니다. AWS 자격 증명을 생성하여 컨테이너에 배포하거나 Amazon EC2 인스턴스의 역할을 사용하는 대신에 IAM 역할을 Kubernetes 서비스 계정과 연결할 수 있습니다. 그러면 pod의 컨테이너에서 애플리케이션이 AWS SDK 또는 AWS CLI를 사용하여 인증된 AWS 서비스로 API 요청을 할 수 있습니다.

중요

Kubernetes 서비스 계정에 IAM 역할을 할당하더라도 IMDS에 대한 pod 액세스를 차단하지 않는 한 pod에는 Amazon EKS 노드 IAM 역할에 할당된 권한도 있습니다. 자세한 내용은 워커 노드에 할당된 인스턴스 프로파일에 대한 액세스 제한 섹션을 참조하세요.

서비스 계정 기능의 IAM 역할을 통해 다음과 같은 이점을 누릴 수 있습니다.

  • 최소 권한 - 서비스 계정의 IAM 역할 기능을 사용하면, 더 이상 노드의 pods가 AWS API를 호출할 수 있도록 노드 IAM 역할에 확장된 권한을 제공할 필요가 없습니다. IAM 권한의 범위를 서비스 계정으로 지정할 수 있습니다. 그러면 해당 서비스 계정을 사용하는 pods만 이 권한에 액세스할 수 있습니다. 또한 이 기능을 사용하면 kiam, kube2iam 같은 타사 솔루션이 필요 없습니다.

  • 자격 증명 격리 - 컨테이너는 컨테이너가 속한 서비스 계정과 연결된 IAM 역할에 대한 자격 증명만 검색할 수 있습니다. 컨테이너는 다른 pod에 속한 다른 컨테이너를 위한 자격 증명에는 액세스할 수 없습니다.

  • 감사 - CloudTrail을 통한 액세스 및 이벤트 로깅을 사용하여 소급적 감사를 지원합니다.

세 단계로 서비스 계정이 AWS 리소스에 액세스할 수 있도록 설정

  1. 클러스터에 대한 IAM OIDC 공급자 생성 - 클러스터에 대해 한 번만 이 작업을 수행하면 됩니다.

  2. IAM 역할을 생성하여 서비스 계정에 필요한 권한으로 IAM 정책을 역할에 연결 - pods에 필요한 각각의 고유한 권한 컬렉션에 대해 별도의 역할을 만드는 것이 좋습니다.

  3. IAM 역할을 서비스 계정에 연결 - AWS 리소스에 액세스해야 하는 각 Kubernetes 서비스 계정에 대해 이 태스크를 완료합니다.

  4. 서비스 계정에 대한 AWS Security Token Service 엔드포인트 유형 구성 - 클러스터가 버전 1.18 이상인 경우 서비스 계정에 대해 이 작업을 선택적으로 완료할 수 있습니다.