Cluster에서 Service Accounts를 위한 IAM Role을 사용하기 위해서는 IAM Console에서 OIDC identity provider를 생성해야 한다.
먼저 eksctl version을 확인하여 0.5.1보다 버전이 낮다면 eksctl을 업그레이드 해야 한다.
eksctl version
docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl 참고
cluster에 OIDC Identity Provider를 생성한다.
eksctl utils associate-iam-oidc-provider --cluster eksworkshop-eksctl --approve
IAM Console에서 OIDC provider를 볼 수 있다.
이 예제에서는 AmazonS3ReadOnlyAccess에 대한 get과 list 권한이 있어야 한다.
aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3ReadOnlyAccess`].Arn'
[
"arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
]
S3에 Read-Only로 Service Account에게 제공하기 위한 IAM Role은 다음과 같이 생성한다.
eksctl create iamserviceaccount \
--name iam-test \
--namespace default \
--cluster eks-newelite-eksctl \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
--approve \
--override-existing-serviceaccounts
iam-test가 정상적으로 만들어졌는지 확인한다.
kubectl get sa iam-test
kubectl describe sa iam-test
필요한 구성을 완료하여 두개의 kubernetes Job을 실행한다. Job은 새로 생성된 IAM Role로
- job-s3.yaml: aws s3 ls (이 job은 성공해야 함)
- job-ec2.yaml: aws ec2 describe-instance --region ${AWS_REGION} (이 job은 실패해야 함)
Job에 대한 설명 (clarkshim.tistory.com/80)
ㅁ List S3 buckets
만들어진 iam-test 서비스 어카운트가 S3 buckets을 리스트 할 수 있는지 테스트 해본다.
mkdir ~/environment/irsa
cat <<EoF> ~/environment/irsa/job-s3.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: eks-iam-test-s3
spec:
template:
metadata:
labels:
app: eks-iam-test-s3
spec:
serviceAccountName: iam-test
containers:
- name: eks-iam-test
image: amazon/aws-cli:latest
args: ["s3", "ls"]
restartPolicy: Never
EoF
kubectl apply -f ~/environment/irsa/job-s3.yaml
job이 만들어지면 확인해보자
kubectl get job -l app=eks-iam-test-s3
kubectl logs -l app=eks-iam-test-s3
ㅁ List EC2 Instances
cat <<EoF> ~/environment/irsa/job-ec2.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: eks-iam-test-ec2
spec:
template:
metadata:
labels:
app: eks-iam-test-ec2
spec:
serviceAccountName: iam-test
containers:
- name: eks-iam-test
image: amazon/aws-cli:latest
args: ["ec2", "describe-instances", "--region", "${AWS_REGION}"]
restartPolicy: Never
backoffLimit: 0
EoF
kubectl apply -f ~/environment/irsa/job-ec2.yaml
kubectl get job -l app=eks-iam-test-ec2
kubectl logs -l app=eks-iam-test-ec2
ㅁ Cleanup
kubectl delete -f ~/environment/irsa/job-s3.yaml
kubectl delete -f ~/environment/irsa/job-ec2.yaml
eksctl delete iamserviceaccount \
--name iam-test \
--namespace default \
--cluster eksworkshop-eksctl \
--wait
rm -rf ~/environment/irsa/
'AWS EKS 실습 > EKS Beginner' 카테고리의 다른 글
EKS Network 정책 실습 (w/Calico) (0) | 2021.02.26 |
---|---|
Security Groups For Pods (0) | 2021.02.26 |
Kubernetes access 관리를 위한 IAM Groups 사용 (1) | 2021.02.25 |
Intro to RBAC (0) | 2021.02.24 |
Autoscaling with HPA and CA (0) | 2021.02.24 |