EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Secret 접근 부여하기
EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Secret 접근 부여하기
이 튜토리얼에서는 Amazon EKS Auto Mode 로드 밸런서 컨트롤러에 특정 Kubernetes Secret에 대한 읽기 접근을 부여합니다. 이는 ALB Ingress에서 OIDC 인증을 차단 해제합니다. eks:managed 그룹을 대상으로 하는 네임스페이스 범위 Role과 RoleBinding을 사용합니다.
이 튜토리얼은 완료하는 데 약 15분이 걸립니다. 만드는 Kubernetes RBAC 객체는 AWS 비용을 발생시키지 않습니다.
Amazon EKS Auto Mode 로드 밸런서 컨트롤러는 ALB Ingress 객체에서 OIDC 인증을 지원합니다. 이 인증을 활성화하려면 alb.ingress.kubernetes.io/auth-type: oidc 어노테이션을 사용해요. OIDC 구성을 해석하기 위해 컨트롤러는 alb.ingress.kubernetes.io/auth-idp-oidc 어노테이션에 이름이 지정된 Kubernetes Secret을 읽습니다. 관리형 접근 정책은 현재 Secret 객체에 대한 get을 부여하지 않으므로 reconciler는 다음과 유사한 메시지로 실패합니다.
Failed build model due to ingress: /:
secrets "" is forbidden:
User "arn:aws:sts:::assumed-role/AWSServiceRoleForAmazonEKS/"
cannot get resource "secrets" in API group "" in the namespace ""
Grant additional Kubernetes RBAC to EKS Auto Mode managed controllers에 설명된 메커니즘을 사용해 관리형 컨트롤러에 정확히 필요한 OIDC Secret에 대한 get을 부여할 수 있어요.
출처: 문서
본문
사전 조건
시작하기 전에 다음이 있는지 확인하세요.
- 자동 생성된
AWSServiceRoleForAmazonEKSaccess entry가 있는 Amazon EKS Auto Mode 클러스터. - 클러스터 접근으로 구성된
kubectl. aws sts get-caller-identity와aws eks describe-access-entry권한으로 설치·구성된 AWS CLI.alb.ingress.kubernetes.io/auth-type: oidc어노테이션을 사용하는 ALBIngress와 그것이 참조하는 KubernetesSecret.
1단계: 허용 목록에 추가할 Secret 식별
ALB Ingress의 OIDC 구성은 다음과 같습니다. Secret 이름과 Ingress 네임스페이스를 기록하세요 — RBAC 객체는 Secret과 같은 네임스페이스에 있어야 합니다.
annotations:
alb.ingress.kubernetes.io/auth-type: oidc
alb.ingress.kubernetes.io/auth-idp-oidc: >
{
"issuer": "...",
"authorizationEndpoint": "...",
"tokenEndpoint": "...",
"userInfoEndpoint": "...",
"secretName": "oidc"
}
이 예시의 나머지는 네임스페이스 monitoring과 Secret 이름 oidc를 사용합니다.
2단계: 네임스페이스 범위 Role과 RoleBinding 적용
이 형식은 정확히 한 네임스페이스에서 정확히 이름이 지정된 Secret에 정확히 get을 부여합니다. 다음을 eks-managed-oidc-secret-reader.yaml로 저장합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: eks-managed-oidc-secret-reader
namespace: monitoring
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["oidc"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: eks-managed-oidc-secret-reader
namespace: monitoring
subjects:
- kind: Group
name: eks:managed
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: eks-managed-oidc-secret-reader
apiGroup: rbac.authorization.k8s.io
적용합니다.
kubectl apply -f eks-managed-oidc-secret-reader.yaml
나중에 더 많은 Secret 객체를 허용 목록에 추가하려면 이름을 Role의 resourceNames 목록에 추가하고 다시 적용하세요.
3단계: Ingress 복구 확인
로드 밸런서 컨트롤러는 다음 패스(보통 몇 분 내)에서 Ingress를 다시 조정합니다. 부여가 작동하면 이전의 secrets "oidc" is forbidden 오류가 Ingress에 더 이상 나타나지 않고 로드 밸런서가 진행됩니다. 오류가 지속되면 Role의 namespace, resourceNames, RoleBinding의 subject를 다시 확인하세요.
부여 제거
Important: ALB
Ingress가alb.ingress.kubernetes.io/auth-type: oidc를 사용하는 한Role과RoleBinding을 유지하세요. 제거하면Ingress의 OIDC 해석이 다시 깨집니다.
Ingress에서 OIDC 사용을 중지하면 부여를 제거합니다.
kubectl delete rolebinding eks-managed-oidc-secret-reader -n monitoring
kubectl delete role eks-managed-oidc-secret-reader -n monitoring
관련 리소스
- Grant additional Kubernetes RBAC to EKS Auto Mode managed controllers —
eks:managed그룹 개요 및 부여 범위 설정 방법. - Grant IAM users access to Kubernetes with EKS access entries — Amazon EKS access entries.
- Using RBAC Authorization in the Kubernetes documentation.