본문 바로가기

AWS/IAM

[AWS] IRSA(IAM Roles for Service Accounts) 란?

반응형

IRSA(IAM Roles for Service Accounts) 란?

AWS IRSA(Identity and Access Management (IAM) Roles for Service Accounts)는 AWS의 서비스 계정에 대한 식별 및 액세스 관리를 위한 기능 중 하나입니다. 이것은 Kubernetes 또는 Amazon EKS (Elastic Kubernetes Service)와 같은 서비스에서 사용됩니다.

기본적으로 Kubernetes 클러스터 내의 Pod는 AWS 서비스에 대한 작업을 수행할 때 IAM(Identity and Access Management) 역할을 가지지 않습니다. 따라서 Pod의 액세스 권한을 관리하기 위해서는 다른 방법을 사용해야 합니다.

AWS IRSA를 사용하면 Kubernetes Service Account에 IAM 역할을 연결하여 Pod에게 AWS 서비스에 대한 액세스 권한을 부여할 수 있습니다. 이를 통해 Pod는 특정 AWS 서비스와 상호 작용하면서 IAM 권한을 활용할 수 있습니다.

이는 두 가지 주요 이점을 제공합니다. 

 

첫째, Pod는 AWS 자원에 대한 권한을 IAM 역할을 통해 관리하므로 Pod 자체에 AWS 보안 자격 증명을 저장할 필요가 없습니다.

둘째, AWS 서비스에 대한 액세스 권한을 세분화하여 각 서비스에 필요한 최소한의 권한만 부여할 수 있습니다.

예를 들어, Amazon S3에 대한 액세스를 필요로 하는 Pod는 해당 IAM 역할을 Kubernetes Service Account에 연결하여 권한을 얻을 수 있습니다.

이를 구현하려면, AWS EKS 클러스터에서는 OIDC(OpenID Connect) 식별 공급자를 설정하고, Kubernetes Service Account를 생성한 다음, 해당 서비스 계정과 연결된 IAM 역할을 생성하고 정책을 부여합니다. 이후, 역할을 통해 AWS 서비스에 대한 권한을 부여하는 것이 가능해집니다.

 

OIDC(OpenID Connect) 란?

 

OpenID Connect는 Google 등의 IdP(ID 공급자)에 로그인할 수 있도록 지원하는 표준 인증 프로토콜 입니다. 권한허가 프로토콜인 OAuth 2.0 기술을 이용하여 만들어진 인증 레이어로 JSON 포맷을 이용하여 RESTful API 형식을 사용하여 인증을 하게 됩니다. OIDC를 사용하면 손쉽게 외부 서비스를 통해 사용자 인증을 구현할 수 있게 됩니다.

 

Service Account 란?

 

서비스 어카운트(Service Account) 는 Kubernetes 의 파드에서 API 서버에 요청을 보냈을 때 이 "파드"를 식별하기 위한 리리소스 입니다. 파드에서 API 서버에 요청을 보내면 이 파드의 정체가 무엇인지 알아야 어떤 권한을 가지고 있는지도 알 수 있고, 이를 기반으로 파드의 요청이 권한에 맞는지를 확인하여 요청을 처리해줄지 말지를 결정할 수 있게 되는데요. 실제로 권한을 정의하고, 설정하는 부분은 Role, ClusterRole, RoleBinding, ClusterRoleBinding의 역할이고, ServiceAccount 는 이러한 권한을 적용할 수 있는 주체 중 한가지로서, Pod에게는 신분증과 같은 인증서역할을 하게 됩니다.

 

IRSA의 workflow

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

 

위 그림은 AWS 공식 블로그에서 가져왔으며 pod위에서 동작하는 application이 AWS S3 Buket의 list를 가져올때의 동작 흐름 예시 입니다. 

 

- pod위에서 동작하는 application이 AWS SDK를 사용하여 S3의 리스트를 가져오려고 합니다. 이때 JWT와 IAM Role 의 ARN정보를 AWS STS에게 전달 합니다.

- STS는 AWS IAM에게 임시 자격증명을 줄 수 있는지 확인을 요청합니다.

- IAM은 IAM OIDC Provider와 통신하고, pod에 할당된 serviceaccount에 IAM Role 정보가 잘 annotate되어 있는 지 확인한 후에 IAM에게 확인 되었다는 응답을 주게 됩니다.

- IAM은 STS에게 권한을 줘도 된다고 응답을 주게 되고 AWS STS는 pod의 AWS SDK에게 임시 자격증명을 전달합니다.

- 최종적으로 pod의 AWS SDK는 aws s3의 리스트를 가져올 수 있게 됩니다.

 

※ JWT(JSON Web Token) 란?

JSON Web Token의 약자로, 일반적으로 HTTP API 서버를 만들 때에 인증 방법으로 사용. 서버는 사용자가 로그인할 때 고유한 Token을 생성하고, 이를 사용자에게 알려주어 사용자가 다른 API를 사용할 때에 헤더에 이 Token을 넣으면, 자신이라는 것을 증명할 수 있게 하는 것.

※ AWS STS(Security Token Service) 란?

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

 

 

반응형

'AWS > IAM' 카테고리의 다른 글

[IAM] AWS 콘솔 접속 IP 제한 설정  (0) 2023.12.16