AWS

AWS_ EKS IRSA(IAM Role for Service Account)

우당탕탕인생기 2023. 10. 12. 10:11

 

AWS에서 가장 추천하는 보안 정책은 최소한의 권한을 부여하는것이다. 이것은  Least Privilege Principle 이라고 불린다.

 

AWS EKS IRSA 의 필요성

 

EKS의 경우 하나의 ec2가 하나의 워커노드가 되는데, 이는 결국 하나의 ec2내에 여러개의 파드가 운영된다는 것이다.

IAM 정책은 ec2 단위로 사용할 수 있어 파드별로 권한을 줄 수 없게 된다.

예를 들어 하나의 ec2 내에 DB파드와 kinesis운영 파드를 운영한다면 하나의 워커노드에 이 두가지를 동시에 할 수 있는 권한을 주게 되는데 이것이 Least Privilege Principle 에 위배 된다.

 

이렇게 하나의 워커노드안에 파드는 같은 iam을 공유한다.

 

이 때 사용가능한 것이 aws 기능 중 하나인  IRSA(IAM Role for Service Account) 이다.

이 방법을 통해서는 pod별로 권한을 줄 수 있게 된다.


IAM 과 Cluster 연결

본격적으로 IRSA을 하기 전에 aws의 IAM 서비스와 Cluster가 연결 되어야 한다.

 

이를 위해  OpenID Connect provider URL을 이용하여 IAM의 Identity provider를 생성해야 한다.

eksctl utils associate-iam-oidc-provider --region=ap-northeast-2 --cluster=<cluster name> --approve

 

 

 

EKS Iamserviceaccount 생성

 

이제 IRSA을 생성해보자

eksctl create iamserviceaccount \
--namespace=<namespace> \
--cluster=<cluster-name> \
--name=<iamserviceaccount name> \
--attach-policy-arn=arn:aws:iam::<aws id number>:policy/<policy name> \
--override-existing-serviceaccounts \
--approve

이렇게 다양한 파라미터들이 있다.

 

 

그리고 내가 생성한 sa을 확인할 수 있다.

kubectl describe serviceaccount my-service-account -n default

 

 

pod 생성

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  namespace: default # Service Account와 같은 namespace 
spec:
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - name: test
          image: nginx
      serviceAccountName: my-serviceAccountName

마지막에 serviceAccountName 만 추가로 작성해주면 해당 파드는 사전에 만든 IRSA 권한만 부여 된다.

 

 

'AWS' 카테고리의 다른 글

AWS_ Spot instance  (0) 2023.10.11
AWS_eksctl 개념 및 설치 방법  (0) 2023.10.11
AWS_EKS (kubectl , helm 설치)  (0) 2023.10.03
AWS_VPC 개념  (0) 2023.09.02