인증
은 신원은 식별하는 작업으로 사용자가 누구인지를 확인한다.
Amazon EKS를 사용하는 경우는 주로 IAM
에서 해당 작업을 처리하며
OIDC 자격 증명 공급자
를 통해 클러스터에 대한 사용자 액세스를 관리 할 수 있다.
권한 부여
는 인증된 사용자가 할 수 있는 작업을 결정한다.
Amazon EKS를 사용하는 경우 Kubernetes RBAC
에서 해당 작업을 처리한다. aws-auth ConfigMap에 IAM자격증명과 Kubernetes Role이 맵핑되어있어야 한다.
OIDC :OpenID Connect의 약자로 권한허가 프로토콜인 OAuth 2.0 기술을 이용하여 만들어진 인증 레이어로 JSON포맷을 이용한 RESTful API 형식을 사용 하여 인증 한다.
$ kubectl rbac -lookup -k group // rbac 그룹확인
$ kubectl get clusterroles cluster-admin // cluster-admin 룰 확인
kubernetes 서비스 계정
은 rbac의 주체 유형중 하나로 Role 혹은 ClusterRole에 바인딩하여 kubernetes 권한
을 부여해 준다.
서비스 계정은 namespace에 할당되며 특별이 지정을 하지 않는다면 default namespace가 설정된다. 서비스 계정은 RBAC 자체에 저장되며, 각 서비스 계정에는 kubernetes 보안 정보가 저장된 토큰이 연결되어있다.
이러한 토큰은 Pod가 시작될때 Pod에 할당된다.
$kubectl create namespace test-ns //test-ns name
$kubectl -n test-ns get serviceaccounts // namespace 해당하는 sa 확인
$kubectl -n test-ns get secretes // 토큰정보 확인
$kubectl describe serviceaccount test-sa // sa의 정보 확인
Pod에서 특정한 기능을 사용하기 위해서 kubernetes api를 활용해야할 수 있다. 이때 권한을 확인하기 때문에 이런식으로 원하는 권한을 부여한 서비스 계정을 만들어서 Pod에서 kubernetes api의 필요한 기능을 사용할 수 있다.
서비스 계정 사용
1. namespace 생성
2. service account 생성 (namespace 지정)
3. role 생성
4. service account 와 role 바인딩
5. 원하는 Pod의 PodSpec에 service account 정보 추가
다른 AWS 서비스를 호출해야하는 Pod에서는 그 서비스를 이용 할 수 있는 권한이 필요하다 이처럼 AWS API를 사용하기 위해 Pod에 권한 부여가 필요하다.
Kubernetes 서비스 계정을 사용해서 Pod에 권한을 직접 할당하는 방법을 주로 이용하며, 서비스 계정의 IAM 역할(IRSA)를 사용한다. 이를 통해 OpenID Connect 공급자로 토큰에 디지털 서명이 가능하며 서비스계정에 IAM 역할을 할당 할 수 있다.
IRSA를 사용할 각 Pod의 PodSpec에서는 사용할 kubernetes서비스 계정의 이름과 함께 아래의 두가지 환경 변수가 필요하다.
PodSpec:
spec: serviceAccountName
env: AWS_ROLE_ARN
AWS_WEB_IDENTITY_TOKEN_FILE
생성된 서비스 계정에는 metadata annotations를 통해서
이 서비스 계정을 사용하는 Pod에서 맡을 IAM 역할의 ARN을 추가해야한다.
ARN : amazon 리소스 이름으로 AWS 리소스를 고유하게 식별한다. 주로 IAM 정책, Amazon RDS 태그등에 사용.
컨트롤 플레인과 통신하기 위한 Amazon EKS 클러스터의 API 엔드포인트는 기본적으로는 퍼블릭 상태이다. public 상태이지만 연결과정에서는 kubernetes 사용자 또는 서비스 계정으로 인증 과정을 거쳐야한다.
API Endpoint
가능
하다 있다
. 가능
하다 불가능
하다 암호, 토큰, SSH키 같은 중요 정보들은 외부에 노출되지 않고 안전하게 관리되어야 한다. 이를 위해서 AWS Secret Manager 와 같은 서비스를 이용하며
해당 정보들을 중앙에서 관리하고 변경할 수 있다.