Pod Identity는 IRSA와 다르게 OIDC를 사용하지 않고 pod identity agent라는 agent를 통해 토큰을 injection 하여 작동하는 방식으로 작동한다.
OIDC를 사용하지 않기 때문에 IAM OIDC 제한인 100 클러스터를 넘게 사용할 수 있다.
또한 pods.eks.amazonaws.com 이라는 trust policy만 작성하면 되며 기존에 IRSA처럼 trust policy에 OIDC id와 service account namespace, name을 적어줄 필요가 없어 관리가 수월하고 크기 제한이 없어졌으며 여러 클러스터에 동일한 role을 부여하는 것이 가능해졌다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
JSON
복사
토큰을 발급할때 sts tag에 해당 pod의 대한 정보를 작성해 주기 때문에 이 tag에 따른 policy를 적어줄 수 있어 조금 더 자세한 제한이 가능하다.
•
아래의 명령어로 설치가 가능하다.
aws eks create-addon --cluster-name $CLUSTER_NAME --addon-name eks-pod-identity-agent --region ap-northeast-2
Shell
복사
•
cluster.yaml 이면 아래와 같이 추가해주면 된다.
addons:
- name: coredns
- name: vpc-cni
podIdentityAssociations:
- namespace: kube-system
serviceAccountName: aws-node
permissionPolicyARNs:
- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: kube-proxy
- name: eks-pod-identity-agent # <--
YAML
복사
iam:
withOIDC: false
podIdentityAssociations:
- namespace: default
serviceAccountName: my-app
permissionPolicyARNs:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
YAML
복사
apiVersion: v1
kind: Pod
metadata:
name: my-app
namespace: default
labels:
app: my-app
spec:
serviceAccountName: my-app
containers:
- name: my-app
image: amazon/aws-cli
command:
- sleep
- "999999"
restartPolicy: Always
YAML
복사
kubectl apply -f pod.yaml
Shell
복사
kubectl create serviceaccount my-app -n default # 없다면 생성하기
Shell
복사
aws eks list-pod-identity-associations --cluster-name $CLUSTER_NAME
Shell
복사
•
S3 조회가 성공적으로 되는 모습 확인 가능