이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
EKS Pod Identity가 포드에 AWS 서비스에 대한 액세스 권한을 부여하는 방법 알아보기
포드의 컨테이너에 있는 애플리케이션은 AWS SDK 또는 AWS CLI를 사용하여 AWS ID 및 액세스 관리(IAM) 권한을 사용하여 AWS 서비스에 API 요청을 할 수 있다. 애플리케이션은 AWS 자격 증명으로 AWS API 요청에 서명해야 합니다.
EKS Pod Identity는 Amazon EC2 인스턴스 프로필이 Amazon EC2 인스턴스에 자격 증명을 제공하는 것과 비슷한 방식으로 애플리케이션에 대한 자격 증명을 관리하는 기능을 제공합니다. AWS 자격 증명을 생성하여 컨테이너에 배포하거나 Amazon EC2 인스턴스의 역할을 사용하는 대신에 IAM 역할을 Kubernetes 서비스 계정과 연결하고 서비스 계정을 사용하도록 포드를 구성합니다.
각 EKS Pod Identity 연결은 역할을 지정된 클러스터의 네임스페이스에 있는 서비스 계정에 매핑합니다. 여러 클러스터에 동일한 애플리케이션이 있는 경우 역할의 신뢰 정책을 수정하지 않고 각 클러스터에서 동일한 연결을 생성할 수 있습니다.
포드가 연결이 있는 서비스 계정을 사용하는 경우 Amazon EKS는 포드의 컨테이너에 환경 변수를 설정합니다. 환경 변수는 AWS CLI를 포함한 AWS SDK를 구성하여 EKS Pod Identity 보안 인증 정보를 사용합니다.
EKS Pod Identity의 이점
EKS Pod Identity는 다음 이점을 제공합니다.
-
최소 권한 – IAM 권한의 범위를 서비스 계정으로 지정할 수 있습니다. 그러면 해당 서비스 계정을 사용하는 포드만 이 권한에 액세스할 수 있습니다. 또한 이 기능을 사용하면
kiam
,kube2iam
같은 타사 솔루션이 필요 없습니다. -
자격 증명 격리 - Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 대한 액세스가 제한되면 포드의 컨테이너는 컨테이너가 사용하는 서비스 계정과 연결된 IAM 역할에 대한 자격 증명만 검색할 수 있습니다. 컨테이너는 다른 포드의 다른 컨테이너에서 사용하는 자격 증명에 액세스할 수 없습니다. IMDS가 제한되지 않으면 포드의 컨테이너도 Amazon EKS 노드 IAM 역할에 액세스할 수 있으며 컨테이너는 동일한 노드에 있는 다른 포드의 IAM 역할 자격 증명에 액세스할 수도 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로필에 대한 액세스 제한 부분을 참조하세요.
참고
hostNetwork: true
로 구성된 포드는 항상 IMDS 액세스 권한이 있지만 AWS SDK와 CLI는 활성화된 경우 Pod Identity 자격 증명을 사용합니다.
-
감사 - 소급적 감사를 위해 AWS CloudTrail을 통해 액세스 및 이벤트 로깅이 가능합니다.
중요
컨테이너는 보안 경계가 아니며 Pod Identity를 사용해도 이는 변경되지 않습니다. 동일한 노드에 할당된 포드는 커널과 포드 구성에 따라 잠재적으로 다른 리소스를 공유하게 됩니다. 별도의 노드에서 실행되는 포드는 컴퓨팅 계층에서 격리되지만, 개별 인스턴스의 범위를 넘어서는 추가 권한이 있는 노드 애플리케이션이 Kubernetes API에 있습니다. 몇 가지 예로 kubelet
, kube-proxy
, CSI 스토리지 드라이버 또는 자체 Kubernetes 애플리케이션이 있습니다.
EKS Pod Identity는 OIDC ID 제공업체를 사용하지 않으므로 서비스 계정에 대한 IAM 역할에 비해 간단한 방법입니다. EKS Pod Identity의 개선 사항:
-
독립적 운영 - 많은 조직에서 OIDC ID 제공업체를 만드는 것은 Kubernetes 클러스터를 관리하는 팀이 아닌 다른 팀의 책임입니다. EKS Pod Identity는 업무가 분명히 분리되어 있어 EKS Pod Identity 연결의 모든 구성은 Amazon EKS에서, IAM 권한의 모든 구성은 IAM에서 이루어집니다.
-
재사용 가능성 - EKS Pod Identity는 서비스 계정에 대한 IAM 역할이 사용하는 각 클러스터에 대해 별도의 보안 주체 대신 단일 IAM 보안 주체를 사용합니다. IAM 관리자는 모든 역할의 신뢰 정책에 다음 보안 주체를 추가하여 EKS Pod Identity에서 사용할 수 있도록 합니다.
"Principal": { "Service": "pods.eks.amazonaws.com" }
-
확장성 - 각 임시 자격 증명 세트는 각 포드에서 실행하는 각 AWS SDK 대신 EKS Pod Identity의 EKS Auth 서비스에서 수임합니다. 그러면 각 노드에서 실행되는 Amazon EKS Pod Identity 에이전트가 SDK에 보안 인증 정보를 발급합니다. 따라서 부하가 각 노드당 한 번으로 줄어들고 각 포드에 중복되지 않습니다. 프로세스의 자세한 내용은 EKS Pod Identity 작동 방식 이해 섹션을 참조하세요.
두 대안의 비교에 대한 자세한 내용은 Kubernetes 서비스 계정을 사용하여 Kubernetes 워크로드에 AWS에 대한 액세스 권한 부여 섹션을 참조하세요.
EKS Pod Identity 설정 개요
다음 절차를 완료하여 EKS Pod Identity를 활성화합니다.
-
Amazon EKS Pod Identity 에이전트 설정 - 각 클러스터에 대해 한 번만 이 절차를 완료합니다. 클러스터에서 EKS Auto Mode가 활성화된 경우 이 단계를 완료할 필요가 없습니다.
-
Kubernetes 서비스 계정에 IAM 역할 할당 - 애플리케이션에 부여하려는 고유한 권한 세트에 대해 이 절차를 완료합니다.
-
서비스 계정으로 AWS 서비스에 액세스하도록 포드 구성 - AWS 서비스에 액세스해야 하는 각 포드에 대해 이 절차를 완료합니다.
-
AWS SDK와 함께 Pod Identity 사용 - 워크로드가 지원되는 버전의 AWS SDK를 사용하고 워크로드가 기본 보안 인증 정보 체인을 사용하는지 확인합니다.
Limits
-
Kubernetes 서비스 계정에 IAM 역할 매핑을 위해 클러스터당 최대 5,000개의 EKS Pod Identity 연결이 지원됩니다.
고려 사항
-
IAM 역할 연결: 클러스터의 각 Kubernetes 서비스 계정은 클러스터와 동일한 AWS 계정에서 하나의 IAM 역할과 연결할 수 있습니다. 역할을 변경하려면 EKS Pod Identity 연결을 편집합니다. 교차 계정 액세스의 경우 IAM 역할을 사용하여 역할에 대한 액세스 권한을 위임합니다. 자세한 내용은 IAM 사용 설명서의 튜토리얼: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임을 참조하세요.
-
EKS Pod Identity 에이전트: EKS Pod Identity를 사용하려면 Pod Identity 에이전트가 필요합니다. 에이전트는 클러스터 노드에서 Kubernetes
DaemonSet
로 실행되어 동일한 노드의 포드에만 자격 증명을 제공합니다. 또한 링크-로컬 주소(IPv4의 경우169.254.170.23
, IPv6의 경우[fd00:ec2::23]
)에서 포트80
과2703
을 사용하는 노드의hostNetwork
를 이용합니다. 클러스터에서 IPv6가 비활성화된 경우 Pod Identity 에이전트에 대해 IPv6를 비활성화하세요. 자세한 내용은 EKS Pod Identity 에이전트에서 IPv6 비활성화를 참조하세요. -
궁극의 일관성: EKS Pod Identity 연결은 궁극적으로 일관성을 유지하지만 API 직접 호출 후 몇 초의 지연이 발생할 수 있습니다. 중요하고 가용성이 높은 코드 경로에서 연결을 생성하거나 업데이트하지 마세요. 대신, 빈도가 낮은 별도의 초기화 또는 설정 루틴에서 이러한 작업을 수행하세요. 자세한 내용은 EKS 모범 사례 가이드의 Security Groups Per Pod를 참조하세요.
-
프록시 및 보안 그룹 고려 사항: 프록시를 사용하는 포드의 경우
no_proxy/NO_PROXY
환경 변수에169.254.170.23
(IPv4)과[fd00:ec2::23]
(IPv6)를 추가하여 EKS Pod Identity 에이전트에 대한 요청 실패를 방지하세요. AWS VPC CNI와 함께 포드의 보안 그룹을 사용하는 경우ENABLE_POD_ENI
플래그를 'true'로 설정하고POD_SECURITY_GROUP_ENFORCING_MODE
플래그를 'standard'로 설정합니다. 자세히 알아보려면 개별 포드에 보안 그룹 할당을 참조하세요.
EKS Pod Identity 클러스터 버전
EKS Pod Identity를 사용하려면 클러스터의 플랫폼 버전이 다음 표에 나열된 버전과 동일한 버전 또는 이후 버전이거나 Kubernetes 버전이 표에 나열된 버전보다 이후 버전이어야 합니다. Kubernetes 버전용 Amazon EKS Pod Identity 에이전트의 권장 버전을 찾으려면 Amazon EKS 추가 기능 버전의 클러스터와의 호환성 확인 섹션을 참조하세요.
Kubernetes 버전 | 플랫폼 버전 |
---|---|
나열되지 않은 Kubernetes 버전 |
모든 플랫폼 버전 지원 |
|
|
|
|
|
|
EKS Pod Identity 제한 사항
EKS Pod Identity는 다음에서 사용 가능합니다.
-
이전 주제 EKS Pod Identity 클러스터 버전에 나열된 Amazon EKS 클러스터 버전.
-
Linux Amazon EC2 인스턴스인 클러스터의 워커 노드.
EKS Pod Identity는 다음에서 사용할 수 없습니다.
-
AWS Outposts
-
Amazon EKS Anywhere.
-
Amazon EC2에서 생성하고 실행하는 Kubernetes 클러스터. EKS Pod Identity 구성 요소는 Amazon EKS에서만 사용할 수 있습니다.
다음에서는 EKS Pod Identity를 사용할 수 없습니다.
-
Linux Amazon EC2 인스턴스를 제외한 모든 위치에서 실행되는 포드. AWS Fargate(Fargate)에서 실행되는 Linux 및 Windows 포드는 지원되지 않습니다. Windows Amazon EC2 인스턴스에서 실행되는 포드는 지원되지 않습니다.