Amazon EBS를 사용한 Kubernetes 볼륨 저장 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.

Amazon EBS를 사용한 Kubernetes 볼륨 저장

Amazon Elastic Block Store(Amazon EBS) 컨테이너 스토리지 인터페이스(CSI) 드라이버에서는 Amazon EBS 볼륨의 수명 주기를 사용자가 생성하는 Kubernetes 볼륨의 스토리지로 관리합니다. Amazon EBS CSI 드라이버는 Amazon EBS 볼륨을 Kubernetes 볼륨 유형인 일반 임시 볼륨영구 볼륨에 사용할 수 있도록 만듭니다.

고려 사항

  • Amazon EBS 볼륨을 Fargate Pods에 탑재할 수 없습니다.

  • Amazon EBS CSI 컨트롤러는 Fargate 노드에서 실행할 수 있지만 Amazon EBS CSI 노드 DaemonSet은(는) Amazon EC2 인스턴스에서만 실행할 수 있습니다.

  • 최신 추가 기능 버전과 하나의 이전 버전에 대한 지원이 제공됩니다. 최신 버전에서 발견된 버그나 취약성은 새 마이너 버전의 이전 릴리스로 백포트됩니다.

중요

Amazon EBS CSI 드라이버의 스냅샷 기능을 사용하려면 먼저 CSI 스냅샷 컨트롤러를 설치해야 합니다. 자세한 내용은 CSI 볼륨의 스냅샷 기능 활성화 단원을 참조하십시오.

사전 조건

  • 기존 클러스터가 있어야 합니다. 필요한 플랫폼 버전을 확인하려면 다음 명령을 실행합니다.

    aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
  • 클러스터에 대한 기존 AWS Identity and Access Management(IAM) OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 아니면 생성해야 하는지 확인하려면 클러스터에 대한 IAM OIDC 공급자 생성 부분을 참조하세요.

  • 클러스터 전체에서 제한된 PodSecurityPolicy를 사용하는 경우 배포할 수 있는 충분한 권한이 추가 기능에 부여되었는지 확인합니다. 각 추가 기능 Pod에 필요한 권한을 알아보려면 GitHub의 관련 추가 기능 매니페스트 정의를 참조하세요.

1단계 - IAM 역할 생성

Amazon EBS CSI 플러그 인이 사용자를 대신하여 AWS API를 호출하려면 IAM 권한이 필요합니다. 이 단계를 수행하지 않는 경우 추가 기능을 설치하려고 시도하고 kubectl describe pvc를 실행하면 failed to provision volume with StorageClass 오류와 함께 could not create volume in EC2: UnauthorizedOperation가 표시됩니다. 자세한 내용은 GitHub의 드라이버 권한 설정을 참조하세요.

참고

IMDS에 대한 액세스 권한을 차단하지 않는 한 Pods는 IAM 역할에 할당된 권한에 대한 액세스 권한이 있습니다. 자세한 내용은 모범 사례로 Amazon EKS 클러스터 보호 단원을 참조하십시오.

다음 절차에서는 IAM 역할을 생성하고 AWS 관리형 정책을 연결하는 방법을 보여줍니다. eksctl, AWS Management Console 또는 AWS CLI를 사용할 수 있습니다.

참고

이 절차의 특정 단계는 드라이버를 Amazon EKS 추가 기능으로 사용하기 위해 작성되었습니다. 드라이버를 자체 관리형 추가 기능으로 드라이버를 사용하려면 여러 단계가 필요합니다. 자세한 내용은 GitHub의 드라이버 권한 설정을 참조하세요.

