Cloud/AWS

[AWS 세션] EKS IRSA 와 Lambda Serverless

  • -
728x90

AUSG에서 좋은 기회로 AWS 세션을 들을 수 있었다. 두 세션을 들으면서 정리한 내용을 블로그에 옮겨보았다.

근데 노션이라 이미지/양식 이 다 깨져서 정리가 덜 되어있다..... 추후 다시 정리해야지

Session 1: EKS Basics - "EKS 어디까지 써봤니? IRSA를 활용한 클러스터 권한 관리" 고병수님, 이수정님 (AWS)

pre session: Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS)

Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021

1. SDK의 Credential Chain

AWS SDK의 다양한 서비스 (S3, KMS 등등)를 이용하려면, AWS Client를 생성하여 리소스에 Credential 정보가 반드시 필요.

별도의 인수를 제공하지 않고 기본값으로 새 서비스 클라이언트를 초기화하기 위해서는 AWS SDK for Java에서는 기본적으DefaultAWSCredentialsProviderChain 클래스의 기본 자격 증명 공급자 체인을 사용하여 AWS 자격 증명을 찾을 수 있다.

기본 자격 증명 공급자를 사용하면, 내부적으로 지정된 우선순위대로 찾게되고 조건을 만족하면 해당 값으로 자격증명을 로드한다.

  • 기본 자격증명 공급자 체인(Default Credential Provider Chain): 애플리케이션에 사용되는 임시 자격 증명을 제공할 수 있다.
  • 자격증명 공급자(Credential Provider) : AWS 외부의 사용자 자격 증명을 관리할 수 있고 이 외부 사용자 자격 증명에 계정의 AWS 리소스에 대한 사용 권한을 부여할 수 있다.
    • AWS access keys
    • Federate with web identity or OpenID Connect - Assume role credential provider
    • IAM Identity Center credential provider
    • Assume role credential provider
    • Container credential provider
    • Process credential provider
    • IMDS credential provider – EC2 IAM

AWS SDK for Java 2.x 버전 기준으로 DefaultAWSCredentialsProviderChain 는 다음과 같은 순서대로 Credential를 찾는다.

  • Java 2.x Credential Provider Chain 순서 (자세한 내용은 여기 참조)
  1. Java System properties
  2. Environment Variable
  3. Web identity token from AWS Security Token service
  4. The shared credentials and config files
  5. Amazon ECS container credentials
  6. Amazon EC2 instance IAM role-provided credentials (default)

k8s 사용 시 파드가 S3나 DynamoDB와 같은 AWS 리소스를 이용해야 하는 경우가 종종 생긴다.

쿠버네티스를 사용하지 않는 환경 → 필요한 IAM 정책을 정의하고 EC2 인스턴스에서 이 정책을 사용할 수 있게끔 할당해주면 간단히 해결!

BUT IAM 정책은 인스턴스 단위로 사용할 수 밖에 없어 보안적인 측면에서 지켜야 하는 Principle of Least Privilege를 어길 수 있다.

해결법

  1. kube2iam이나 kiam와 같은 IAM controller를 활용하는 방법
  2. AWS의 feature인 IRSA(IAM Role for Service Account)

 

 

  • POD 에서 실행되는 application들이 EC2인스턴스 IAM Role을 사용하게 될 경우 → 다른 Application에서 불필요하게 많은 권한을 가지게 될 수 있음

2. IRSA(IAM Role for Service Account)

  • k8s Service Account에 IAM Role을 연결하고, POD가 특정 Service Account를 이용하도록 하는 방식
  • 장점
    • 최소 권한 (Least Privilege)
    • 자격증명의 격리 (Credential Isolation)
    • 감사(Audirabiliry)
  • IRSA를 이용하는 방법

3. IRSA(IAM Role for Service Account)

https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/

  • ValidatingWebhook은 사용자가 요청한 request에 대해서 관리자가 허용을 막는 작업
  • MutatingWebhook은 사용자가 요청한 request에 대해서 관리자가 임의로 값을 변경하는 작업

더 자세한 내용은 이곳 참조

GitHub - aws/amazon-eks-pod-identity-webhook: Amazon EKS Pod Identity Webhook

4. Deep Dive for IRSA

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

flow 순서

  1. IAM서비스에 EKS 클러스터의 OIDC Provider를 Identity Provider로 등록
  2. Service Account에 IAM Role을 설정하고, POD는 Service Account를 사용하도록 설정
  3. POD 배포
  4. pod-identity-webhook(MutatingWebhookConfiguration)에 의해서 POD 환경변수에 AWS_WEB_IDENTITY_TOKEN_FILE, AWS_ROLE_ARN, AWS_STS_REGIONAL_ENDPOINTS 등이 주입
  5. IAM ODIC Identity Provider는 POD에 JWT 발행
  6. POD에서 동작하는 Application(SDK)은 JWT 와 IAM Role ARN을 STS로 전달
  • AssumeRoleWithWebIdentity API 호출
  1. IAM 서비스는 전달된 JWT가 유효한 토큰인지 한 번 더 검증 후 이상이 없는 경우 임시자격증명이 발급
  2. AWS SDK는 발급된 임시 자격증명을 통해 AWS API 호출

Q. mutating webhook이 pod에 /var/run/secrets/... 에 jwt token을 주입시 exp가 없이 만료 되지 않는 token file인가? 혹은 rotate 전략이 따로 있는가?

A. JWT 토큰을 확인해보시면 페이로드의 exp에 만료일자를 가지고 있습니다. 별도로 사용자가 Rotate를 신경쓰지 않아도 kubelet이 자동으로 TokenRequest API를 통해 토큰을 갱신한다고 이해해주시면 되겠습니다. https://aws.amazon.com/ko/blogs/containers/diving-into-iam-roles-for-service-accounts/#:~:text=In Kubernetes 1.12,the previous paragraph.

5. IRSA 실습

pod 생성하기 에서

deployment-irsa.yam 에서 service Account Name 을 생성하는 차이만 존재.

kubectl debug python-test-irsa-7d66c785d8-vlrg7 -n python -it --image=nicolaka/netshoot

kubectl debug python-test-default-698f74d756-bt8rn -n python -it --image=nicolaka/netshoot

role이 달라진 것을 확인할 수 있다.

Session 2: Lambda Basics - "Lambda를 활용한 AWS 사용 비용 SMS 전송" - 이형주님 (AWS)

What is Serverless?

no server or container management

flexible scaing

high accailability

no idle capacity

Workshop

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

SAA 합격 후기  (0) 2024.03.22
[SAA] EC2 인스턴스 스토리지  (0) 2023.10.07
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.