서비스 계정에 대한 IAM 역할 - Eksctl 사용 설명서

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

서비스 계정에 대한 IAM 역할

작은 정보

eksctl는 EKS Pod Identity Associations를 통해 앱을 실행하는 EKS에 대한 세분화된 권한 구성을 지원합니다.

Amazon EKS는 여기에서 클러스터 운영자가 AWS IAM 역할을 Kubernetes 서비스 계정에 매핑할 수 있는 서비스 계정에 대한 역할(IRSA)]을 지원합니다.

이를 통해 EKS에서 실행되고 다른 AWS 서비스를 사용하는 앱에 대한 세분화된 권한 관리를 제공합니다. 여기에는 S3, 기타 데이터 서비스(RDS, MQ, STS, DynamoDB) 또는 AWS Load Balancer 컨트롤러 또는 ExternalDNS와 같은 Kubernetes 구성 요소를 사용하는 앱이 포함될 수 있습니다.

를 사용하여 IAM 역할 및 서비스 계정 페어를 쉽게 생성할 수 있습니다eksctl.

참고

인스턴스 역할을 사용하고 대신 IRSA를 사용하려는 경우 두 역할을 혼합해서는 안 됩니다.

작동 방법

EKS가 노출하는 IAM OpenID Connect Provider(OIDC)를 통해 작동하며, IAM 역할은 IAM OIDC Provider(특정 EKS 클러스터에만 해당)와 바인딩될 Kubernetes 서비스 계정에 대한 참조를 참조하여 구성해야 합니다. IAM 역할이 생성되면 서비스 계정에 해당 역할의 ARN이 주석()으로 포함되어야 합니다eks.amazonaws.com/role-arn. 기본적으로 서비스 계정은 역할 주석을 포함하도록 생성되거나 업데이트되며 플래그를 사용하여 비활성화할 수 있습니다--role-only.

EKS 내에는 포드에서 사용하는 서비스 계정의 주석을 기반으로 AWS 세션 자격 증명을 역할의 포드에 각각 주입하는 승인 컨트롤러가 있습니다. 자격 증명은 AWS_ROLE_ARNAWS_WEB_IDENTITY_TOKEN_FILE 환경 변수에 의해 노출됩니다. 최신 버전의 AWS SDK가 사용되는 경우(정확한 버전에 대한 자세한 내용은 여기 참조) 애플리케이션은 이러한 자격 증명을 사용합니다.

리소스 eksctl 이름에는 IAM 역할 및 서비스 계정 페어를 나타내는 iamserviceaccount가 있습니다.

CLI에서 사용

참고

서비스 계정에 대한 IAM 역할에는 Kubernetes 버전 1.13 이상이 필요합니다.

IAM OIDC Provider는 기본적으로 활성화되어 있지 않습니다. 다음 명령을 사용하여 활성화하거나 구성 파일을 사용할 수 있습니다(아래 참조).

eksctl utils associate-iam-oidc-provider --cluster=<clusterName>

IAM OIDC 공급자가 클러스터와 연결되면 서비스 계정에 바인딩된 IAM 역할을 생성하려면 다음을 실행합니다.

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --namespace=<serviceAccountNamespace> --attach-policy-arn=<policyARN>
참고

둘 이상의 정책을 사용하도록 --attach-policy-arn 여러 번 지정할 수 있습니다.

보다 구체적으로, 다음을 실행하여 S3에 대한 읽기 전용 액세스 권한이 있는 서비스 계정을 생성할 수 있습니다.

eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

기본적으로 default 네임스페이스에 생성되지만 다음과 같은 다른 네임스페이스를 지정할 수 있습니다.

eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --namespace=s3-app --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
참고

네임스페이스가 아직 없는 경우 네임스페이스가 생성됩니다.

클러스터에 서비스 계정이 이미 생성된 경우(IAM 역할 제외) --override-existing-serviceaccounts 플래그를 사용해야 합니다.

를 지정하여 IAM 역할에 사용자 지정 태그 지정을 적용할 수도 있습니다--tags.

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --tags "Owner=John Doe,Team=Some Team"

