Day 71 - RBAC, Network policy
오늘 한 내용
- kubernetes RBAC / Network Policy
- AWS ecr 사용하기
쿠버네티스 클러스터에 보안을 적용할 수 있는 방법으로는 두가지가 있다
1. RBAC
2. Network Policy
1. RBAC
RBAC은 사용자에게 권한을 주는 방법과, 리소스에 권한을 주는 방법(servicr account)으로 나눠진다
<< 리소스에 권한을 주는 방법(servicr account)은 따로 포스팅하지 않는다 >>
user에게 eks 권한주기
순서
1. IAM User를 만든다
2. Role (yaml)
3. RoleBinding (yaml)
- 어떤 role을 누구에게 연결할 지 결겅
- 누구에게 연결 = subject : 1. 서비스 어카운트 2. User/Group
4. kube-system namespace에 있는 aws-auth configmap에 아래와 같이 User정보 추가
kubectl edit cm aws-auth -n kube-system
------ kubectl aws-auth cm 수정
참고 https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/add-user-role.html
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::--:role/eksctl-gymin-nodegroup-
username: system:node:{{EC2PrivateDNSName}}
## 여기 추가
mapUsers: |
- groups:
- student
userarn: arn:aws:iam::--:user/gymin-2
username: gymin-2
##
kind: ConfigMap
metadata:
creationTimestamp:
name: aws-auth
namespace: kube-system
resourceVersion: "17437"
uid:
** 권한을 받은 IAM User에서 차이를 확인해본다
1. EC2하나 생성 - aws config로 계정인증 (새로운 IAM)
2. cluster config 파일을 업데이트
aws eks update-kubeconfig --region us-west-1 --name gymin
3. kubectl 설치
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
4. 확인 (kubectl get ~~)
권한을 주었던 ns와 안준 ns 차이 확인
클러스터 모든 권한을 주기
role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: gymin2-cr
rules:
- apiGroups: ["*"] # 모든 권한
verbs: ["*"]
resources: ["*"]
rolebinding.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gymin2-rb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: gymin2-cr
subjects:
- kind: User
name: gymin-2
이미 kube-system의 cm은 수정되어있어 따로 추가하지 않았다
2. Network Policies
network policy란 k8s의 네인스페이스별로 보안사항을 따로 가져갈 수 있도록 하는것
https://kubernetes.io/docs/concepts/services-networking/network-policies/
network policy를 적용하기 전에 칼리코를 먼저 설치해야 한다!!
https://docs.aws.amazon.com/eks/latest/userguide/calico.html
manifest로 설치한다
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
칼리코는 데몬셋 형태로 설치된다
설치 확인
kubectl get daemonset calico-node --namespace calico-system
kubectl get pod --namespace calico-system
network policy yaml은 다음을 참고하여 생성하였다
https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/#networkpolicy-resource
이때 from --> podSelector는 같은 ns 안에서만 ! 사용함 // ns가 다른 pod에 적용할 수 없다
이 기능을 활용하여
3tier를 구성할때 front-ns (nginx) back-ns(tomcat / django) DB-ns(DB statefulset)를 구분하고
front-ns에서 DB로 바로 접근하지 못하도록 보안을 더 강화할 수 있다
오늘의 회고
- 사실 너무 피곤해서 network policy 부분에서 졸았다 ,, 눈떠보니 실습이 훅 건너가 있어서 어쩌지 하던참에 팀원분들과 사용할때 같이 공부하고 써보기로 했다
- 세미플젝은 따로 글을 업로드할 예정이다~