서비스 계정에 대한 IAM 역할 및 정책 생성 - Amazon EKS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

서비스 계정에 대한 IAM 역할 및 정책 생성

포드의 컨테이너에게 부여할 권한을 지정하는 IAM 정책을 생성해야 합니다. IAM 권한 정책을 생성하는 방법은 여러 가지가 있습니다. 한 가지 방법은 찾고 있는 것 중 일부를 처리하도록 이미 마련되어 있는 전체 AWS 관리형 정책을 복사한 다음, 이를 특정 요구 사항에 맞춰 사용자 지정하는 것입니다. 자세한 내용은 단원을 참조하십시오.새 정책 생성IAM 사용 설명서.

또한 사용할 Kubernetes 서비스 계정을 위한 IAM 역할을 생성한 다음 이 역할을 서비스 계정에 연결해야 합니다. 신뢰 관계의 범위는 각 클러스터와 서비스 계정의 조합에 자체 역할이 필요하도록 클러스터와 서비스 계정으로 한정됩니다. 그런 다음 포드의 컨테이너에 원하는 권한을 부여하는 특정 IAM 정책을 역할에 연결할 수 있습니다. 다음 절차에서 그 방법을 설명합니다.

IAM 정책 만들기

이 절차에서는 애플리케이션에 사용할 수 있는 두 가지 정책 예시를 제공합니다.

  • Amazon S3 버킷에 대한 읽기 전용 액세스를 허용하는 정책입니다. 이 버킷에 구성 정보 또는 부트스트랩 스크립트를 저장할 수 있고, 포드의 컨테이너는 이 버킷에서 파일을 읽어 애플리케이션으로 로드할 수 있습니다.

  • AWS Marketplace 의 유료 컨테이너 이미지를 허용하는 정책입니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 패널에서정책를 선택한 다음정책 생성.

  3. [JSON] 탭을 선택합니다.

  4. 정책 문서 필드에서 다음 정책 중 하나를 서비스 계정에 적용할 정책으로 붙여 넣거나 이 필드에 자체 정책 문서를 붙여 넣습니다. 또한 시각적 편집기를 사용하여 자체 정책을 구성할 수 있습니다.

    아래 예시에서는 에 대한 권한을 허용합니다.<my-pod-secrets-bucket>Amazon S3 버킷입니다. 필요에 따라 정책 문서를 수정할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<my-pod-secrets-bucket>/*" ] } ] }

    아래 예시에서는 AWS Marketplace 의 유료 컨테이너 이미지를 사용할 수 있는 필수 권한을 부여합니다.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:RegisterUsage" ], "Effect": "Allow", "Resource": "*" } ] }
  5. 정책 검토(Review policy)를 선택합니다.

  6. 정책의 이름과 설명을 입력한 다음 정책 생성을 선택합니다.

  7. 나중에 역할을 생성할 때 사용할 정책의 ARN (Amazon 리소스 이름) 을 기록하십시오.

서비스 계정에 대한 IAM 역할 생성

서비스 계정에 대한 IAM 역할을 생성합니다. 다음을 수행할 수 있습니다.eksctl,AWS Management Console또는AWS CLI역할을 생성합니다.

Prerequisites

  • 기존 클러스터가 있어야 합니다. 아직 없는 경우 중 하나를 사용하여 생성할 수 있습니다.Amazon EKS 시작하기안내서를 참조하십시오.

  • 를 사용하는 경우AWS Management Console또는AWS CLI를 사용하여 역할을 생성하는 경우 클러스터에 대한 기존 IAM OIDC 공급자가 있어야 합니다. 자세한 내용은 클러스터용 IAM OIDC 공급자 생성 단원을 참조하세요.

  • 에 대한 권한을 포함하는 기존 IAM 정책AWS리소스에 대한 액세스 권한이 필요합니다. 자세한 내용은 IAM 정책 만들기 단원을 참조하세요.

다음을 사용하여 IAM 역할을 생성할 수 있습니다.eksctl,AWS Management Console또는AWS CLI. 역할을 생성할 도구 이름이 있는 탭을 선택합니다.

eksctl

다음 명령을 사용하여 서비스 계정 및 IAM 역할을 생성합니다. 를 교체합니다.<example values>포함<>) 을 고유한 값으로 바꿉니다.

eksctl create iamserviceaccount \ --name <service_account_name> \ --namespace <service_account_namespace> \ --cluster <cluster_name> \ --attach-policy-arn <IAM_policy_ARN> \ --approve \ --override-existing-serviceaccounts

한AWS CloudFormation템플릿이 배포되어 IAM 역할을 생성하고 여기에 IAM 정책을 연결합니다. 역할은 Kubernetes 서비스 계정과 연결됩니다. 클러스터에 기존 IAM OIDC 공급자가 없는 경우 해당 공급자가 생성된 것입니다. 서비스 계정이 존재하지 않을 경우 서비스 계정이 제공한 네임스페이스에 생성됩니다. 서비스 계정이 존재하면 다음과 같이 주석이 추가됩니다.eks.amazonaws.com/role-arn: arn:aws:iam::<your-account-id>:role/<iam-role-name-that-was-created>.

AWS Management Console
  1. Amazon EKS 콘솔을 엽니다.https://console.aws.amazon.com/eks/home#/clusters.

  2. 클러스터의 이름을 선택한 다음구성탭을 참조하십시오.

  3. 에서세부 정보섹션의 값을 기록해둡니다.OpenID Connect 공급자.

  4. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  5. 탐색 패널에서Roles,역할 생성.

  6. Select type of trusted entity(신뢰할 수 있는 유형의 엔터티 선택) 섹션에서 Web identity(웹 자격 증명)를 선택합니다.

  7. Choose a web identity provider(웹 자격 증명 공급자 선택) 섹션에서 다음과 같이 합니다.

    1. 자격 증명 공급자에서 클러스터의 URL을 선택합니다.

    2. Audience(대상)에서 sts.amazonaws.com을 입력합니다.

  8. [다음: 권한(Next: Permissions)]을 선택합니다.

  9. 에서정책 연결섹션에서 서비스 계정에서 사용할 권한이 있는 IAM 정책을 선택합니다.

  10. [다음: 권한(Next: Tags)]를 선택합니다.

  11. Add tags(optional)(태그 추가(선택 사항)) 화면에서 계정에 대한 태그를 추가할 수 있습니다. [다음: 권한(Next: Review)]를 선택합니다.

  12. Role Name(역할 이름)에 역할의 이름을 입력한 다음 Create role(역할 생성)을 선택합니다.

  13. 역할을 생성한 후 편집할 수 있도록 콘솔에서 이 역할을 선택하여 엽니다.

  14. 신뢰 관계 탭을 선택한 후 Edit trust relationship(신뢰 관계 편집)을 선택합니다.

  15. 다음과 유사한 줄을 찾습니다.

    "oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

    다음 줄처럼 줄을 변경합니다. Replace<EXAMPLED539D4633E53DE1B716D3041E>포함<>) 를 클러스터의 OIDC 공급자 <region-code> ID로 바꾸고 클러스터가있는 지역 코드로 바꿉니다.

    참고

    기존 서비스 계정이 없다면 하나 만들어야 합니다. 자세한 내용은 단원을 참조하십시오.포드에 대한 서비스 계정 구성Kubernetes 설명서의 내용을 참조하십시오. 서비스 계정이 Kubernetes 권한을 사용할 수 있으려면Role또는ClusterRole을 클릭한 다음 역할을 서비스 계정에 바인딩합니다. 자세한 내용은 Kubernetes 문서의 Using RBAC Authorization(RBAC 승인 사용)을 참조하십시오. 다음을 수행하는 경우AWSVPC I 플러그인예를 들어 배포 매니페스트에서 서비스 계정, 클러스터 역할, 클러스터 역할 바인딩을 생성합니다. 다음을 볼 수 있습니다.매니페스트(GitHub에 있음).

  16. Update Trust Policy(신뢰 정책 업데이트)를 선택하여 종료합니다.

AWS CLI
  1. 다음 명령을 사용해 AWS 계정 ID를 환경 변수로 설정합니다.

    ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
  2. 다음 명령을 사용해 OIDC 자격 증명 공급자를 환경 변수로 설정합니다. 를 교체합니다.<example values>포함<>) 을 고유한 값으로 바꿉니다.

    중요

    버전 1.19.75 또는 2.2.5를 사용 해야 합니다.AWS CLI이 명령에서 적절한 출력을 받을 수 있습니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치를 참조하세요.

    OIDC_PROVIDER=$(aws eks describe-cluster --name <cluster-name> --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  3. 다음 코드 블록을 컴퓨터에 복사하고<example values>포함<>) 를 원하는 값으로 바꿉니다.

    read -r -d '' TRUST_RELATIONSHIP <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": "system:serviceaccount:<my-namespace>:<my-service-account>" } } } ] } EOF echo "${TRUST_RELATIONSHIP}" > trust.json
  4. 이전 단계에서 수정된 코드 블록을 실행하여 trust.json이라는 파일을 만듭니다.

  5. 다음을 실행합니다.AWS CLI명령을 실행해 역할을 생성합니다.

    aws iam create-role --role-name <IAM_ROLE_NAME> --assume-role-policy-document file://trust.json --description "<IAM_ROLE_DESCRIPTION>"
  6. 다음 명령을 실행하여 IAM 정책을 역할에 연결합니다.

    aws iam attach-role-policy --role-name <IAM_ROLE_NAME> --policy-arn=<IAM_POLICY_ARN>