eksctl
eksctl을 사용하여 Amazon EBS CSI 플러그 인 IAM 역할 생성
  1. IAM 역할을 생성하여 정책을 연결합니다. AWS은(는) AWS 관리형 정책을 유지 관리하거나 자체 사용자 지정 정책을 생성할 수 있습니다. IAM 역할을 생성하고 다음 명령을 사용하여 AWS 관리형 정책을 연결할 수 있습니다. my-cluster를 클러스터 이름으로 바꿉니다. 이 명령은 IAM 역할을 생성하고 IAM 정책을 연결하는 AWS CloudFormation 스택을 배포합니다. 클러스터가 AWS GovCloud(미국 동부) 또는 AWS GovCloud(미국 서부) AWS 리전에 있는 경우 arn:aws:arn:aws-us-gov:로 바꿉니다.

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  2. Amazon EBS 볼륨의 암호화에 사용자 지정 KMS 키를 사용하는 경우 필요에 따라 IAM 역할을 사용자 지정합니다. 예를 들어, 다음을 수행합니다.

    1. 다음 코드를 복사하여 새로운 kms-key-for-encryption-on-ebs.json 파일에 붙여 넣습니다. custom-key-arn을 사용자 지정 KMS 키 ARN으로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 정책을 생성합니다. KMS_Key_For_Encryption_On_EBS_Policy를 다른 이름으로 변경할 수 있습니다. 그러나 이렇게 하는 경우 이후 단계에서도 변경해야 합니다.

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 다음 명령을 사용하여 IAM 정책을 역할에 연결합니다. 111122223333을 계정 ID로 바꿉니다. 클러스터가 AWS GovCloud(미국 동부) 또는 AWS GovCloud(미국 서부) AWS 리전에 있는 경우 arn:aws:arn:aws-us-gov:로 바꿉니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole
AWS Management Console
AWS Management Console을 사용하여 Amazon EBS CSI 플러그 인 IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 역할을 선택합니다.

  3. 역할(Roles) 페이지에서 역할 생성(Create role)을 선택합니다.

  4. 신뢰할 수 있는 엔터티 선택(Select trusted entity) 페이지에서 다음을 수행합니다.

    1. 신뢰할 수 있는 엔터티 유형(Trusted entity type) 섹션에서 웹 자격 증명(Web identity)을 선택합니다.

    2. 보안 인증 공급자의 경우 클러스터에 대해 OpenID Connect 공급자 URL을 선택합니다(Amazon EKS의 개요에 표시된 대로).

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

    4. Next(다음)를 선택합니다.

  5. 권한 추가(Add permissions) 페이지에서 다음을 수행합니다.

    1. 필터 정책(Filter policies) 상자에 AmazonEBSCSIDriverPolicy를 입력합니다.

    2. 검색에서 반환된 AmazonEBSCSIDriverPolicy 왼쪽에 있는 확인란을 선택합니다.

    3. Next(다음)를 선택합니다.

  6. 이름, 검토 및 생성(Name, review, and create) 페이지에서 다음을 수행합니다.

    1. 역할 이름(Role name)에 역할의 고유한 이름(예: AmazonEKS_EBS_CSI_DriverRole)을 입력합니다.

    2. 태그 추가(선택 사항)에서 태그를 키-값 페어로 연결하여 메타데이터를 역할에 추가합니다. IAM에서 태그 사용에 대한 자세한 내용을 알아보려면 IAM 사용 설명서의 IAM 리소스에 태그 지정을 참조하세요.

    3. 역할 생성을 선택합니다.

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

  8. 신뢰 관계(Trust relationships) 탭을 선택한 후 신뢰 정책 편집(Edit trust policy)을 선택합니다.

  9. 다음과 비슷한 줄을 찾습니다.

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"

    이전 줄의 끝에 쉼표를 추가한 다음 이전 줄 뒤에 다음 줄을 추가합니다. region-code를 클러스터가 있는 AWS 리전으로 바꿉니다. EXAMPLED539D4633E53DE1B71EXAMPLE을 클러스터의 OIDC 공급자 ID로 바꿉니다.

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
  10. 신뢰 정책 업데이트(Update Trust Policy)를 선택하여 종료합니다.

  11. Amazon EBS 볼륨의 암호화에 사용자 지정 KMS 키를 사용하는 경우 필요에 따라 IAM 역할을 사용자 지정합니다. 예를 들어, 다음을 수행합니다.

    1. 왼쪽 탐색 창에서 정책을 선택합니다.

    2. 정책(Policies) 페이지에서 정책 생성(Create Policy)을 선택합니다.

    3. 정책 생성(Create Policy) 페이지에서 JSON 탭을 선택합니다.

    4. 다음 코드를 복사하여 편집기에 붙여 넣어 custom-key-arn을 사용자 지정 KMS 키 ARN으로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    5. 다음: 태그(Next: Tags)를 선택합니다.

    6. 태그 추가(선택 사항)(Add tags (Optional)) 페이지에서 다음: 검토(Next: Review)를 선택합니다.

    7. 이름(Name)에 정책의 고유 이름을 입력합니다(예: KMS_Key_For_Encryption_On_EBS_Policy).

    8. 정책 생성을 선택합니다.

    9. 왼쪽 탐색 창에서 역할을 선택합니다.

    10. 콘솔에서 AmazonEKS_EBS_CSI_DriverRole을 선택하여 열고 편집합니다.

    11. 권한 추가 드롭다운 목록에서 정책 연결을 선택합니다.

    12. 필터 정책(Filter policies) 상자에 KMS_Key_For_Encryption_On_EBS_Policy를 입력합니다.

    13. 검색에서 반환된 KMS_Key_For_Encryption_On_EBS_Policy 왼쪽에 있는 확인란을 선택합니다.

    14. 정책 연결을 선택합니다.

