Ssoon

AWS EKS - Security - Amazon EKS Pod Identity 본문

AWS EKS Workshop Study 2기

AWS EKS - Security - Amazon EKS Pod Identity

구구달스 2024. 4. 10. 12:17
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 6주차
# EKS Workshop 참고

 

  • Amazon EKS Pod Identity는 Kubernetes 클러스터 내에서 AWS IAM 서비스 계정을 사용하여 AWS 리소스에 액세스할 수 있는 기능을 제공
  • 각각의 Kubernetes 파드가 고유한 IAM 역할을 가지고 AWS 리소스와 상호 작용
  • Kubernetes 워크로드가 AWS 리소스에 대한 접근 권한을 필요할 때마다 동적으로 IAM 역할을 할당받아 사용
    1. 동적 IAM 역할 할당: 각 파드는 자신에게 할당된 IAM 역할을 사용하여 AWS 리소스에 액세스할 수 있습니다. 이는 각 파드가 필요한 권한을 동적으로 가져와서 AWS 리소스에 접근할 수 있도록 해줍니다.
    2. Fine-grained 권한 제어: 각 파드는 IAM 역할을 통해 할당된 권한만큼만 AWS 리소스에 액세스할 수 있습니다. 이는 보안을 강화하고 최소한의 권한을 가진 서비스 계정만을 사용하여 리소스에 접근할 수 있도록 합니다.
    3. IAM OIDC 공급자와의 통합: Amazon EKS Pod Identity는 IAM OIDC 공급자를 사용하여 Kubernetes 서비스 계정과 IAM 역할 간의 매핑을 관리합니다. 이를 통해 Kubernetes 클러스터 내에서 파드와 IAM 역할 간의 신뢰 관계를 설정할 수 있습니다.
    4. AWS 리소스 접근 제어: Amazon EKS Pod Identity를 사용하면 각 파드가 AWS 리소스에 액세스할 때 AWS 리소스에 대한 액세스 제어를 수행할 수 있습니다. 이는 AWS에서 제공하는 다양한 보안 기능을 활용하여 리소스에 대한 접근을 제한하고 모니터링할 수 있도록 해줍니다.

 실습준비


  • Workshop 실습 환경 준비
더보기
  • Amazon DynamoDB 테이블 생성
  • AmazonEKS 워크로드가 DynamoDB 테이블에 액세스할 수 있도록 IAM 역할을 생성
  • EKS 포드 아이덴티티 에이전트용 EKS 관리형 애드온을 설치
  • Amazon EKS 클러스터에 AWS 로드 밸런서 컨트롤러를 설치

  • carts 구성 요소는 Amazon EKS와 비관계형 데이터베이스 Amazon DynamoDB를 스토리지 백엔드로 사용
  • carts  API 가 배포되는 방식은 EKS 클러스터에서 컨테이너로 실행되는 경량 버전의 Amazon DynamoDB를 사용


 Using DynamoDB

  • 이미 생성된 DynamoDB 테이블을 사용하도록 카트 서비스를 다시 구성
  • 'carts' 네임스페이스에 있는 'carts' ConfigMap 확인

  • 브라우저를 사용하여 애플리케이션의 현재 상태를 확인
  • 애플리케이션의 UI에 액세스할 수 있는 UI 네임스페이스에 ui-nlb라는 이름의 로드밸런서 유형 서비스가 프로비저닝

 

  • Kustomization Patch
    • 컨피그맵을 덮어쓰고, SDK가 테스트 포드 대신 실제 DynamoDB 서비스를 기본값으로 사용하도록 지시하는 DynamoDB 엔드포인트 구성을 제거
    • 이미 생성된 DynamoDB 테이블의 이름을 환경 변수 CARTS_DYNAMODB_TABLENAME에서 가져와서 제공
    • ~/environment/eks-workshop/modules/security/eks-pod-identity/dynamo/kustomization.yaml

  • ~/environment/eks-workshop/modules/security/eks-pod-identity/dynamo/carts-configMap.yaml  

 

  • CARTS_DYNAMODB_TABLENAME의 값을 확인한 다음 Kustomize를 실행하여 실제 DynamoDB 서비스를 사용

  • 컨피그맵을 새 값으로 변경

 

  • 새로운 컨피그맵 콘텐츠를 가져오려면 카트 애플리케이션의 모든 파드를 재활용

  • 브라우저에서 로드하면 페이지에 액세스할 수 없습니다


Understanding Pod IAM

  • 카트 서비스 로그 확인

  • 애플리케이션은 파드가 DynamoDB에 액세스하는 데 사용하는 IAM 역할에 필요한 권한이 없음을 나타내는 Exception을 생성
  • 이는 기본적으로 파드에 연결된 IAM 롤이나 정책이 없는 경우, 실행 중인 EC2 인스턴스에 할당된 인스턴스 프로빌에 연결된 IAM 롤을 사용하기 때문에 발생
  • 롤에는 DynamoDB에 대한 액세스를 허용하는 IAM 정책이 없음
  • EKS 파드 아이덴티티를 사용하여 파드 수준에서 카트 애플리케이션에 필요한 특정 액세스를 허용

Using EKS Pod Identity

  • 클러스터에서 EKS 파드 아이덴티티를 사용하려면, EKS 클러스터에 EKS 파드 아이덴티티 에이전트 애드온을 설치

  • 새 애드온에 의해 EKS 클러스터에 생성된 것을 확인
  • kube-system 네임스페이스에 배포된 데몬셋이 클러스터의 각 노드에서 파드를 실행하는 것을 확인

  • 실습의 준비단계에서 prepare-environment 스크립트를 실행할 때 카트 서비스가 DynamoDB 테이블을 읽고 쓰는 데 필요한 권한을 제공하는 IAM 역할이 생성되었습니다. 아래와 같이 정책을 확인할 수 있습니다.

  • 역할은 EKS 서비스 주체가 포드 ID에 대해 이 역할을 맡을 수 있도록 허용하는 적절한 신뢰 관계로 구성

  • Amazon EKS 포드 ID 기능을 사용하여 배포에 사용될 Kubernetes 서비스 계정에 AWS IAM 역할을 연결

  • carts Deployment 가 카트 서비스 계정을 사용하고 있는지 확인

  • 서비스 계정이 확인되면 카트 포드를 재활용

 


Verifying DynamoDB Access

  • 승인된 IAM 역할과 연결된 카트 서비스 계정을 사용하면 카트 포드에 DynamoDB 테이블에 액세스할 수 있는 권한이 있습니다.
  • 다시 웹 스토어에 접속하여 장바구니로 이동

  • AWS IAM 역할이 서비스 계정과 연결되면 해당 서비스 계정을 사용하여 새로 생성된 포드는 EKS 포드 ID 웹훅에 의해 차단
  • 이 웹후크는 Amazon EKS 클러스터의 제어 플레인에서 실행되며 AWS에서 완전히 관리

  • AWS_DEFAULT_REGION
  • AWS_STS_REGIONAL_ENDPOINTS
  • AWS_CONTAINER_CREDENTIALS_FULL_URI
  • AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY
Comments