Pod Identity for Amazon EKS에서 AWS Secrets and Configuration Provider CSI 사용 - AWS Secrets Manager

Pod Identity for Amazon EKS에서 AWS Secrets and Configuration Provider CSI 사용

Pod Identity Agent for Amazon Elastic Kubernetes Service와 AWS Secrets and Configuration Provider의 통합으로 Amazon EKS에서 실행되는 애플리케이션에 대해 보안이 향상되고, 구성이 간소화되고, 성능이 개선됩니다. Pod Identity는 Secrets Manager에서 보안 암호를 가져오거나 AWS Systems Manager Parameter Store에서 파라미터를 가져올 때 Amazon EKS에 대한 IAM 인증을 간소화합니다.

Amazon EKS Pod Identity는 Amazon EKS 인터페이스를 통해 직접 권한이 설정되도록 허용하여 Kubernetes 애플리케이션의 IAM 권한을 구성하는 프로세스를 간소화하며, 이를 통해 설정 단계 수가 감소하고 Amazon EKS와 IAM 서비스 간에 전환할 필요가 없습니다. Pod Identity를 사용하면 신뢰 정책을 업데이트하지 않고도 여러 클러스터에서 단일 IAM 역할을 사용할 수 있고, 역할 세션 태그가 지원되어 더 세분화된 액세스 제어가 가능합니다. 이 접근 방식은 역할 간에 권한 정책을 재사용할 수 있도록 하여 정책 관리를 간소화할 뿐만 아니라 일치하는 태그를 기반으로 AWS 리소스에 대한 액세스를 활성화하면서 보안을 강화합니다.

작동 방법

  1. Pod Identity는 포드에 IAM 역할을 할당합니다.

  2. ASCP는 이 역할을 사용하여 AWS 서비스에 인증합니다.

  3. 권한이 부여된 경우 ASCP는 요청된 보안 암호를 검색하여 포드에서 사용할 수 있도록 합니다.

자세한 내용은 Amazon EKS 사용 설명서Amazon EKS Pod Identity 작동 방식 이해를 참조하세요.

사전 조건

중요

Pod Identity는 클라우드의 Amazon EKS에서만 지원됩니다. Amazon EKS Anywhere, Red Hat OpenShift Service on AWS, Amazon EC2 인스턴스의 자체 관리형 Kubernetes 클러스터에서는 지원되지 않습니다.

  • Amazon EKS 클러스터(버전 1.24 이상)

  • kubectl을 통해 AWS CLI 및 Amazon EKS 클러스터에 액세스

  • 2개의 AWS 계정에 액세스(교체 계정 액세스용)

Amazon EKS Pod Identity Agent 설치

클러스터에서 Pod Identity를 사용하려면 Amazon EKS Pod Identity Agent 추가 기능을 설치해야 합니다.

Pod Identity Agent 설치
  • 클러스터에 Pod Identity Agent 추가 기능을 설치합니다.

    eksctl create addon \ --name eks-pod-identity-agent \ --cluster clusterName \ --region region

Pod Identity를 사용하는 ASCP 설정

  1. 포드가 액세스해야 하는 보안 암호에 secretsmanager:GetSecretValuesecretsmanager:DescribeSecret 권한을 부여하는 권한 정책을 생성합니다. 정책 예제는 예: 개별 보안 암호를 읽고 설명할 수 있는 권한을 참조하세요.

  2. Pod Identity에 대한 Amazon EKS 서비스 보안 주체가 맡을 수 있는 IAM 역할 생성:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

    IAM 정책을 역할에 연결합니다.

    aws iam attach-role-policy \ --role-name MY_ROLE \ --policy-arn POLICY_ARN
  3. Pod Identity 연결을 생성합니다. 예시는 Amazon EKS 사용 설명서Pod Identity 연결 생성을 참조하세요.

  4. 포드에 탑재할 보안 암호를 지정하는 SecretProviderClass를 생성합니다.

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml

    IRSA와 Pod Identity 사이에서 SecretProviderClass의 주요 차이점은 선택적 파라미터 usePodIdentity입니다. 인증 접근 방식을 결정하는 선택적 필드입니다. 지정하지 않으면 기본적으로 IRSA(서비스 계정에 대한 IAM 역할)를 사용합니다.

    • EKS Pod Identity를 사용하려면 다음 값 중 하나를 사용합니다. "true", "True", "TRUE", "t", "T".

    • IRSA를 명시적으로 사용하려면 값을 "false", "False", "FALSE", "f", or "F"로 설정합니다.

  5. 보안 암호를 /mnt/secrets-store에 탑재하는 포드를 배포합니다.

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
  6. 프라이빗 Amazon EKS 클러스터를 사용하는 경우 클러스터가 있는 VPC에 AWS STS 엔드포인트가 있어야 합니다. 엔드포인트 생성에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 인터페이스 VPC 엔드포인트 섹션을 참조하세요.

보안 암호 탑재 확인

보안 암호가 제대로 탑재되었는지 확인하려면 다음 명령을 실행합니다.

kubectl exec -it $(kubectl get pods | awk '/pod-identity-deployment/{print $1}' | head -1) -- cat /mnt/secrets-store/MySecret
Amazon EKS 포드에 Secrets Manager 보안 암호에 대한 액세스 권한을 설정하는 방법
  1. 포드가 액세스해야 하는 보안 암호에 secretsmanager:GetSecretValuesecretsmanager:DescribeSecret 권한을 부여하는 권한 정책을 생성합니다. 정책 예제는 예: 개별 보안 암호를 읽고 설명할 수 있는 권한을 참조하세요.

  2. 보안 암호가 아직 없는 경우 Secrets Manager에서 보안 암호를 생성합니다.

문제 해결

포드 배포를 설명하여 대부분의 오류를 볼 수 있습니다.

컨테이너에 대한 오류 메시지 확인
  1. 다음 명령을 사용하여 포드 이름 목록을 가져옵니다. 기본 네임스페이스를 사용하지 않는 경우에는 -n NAMESPACE를 사용합니다.

    kubectl get pods
  2. 포드를 설명하기 위해 다음 명령에서 PODID에 이전 단계에서 찾은 포드의 포드 ID를 사용합니다. 기본 네임스페이스를 사용하지 않는 경우에는 -n NAMESPACE를 사용합니다.

    kubectl describe pod/PODID
ASCP에 대한 오류를 확인하려면
  • 공급자 로그에서 자세한 정보를 확인하려면, 다음 명령에서 PODIDcsi-secrets-store-provider-aws 포드의 ID를 사용합니다.

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/PODID