AWS CLI
AWS CLI을 사용하여 Amazon EBS CSI 플러그 인 IAM 역할을 생성하려면
  1. 클러스터의 OIDC 공급자 URL을 확인합니다. my-cluster을 클러스터 이름으로 교체합니다. 명령의 출력이 None인 경우 사전 요구 사항을 검토합니다.

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

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

    https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. IAM 역할을 생성하여 AssumeRoleWithWebIdentity 작업을 부여합니다.

    1. 다음 콘텐츠를 aws-ebs-csi-driver-trust-policy.json이라는 파일에 복사합니다. 111122223333을 계정 ID로 바꿉니다. EXAMPLED539D4633E53DE1B71EXAMPLEregion-code를 이전 단계에서 반환된 값으로 바꿉니다. 클러스터가 AWS GovCloud(미국 동부) 또는 AWS GovCloud(미국 서부) AWS 리전에 있는 경우 arn:aws:arn:aws-us-gov:로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] }
    2. 역할을 생성합니다. AmazonEKS_EBS_CSI_DriverRole를 다른 이름으로 변경할 수 있습니다. 변경하는 경우 이후 단계에서 변경해야 합니다.

      aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
  3. 정책을 연결합니다. AWS은(는) AWS 관리형 정책을 유지 관리하거나 자체 사용자 지정 정책을 생성할 수 있습니다. 다음 명령으로 AWS 관리형 정책을 역할에 연결합니다. 클러스터가 AWS GovCloud(미국 동부) 또는 AWS GovCloud(미국 서부) AWS 리전에 있는 경우 arn:aws:arn:aws-us-gov:로 바꿉니다.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Amazon EBS 볼륨의 암호화에 사용자 지정 KMS 키를 사용하는 경우 필요에 따라 IAM 역할을 사용자 지정합니다. 예를 들어, 다음을 수행합니다.

    1. 다음 코드를 복사하여 새로운 kms-key-for-encryption-on-ebs.json 파일에 붙여 넣습니다. custom-key-arn을 사용자 지정 KMS 키 ARN으로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 정책을 생성합니다. KMS_Key_For_Encryption_On_EBS_Policy를 다른 이름으로 변경할 수 있습니다. 그러나 이렇게 하는 경우 이후 단계에서도 변경해야 합니다.

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 다음 명령을 사용하여 IAM 정책을 역할에 연결합니다. 111122223333을 계정 ID로 바꿉니다. 클러스터가 AWS GovCloud(미국 동부) 또는 AWS GovCloud(미국 서부) AWS 리전에 있는 경우 arn:aws:arn:aws-us-gov:로 바꿉니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

이제 Amazon EBS CSI 드라이버 IAM 역할을 생성했으므로 다음 섹션을 계속 진행할 수 있습니다. 이 IAM 역할을 사용하여 추가 기능을 배포하면 ebs-csi-controller-sa라는 서비스 계정을 생성하고 사용하도록 구성됩니다. 이 서비스 계정은 필요한 Kubernetes 권한이 할당되어 있는 Kubernetes clusterrole에 바인딩됩니다.

2단계: Amazon EBS CSI 드라이버 받기

보안을 강화하고 작업량을 줄이려면 Amazon EKS 추가 기능을 통해 Amazon EBS CSI 드라이버를 설치하는 것이 좋습니다. Amazon EKS 추가 기능을 클러스터에 추가하려면 Amazon EKS 추가 기능 생성 섹션을 참조하세요. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 섹션을 참조하세요.

중요

Amazon EBS 드라이버를 Amazon EKS 추가 기능으로 추가하기 전에 클러스터에 자체 관리형 버전의 드라이버가 설치되어 있지 않은지 확인하세요. 설치되어 있다면 GitHub의 자체 관리형 Amazon EBS CSI 제거를 참조하세요.

대신 Amazon EBS CSI 드라이버의 자체 관리형 설치를 원하는 경우 GitHub의 Installation을 참조하세요.

3단계: 샘플 애플리케이션 배포

다양한 샘플 앱을 배포하고 필요에 따라 수정할 수 있습니다. 자세한 내용은 GitHub에 있는 Kubernetes Examples를 참조하세요.