AWS EKS 실습/EKS Beginner

Create An OIDC Identity Provider

Clark Shim 2021. 2. 25. 22:46

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/