서비스 계정의 AWS Security Token Service 엔드포인트 구성 - Amazon EKS

서비스 계정의 AWS Security Token Service 엔드포인트 구성

서비스 계정에 대한 IAM 역할이 포함된 Kubernetes 서비스 계정을 사용하는 경우 클러스터 및 플랫폼 버전이 동일하거나 다음 표에 나열된 버전보다 이후라면 서비스 계정에서 사용하는 AWS Security Token Service 엔드포인트 유형을 구성할 수 있습니다. Kubernetes 또는 플랫폼 버전이 테이블에 나열된 버전보다 이전 버전인 경우 서비스 계정은 글로벌 엔드포인트만 사용할 수 있습니다.

Kubernetes 버전 플랫폼 버전 기본 엔드포인트 유형
1.29 eks.1 리전
1.28 eks.1 리전
1.27 eks.1 리전
1.26 eks.1 리전
1.25 eks.1 리전
1.24 eks.2 리전
1.23 eks.1 리전

AWS는 글로벌 엔드포인트 대신 리전별 AWS STS 엔드포인트를 사용할 것을 권장합니다. 이렇게 하면 지연 시간이 줄고, 중복성이 기본 제공되고, 세션 토큰 유효성이 향상됩니다. AWS Security Token Service는 Pod가 실행 중인 AWS 리전에서 활성 상태여야 합니다. 또한 AWS 리전에서 서비스 장애가 발생할 경우 다른 AWS 리전에 대한 기본 제공 중복성이 애플리케이션에 있어야 합니다. 자세한 내용은 IAM 사용 설명서의 AWS 리전에서 AWS STS 관리를 참조하세요.

사전 조건
Kubernetes 서비스 계정에서 사용하는 엔드포인트 유형 구성

다음 예에서는 모두 Amazon VPC CNI 플러그인에서 사용하는 aws-node Kubernetes 서비스 계정을 사용합니다. example values을 고유 서비스 계정, Pods, 네임스페이스, 기타 리소스로 바꿀 수 있습니다.

  1. 엔드포인트를 변경하려는 서비스 계정을 사용하는 Pod를 선택합니다. Pod가 실행되는 AWS 리전을 결정합니다. aws-node-6mfgv를 Pod 이름으로, kube-system을 Pod의 네임스페이스로 바꿉니다.

    kubectl describe pod aws-node-6mfgv -n kube-system |grep Node:

    예제 출력은 다음과 같습니다.

    ip-192-168-79-166.us-west-2/192.168.79.166

    이전 출력에서 Pod는 us-west-2 AWS 리전의 노드에서 실행 중입니다.

  2. Pod's 서비스 계정이 사용 중인 엔드포인트 유형을 결정합니다.

    kubectl describe pod aws-node-6mfgv -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    예제 출력은 다음과 같습니다.

    AWS_STS_REGIONAL_ENDPOINTS: regional

    현재 엔드포인트가 전역인 경우 global은 출력에서 반환됩니다. 출력이 반환되지 않는 경우 기본 엔드포인트 유형이 재정의되지 않고 사용 중에 있습니다.

  3. 클러스터 또는 플랫폼 버전이 표에 나열된 버전과 동일하거나 이후인 경우 다음 명령 중 하나를 사용하여 서비스 계정에서 사용하는 엔드포인트 유형을 기본 유형에서 다른 유형으로 변경할 수 있습니다. aws-node를 서비스 계정의 이름으로, kube-system을 서비스 계정의 네임스페이스로 바꿉니다.

    • 기본 또는 현재 엔드포인트 유형이 전역이고 다음과 같은 리전으로 변경하려는 경우:

      kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=true

      서비스 계정에 대한 IAM 역할을 사용하여 Pods의 컨테이너에서 실행되는 애플리케이션에서 미리 서명된 S3 URL을 생성하는 경우 리전 엔드포인트에 대한 URL 형식은 다음 예와 비슷합니다.

      https://bucket.s3.us-west-2.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...
    • 기본 또는 현재 엔드포인트 유형이 리전이고 다음과 같은 전역으로 변경하려는 경우:

      kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=false

      애플리케이션이 AWS STS 글로벌 엔드포인트에 명시적으로 요청하고 Amazon EKS 클러스터에서 리전 엔드포인트를 사용하는 기본 동작을 재정의하지 않는 경우 오류로 인해 요청이 실패합니다. 자세한 내용은 포드 컨테이너는 다음과 같은 오류가 발생합니다. An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: Credential should be scoped to a valid region 섹션을 참조하세요.

      서비스 계정에 대한 IAM 역할을 사용하여 Pods의 컨테이너에서 실행되는 애플리케이션에서 미리 서명된 S3 URL을 생성하는 경우 글로벌 엔드포인트에 대한 URL 형식은 다음 예와 비슷합니다.

      https://bucket.s3.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...

    사전 서명된 URL을 특정 형식으로 예상하는 자동화가 있거나 사전 서명된 URL을 사용하는 애플리케이션 또는 다운스트림 종속성이 대상 지정된 AWS 리전을 예상하는 경우, 필요한 변경을 수행하여 적절한 AWS STS 엔드포인트를 사용합니다.

  4. 서비스 계정에 연결된 기존 Pods를 삭제하고 다시 생성하여 보안 인증 정보 환경 변수를 적용합니다. 변형 웹후크는 이미 실행 중인 Pods에 이 변수를 적용하지 않습니다. Pods, kube-system, -l k8s-app=aws-node를 주석을 설정한 Pods에 대한 정보로 바꿀 수 있습니다.

    kubectl delete Pods -n kube-system -l k8s-app=aws-node
  5. 모든 Pods가 다시 시작되었는지 확인합니다.

    kubectl get Pods -n kube-system -l k8s-app=aws-node
  6. Pods 중 하나에 대한 환경 변수를 봅니다. AWS_STS_REGIONAL_ENDPOINTS 값이 이전 단계에서 설정한 값인지 확인합니다.

    kubectl describe pod aws-node-kzbtr -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    예제 출력은 다음과 같습니다.

    AWS_STS_REGIONAL_ENDPOINTS=regional