AWS

AWS IRSA(IAM Roles for Service Accounts)란?

Somaz 2023. 5. 28. 01:01
728x90
반응형

Overview

오늘은 IRSA(IAM Roles for Service Accounts)에 대해서 공부해보려고 한다.

 

클러스터 내부에 있는 Pod가 다른 리소스들에 대한 권한을 얻는 것은 K8S의 자체 기능이며, 관련된 리소스로는 Role, RoleBinding, ClusterRole, ClusterRoleBinding과 ServiceAccount가 있다.

아래의 포스팅을 참고하길 바란다.

2023.05.10 - [Container Orchestration/Kubernetes] - Kuberntes Service Account란?

 

Kuberntes Service Account란?

Overview 오늘은 Kubernetes Service Account에 대해서 공부해보려고 한다. 먼저 간단하게 User Account와 Service Account에 대해 설명해보자면, 사용자 어카운트는 사람을 위한 것이다. 서비스 어카운트는 파드

somaz.tistory.com

2023.04.19 - [Container Orchestration/Kubernetes] - Kubernetes API Server, Group / RBAC란?

 

Kubernetes API Server, Group / RBAC란?

Overview 오늘은 Kubernets API Server, Group 그리고 RBAC 에 대해서 공부해보려고 한다. Kubernetes에 개념과 간단한 실습을 하고싶다면 아래의 링크를 참고하길 바란다. 2022.03.22 - [Container Orchestration/Kubernetes]

somaz.tistory.com


AWS IRSA(IAM Roles for Service Accounts)란?

 

AWS IRSA(IAM Roles for Service Accounts)는 AWS EKS(Elastic Kubernetes Service)에서 관리하는 Kubernetes 클러스터에서 실행되는 파드에서 ServiceAccount를 사용하여 AWS 서비스에 대한 액세스 권한을 부여하는 방법이다.

그렇다면 ServiceAccount는 AWS의 자원이 아닌데 어떻게 IAM Role을 할당할 수 있는 걸까?

바로 OIDC라고 부르는 OpenID Connect와 STS라고 부르는 Security Token Service 해당 기능을 수행해준다.

 


 

Service Account란?

Kubernetes Service Account는 쿠버네티스 클러스터 내에서 실행되는 팟(Pod)이 API 서버와 상호 작용할 수 있도록 권한을 부여하는 데 사용되는 자격증명이다. 서비스 어카운트는 특정 네임스페이스(namespace)에 속하며, 자동으로 생성되거나 사용자가 직접 생성할 수 있다.

 

AWS 에서 IAM Role 생성 + K8S에서 serviceaccount 생성

eksctl create iamserviceaccount --cluster=test-cluster --name=test-role --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3FullAccess --approve --profile <aws profile>

 

 

OIDC(OpenID Connect)란?

OIDC는 인증 서버에서 수행한 인증을 기반으로 앱이 최종 사용자의 신원을 확인할 수 있도록 하는 인증 프로토콜인 OpenID Connect의 약자이다.

OAuth 2.0 기술을 이용하여 만들어진 인증 레이어로 JSON 포맷을 이용하여 RESTful API 형식으로 인증을 하게 된다.

OpenID Connect는 OAuth 2.0 프로토콜 위에 구축되어 인증 서버가 리소스 소유자 또는 최종 사용자의 승인을 받아 타사 애플리케이션에 대한 액세스 토큰을 발급할 수 있다. 애플리케이션은 액세스 토큰을 사용하여 최종 사용자를 대신하여 API에 인증할 수 있으며, OIDC는 OAuth 2.0을 확장하여 ID 토큰을 도입하여 인증을 추가한다.

 

EKS OIDC 생성

eksctl utils associate-iam-oidc-provider --region=ap-northeast-2 --cluster=test-cluster --approve

 

 

EKS OIDC 조회

aws eks describe-cluster --name luxon --query "cluster.identity.oidc.issuer" --output text --profile <profile> --region <region>
https://oidc.eks.<region>.amazonaws.com/id/554xxxxxxxxxxxxxxxxxxxxxxxxxxx

 

 

AWS STS(Security Token Service)란? 

AWS 리소스에 접근할 수 있는 권한에 대해 임시자격 증명을 가져오도록 하는 서비스이다.


AWS IRSA Workflow

 

아래의 Workflow는 Pod에서 동작하는 Application이 AWS S3 Bucket list를 가져올때의 예시이다.

물론 EKS 내부의 다른 리소스들에 접근할 수 있는 권한 (EKS → EKS)이 있다는 가정다.

해당 권한은 보통 Kubernetes RBAC(Role-Based Access Control)로 설정한다.

출처 : https://aws.amazon.com/ko/blogs/containers/diving-into-iam-roles-for-service-accounts/

 

  1. JWT와 IAM Role 의 ARN정보를 AWS STS에게 전달 한다.
  2. STS는 AWS IAM에게 임시 자격증명을 줄 수 있는지 확인을 요청한다.
  3. IAM은 IAM OIDC Provider와 통신하고, Pod에 할당된 ServiceAccount에 IAM Role 정보가 Annotate되어 있는 지 확인한 후에 IAM에게 확인 되었다는 응답을 주게 된다.
  4. IAM은 STS에게 권한을 줘도 된다고 응답을 주게 된다.
  5. AWS STS는 Pod의 AWS SDK에게 임시 자격증명을 전달합니다.
  6. 최종적으로 Pod의 AWS SDK는 AWS S3의 리스트를 가져올 수 있게 된다.

JWT란?

JWT는 JSON 웹 토큰(JSON Web Token)의 약자로 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 표준(RFC 7519)이다. 디지털 서명되어 있으므로 확인하고 신뢰할 수 있다.

JWT는 비밀(HMAC 알고리즘 포함) 또는 RSA 또는 ECDSA를 사용하는 공개/개인 키 쌍을 사용하여 서명한다.

 


Reference

https://aws.amazon.com/ko/blogs/containers/diving-into-iam-roles-for-service-accounts/

 

https://kim-dragon.tistory.com/279

 

https://channel.io/ko/blog/tech-aws-cross-accounts-irsa

 

https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html

 

https://clarkshim.tistory.com/418

 

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_temp.html

728x90
반응형

'AWS' 카테고리의 다른 글

AWS Ingress Annotations 정리  (0) 2024.11.07
AWS Assume Role이란?  (0) 2024.11.04
AWS VPC란?  (0) 2023.04.07
AWS Cloudfront란? / Canary 및 Blue-Green 배포  (0) 2023.04.03
AWS Secrets Manager란?(OAuth, SSO)  (0) 2023.04.01