Ssoon

[6주차] EKS Security - RBAC 본문

AWS EKS Workshop Study

[6주차] EKS Security - RBAC

구구달스 2023. 5. 31. 07:10
CloudNet@ 팀의 AWS EKS Workshop Study 6주차 정리입니다.
#EKS Immersion Workshop 의 내용입니다.

 

User 생성

  • rbac-user라는 새 사용자를 생성하고 자격 증명을 생성/저장합니다.
aws iam create-user --user-name rbac-user
aws iam create-access-key --user-name rbac-user | tee /tmp/create_output.json
  • CLI 정보 확인

  • Console 정보 확인

  • 클러스터를 생성한 admin 과 rbac-user 사이를 쉽게 전환하려면 다음 명령을 실행하여 소스가 제공되면 active 사용자를 rbac-user로 설정하는 스크립트를 생성합니다.
cat << EoF > rbacuser_creds.sh
export AWS_SECRET_ACCESS_KEY=$(jq -r .AccessKey.SecretAccessKey /tmp/create_output.json)
export AWS_ACCESS_KEY_ID=$(jq -r .AccessKey.AccessKeyId /tmp/create_output.json)
EoF

 

사용자를 K8S에 매핑

  • rbac-user라는 k8s 사용자를 정의하고 IAM 사용자에 매핑합니다.
eksctl create iamidentitymapping \
  --cluster myeks \
  --arn arn:aws:iam::${ACCOUNT_ID}:user/rbac-user \
  --username rbac-user

  • 생성 정보를 확인합니다.
kubectl describe cm aws-auth -n kube-system

 

사용자 테스트

  • 새로 생성된 rbac 사용자로 클러스터에 액세스 합니다.
  • rbac-user의 AWS IAM 사용자 환경 변수를 
. rbacuser_creds.sh
  • AWS 환경변수가 설정되어 기본 admin 사용자 또는 역할을 재정의
  • "rbacuser_creds.sh"는 일반적으로 Kubernetes 클러스터 내에서 Role-Based Access Control (RBAC)을 사용하여 특정 사용자에게 부여된 자격 증명 정보를 저장하는 스크립트 파일

  • Pod를 조회하면 Error가 발생합니다.

  • 사용자를 만드는 것만으로는 해당 사용자가 클러스터의 리소스에 액세스할 수 없으며 role 을 정의한 다음 사용자를 해당 role 에 바인딩해야 합니다

 

Role and Role Binding 생성

  • 기본 관리 사용자로 다시 전환합니다.
  • rbac-user로 정의하는 환경 변수의 설정을 취소합니다.
unset AWS_SECRET_ACCESS_KEY
unset AWS_ACCESS_KEY_ID
  • admin 사용자 정보를 확인합니다.

  • kube-system 네임스페이스에 대해서만 액세스 권한을 제공하는 pod-reader라는 역할을 생성합니다. 
cat << EoF > rbacuser-role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: kube-system
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["list","get","watch"]
- apiGroups: ["extensions","apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch"]
EoF
  • RoleBinding 리소스와 함께 바인딩합니다.
cat << EoF > rbacuser-role-binding.yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: kube-system
subjects:
- kind: User
  name: rbac-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
EoF
  • Role과 RoleBinding을 적용합니다.
kubectl apply -f rbacuser-role.yaml
kubectl apply -f rbacuser-role-binding.yaml

 

Role and Role Binding 확인

  • 역할 및 역할 바인딩이 정의되었으므로 rbac-user로 다시 전환하여 테스트합니다.
  • rbac-user로 다시 전환하려면 rbac-user 변수의 소스가 되는 다음 명령을 실행하고 변수가 실행되었는지 확인합니다.
. rbacuser_creds.sh; aws sts get-caller-identity

  • 정상적으로 kube-system 네임스페이스의 Pod를 조회할 수 있습니다.

  • 하지만 정의되지 않은 다른 네임스페이스의 액세스를 할 수 없습니다.

 
Comments