CloudFormation은 임의의 문자열을 포함하는 역할 이름을 생성합니다. 미리 결정된 역할 이름을 선호하는 경우 --role-name를 지정할 수 있습니다.

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-name "custom-role-name"

helm과 같은 다른 도구에서 서비스 계정을 생성하고 관리하는 경우를 사용하여 충돌--role-only을 방지합니다. 그러면 다른 도구가 역할 ARN 주석 유지 관리를 담당합니다. --override-existing-serviceaccountsroleOnly/--role-only 서비스 계정에 영향을 주지 않으며 역할은 항상 생성됩니다.

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-only --role-name=<customRoleName>

서비스 계정과 함께 사용할 기존 역할이 있는 경우 정책을 제공하는 대신 --attach-role-arn 플래그를 제공할 수 있습니다. 지정된 서비스 계정에서만 역할을 수임할 수 있도록 하려면 여기 관계 정책 문서를 설정해야 합니다.]

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --attach-role-arn=<customRoleARN>

서비스 계정 역할 권한을 업데이트하려면를 실행할 수 있습니다eksctl update iamserviceaccount.

참고

eksctl delete iamserviceaccount는에서 생성하지 않은 ServiceAccounts 경우에도 Kubernetes를 삭제합니다eksctl.

구성 파일 사용

구성 파일을 iamserviceaccounts 사용하여를 관리하려면에서 원하는 계정을 설정하고 iam.withOIDC: true 나열해야 합니다iam.serviceAccount.

모든 명령은를 지원--config-file하므로 노드 그룹과 동일한 방식으로 iamserviceaccount를 관리할 수 있습니다. eksctl create iamserviceaccount 명령은 --include--exclude 플래그를 지원합니다(이러한 작동 방식에 대한 자세한 내용은 이 섹션 참조). 또한 eksctl delete iamserviceaccount 명령은 --only-missing 도 지원하므로 노드 그룹과 동일한 방식으로 삭제를 수행할 수 있습니다.

참고

IAM 서비스 계정은 네임스페이스 내에서 범위가 지정됩니다. 즉, 이름이 같은 두 개의 서비스 계정이 서로 다른 네임스페이스에 존재할 수 있습니다. 따라서 서비스 계정을 , --include --exclude 플래그의 일부로 고유하게 정의하려면 이름 문자열을 namespace/name 형식으로 전달해야 합니다. 예:

eksctl create iamserviceaccount --config-file=<path> --include backend-apps/s3-reader

활성화 옵션은 cluster-autoscaler 및와 같은 잘 알려진 사용 사례와 함께 IRSA를 정책 목록에 대한 간단한 설명cert-manager으로 사용하기 위해 wellKnownPolicies 포함되어 있습니다.

지원되는 잘 알려진 정책 및의 기타 속성serviceAccounts구성 스키마에 문서화되어 있습니다.

에서 eksctl create cluster다음 구성 예제를 사용합니다.

# An example of ClusterConfig with IAMServiceAccounts: --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-13 region: us-west-2 iam: withOIDC: true serviceAccounts: - metadata: name: s3-reader # if no namespace is set, "default" will be used; # the namespace will be created if it doesn't exist already namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess" tags: Owner: "John Doe" Team: "Some Team" - metadata: name: cache-access namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess" - "arn:aws:iam::aws:policy/AmazonElastiCacheFullAccess" - metadata: name: cluster-autoscaler namespace: kube-system labels: {aws-usage: "cluster-ops"} wellKnownPolicies: autoScaler: true roleName: eksctl-cluster-autoscaler-role roleOnly: true - metadata: name: some-app namespace: default attachRoleARN: arn:aws:iam::123:role/already-created-role-for-app nodeGroups: - name: "ng-1" tags: # EC2 tags required for cluster-autoscaler auto-discovery k8s.io/cluster-autoscaler/enabled: "true" k8s.io/cluster-autoscaler/cluster-13: "owned" desiredCapacity: 1

이러한 필드를 설정하지 않고 클러스터를 생성하는 경우 다음 명령을 사용하여 필요한 모든 것을 활성화할 수 있습니다.

eksctl utils associate-iam-oidc-provider --config-file=<path> eksctl create iamserviceaccount --config-file=<path>

추가 정보