Create An OIDC Identity Provider
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 참고
The eksctl command line utility - Amazon EKS
The GitTag version should be at least 0.38.0. If not, check your terminal output for any installation or upgrade errors, or replace the address in step 1 with https://github.com/weaveworks/eksctl/releases/download/0.38.0/eksctl_Linux_amd64.tar.gz and compl
docs.aws.amazon.com
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)
잡 리소스 및 스케줄링
작업을 완료한 후 종료되는 테스크만 실행하길 원하는 경우가 있다. 하지만 레플리케이션컨트롤러, 레플리카셋 및 데몬셋은 작업의 완료를 고려하지 않고 계속적으로 태스크를 실행한다. 따라
clarkshim.tistory.com
ㅁ 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/