이 페이지 개선에 도움 주기
이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.
Kubernetes 서비스 계정에 IAM 역할 할당
이 주제에서는 AWS Identity and Access Management(IAM) 역할을 수임하도록 Kubernetes 서비스 계정을 구성하는 방법을 다룹니다. 서비스 계정을 사용하도록 구성된 모든 Pods는 해당 역할에 액세스 권한이 있는 모든 AWS 서비스에 액세스할 수 있습니다.
사전 조건
-
기존 클러스터가 있어야 합니다. 아직 없는 경우 Amazon EKS 시작하기 안내서 중 하나에 따라 생성할 수 있습니다.
-
클러스터에 대한 기존 IAM OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 확인하거나 생성하는 방법을 알아보려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요.
-
AWS Command Line Interface(AWS CLI) 버전
2.12.3
이상 또는1.27.160
이상이 디바이스나 AWS CloudShell에 설치 및 구성되어 있습니다. 현재 버전을 확인하려면
을 사용합니다. macOS용aws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
또는 Homebrew와 같은 패키지 관리자는 최신 버전의 AWS CLI보다 여러 버전 이전인 경우가 많습니다. 최신 버전을 설치하려면 AWS Command Line Interface 사용 설명서의 AWS CLI 설치, 업데이트 및 제거와 aws configure를 통한 빠른 구성을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 AWS CloudShell 사용 설명서의 홈 디렉터리에 AWS CLI 설치를 참조하세요. -
디바이스 또는 AWS CloudShell에 설치된
kubectl
명령줄 도구. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어 클러스터 버전이1.29
인 경우kubectl
버전1.28
,1.29
또는1.30
를 함께 사용할 수 있습니다.kubectl
을 설치하거나 업그레이드하려면 kubectl 및 eksctl 설정 부분을 참조하세요. -
클러스터 구성이 포함된 기존
kubectl
config
파일입니다.kubectl
config
파일을 생성하려면 kubeconfig 파일을 생성하여 kubectl을 EKS 클러스터에 연결 섹션을 참조하세요.
Kubernetes 서비스 계정과 IAM 역할 연결
-
IAM 역할에 기존 IAM 정책을 연결하려면 다음 단계로 건너뜁니다.
IAM 정책을 생성합니다. 자체 정책을 생성하거나 필요한 권한 중 일부를 이미 부여하는 AWS 관리형 정책을 복사하여 특정 요구 사항에 맞게 사용자 지정할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 IAM 정책 생성을 참조하세요.
-
Pods가 액세스할 AWS 서비스에 대한 권한이 포함된 파일을 생성합니다. 모든 AWS 서비스에 대한 모든 작업 목록은 서비스 승인 참조에서 확인하세요.
다음 명령을 실행하여 Amazon S3 버킷에 대한 읽기 전용 액세스를 허용하는 예제 정책 파일을 생성할 수 있습니다. 이 버킷에 구성 정보 또는 부트스트랩 스크립트를 저장할 수도 있고, Pod의 컨테이너는 이 버킷에서 파일을 읽어 애플리케이션으로 로드할 수 있습니다. 이 예제 정책을 생성하려면 다음 내용을 디바이스에 복사합니다.
my-pod-secrets-bucket
을 버킷 이름으로 바꾸고 명령을 실행합니다.cat >
my-policy.json
<<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket
" } ] } EOF -
IAM 정책을 생성합니다.
aws iam create-policy --policy-name
my-policy
--policy-document file://my-policy.json
-
-
IAM 역할을 생성하고 Kubernetes 서비스 계정과 연결합니다.
eksctl
또는 AWS CLI를 사용할 수 있습니다. -
역할 및 서비스 계정이 올바르게 구성되었는지 확인합니다.
-
IAM 역할의 신뢰 정책이 올바르게 구성되었는지 확인합니다.
aws iam get-role --role-name
my-role
--query Role.AssumeRolePolicyDocument예제 출력은 다음과 같습니다.
{ "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
:sub": "system:serviceaccount:default:my-service-account
", "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } -
이전 단계에서 역할에 연결한 정책이 해당 역할에 연결되었는지 확인합니다.
aws iam list-attached-role-policies --role-name
my-role
--query AttachedPolicies[].PolicyArn --output text예제 출력은 다음과 같습니다.
arn:aws:iam::
111122223333
:policy/my-policy
-
사용하려는 정책의 Amazon 리소스 이름(ARN)을 저장할 변수를 설정합니다.
my-policy
를 권한을 확인하려는 정책의 이름으로 바꿉니다.export policy_arn=arn:aws:iam::
111122223333
:policy/my-policy
-
정책의 기본 버전을 봅니다.
aws iam get-policy --policy-arn $policy_arn
예제 출력은 다음과 같습니다.
{ "Policy": { "PolicyName": "
my-policy
", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE
", "Arn": "arn:aws:iam::111122223333
:policy/my-policy
", "Path": "/", "DefaultVersionId": "v1
", [...] } } -
정책 내용을 보고 Pod에 필요한 모든 권한이 정책에 포함되어 있는지 확인합니다. 필요한 경우 다음 명령에서
1
을 이전 출력에서 반환된 버전으로 바꿉니다.aws iam get-policy-version --policy-arn $policy_arn --version-id v
1
예제 출력은 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" }
] }이전 단계에서 예제 정책을 생성한 경우 출력은 동일합니다. 다른 정책을 생성한 경우
예제
내용이 다릅니다. -
Kubernetes 서비스 계정에 역할이 주석으로 달렸는지 확인합니다.
kubectl describe serviceaccount
my-service-account
-ndefault
예제 출력은 다음과 같습니다.
Name:
my-service-account
Namespace:default
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333
:role/my-role
Image pull secrets: <none> Mountable secrets:my-service-account
-token-qqjfl
Tokens:my-service-account
-token-qqjfl
[...]
-
-
(선택 사항) 서비스 계정의 AWS Security Token Service 엔드포인트 구성. AWS는 글로벌 엔드포인트 대신 리전별 AWS STS 엔드포인트를 사용할 것을 권장합니다. 이렇게 하면 지연 시간이 줄고, 중복성이 기본 제공되고, 세션 토큰 유효성이 향상됩니다.
다음 단계
Kubernetes 서비스 계정을 사용하도록 Pods 구성