Amazon EKS identity-based policy 예시

Amazon EKS identity-based policy 예시

기본적으로 IAM 사용자와 역할은 Amazon EKS 리소스를 만들거나 수정할 권한이 없어요. 또한 AWS Management Console, AWS CLI 또는 AWS API를 사용해 작업을 수행할 수 없어요. IAM 관리자는 사용자와 역할이 필요한 특정 리소스에서 특정 API 작업을 수행할 수 있도록 IAM 정책을 만들어야 해요. 그런 다음 관리자는 그 정책을 해당 권한이 필요한 IAM 사용자나 그룹에 연결해야 해요.

이러한 예시 JSON 정책 문서로 IAM identity-based policy를 만드는 방법은 IAM 사용자 가이드의 JSON 탭에서 정책 만들기를 참고하세요.

Amazon EKS 클러스터를 만들 때 클러스터를 만든 IAM 보안 주체는 Amazon EKS 컨트롤 플레인의 클러스터 RBAC(Role-Based Access Control) 구성에서 system:masters 권한을 자동으로 부여받아요. 이 보안 주체는 보이는 구성에 나타나지 않으므로, 원래 클러스터를 만든 보안 주체가 누구인지 추적해 두어야 해요. 다른 IAM 보안 주체에 클러스터와 상호작용할 수 있는 권한을 부여하려면 Kubernetes 안의 aws-auth ConfigMap을 편집하고 aws-auth ConfigMap에서 지정한 group 이름으로 Kubernetes rolebinding 또는 clusterrolebinding을 만드세요.

ConfigMap 작업에 대한 자세한 내용은 IAM 사용자와 역할에 Kubernetes API 접근 권한 부여하기를 참고하세요.

출처: 문서

본문

관련 토픽

  • 정책 모범 사례
  • Amazon EKS 콘솔 사용
  • IAM 사용자가 자신의 권한을 볼 수 있게 허용
  • AWS Cloud에 Kubernetes 클러스터 생성
  • Outpost에 로컬 Kubernetes 클러스터 생성
  • Kubernetes 클러스터 업데이트
  • 모든 클러스터 나열 또는 설명
  • 클러스터 업데이트 취소(롤백)

정책 모범 사례 (Policy best practices)

ID 기반 정책은 누군가 계정의 Amazon EKS 리소스를 생성·접근·삭제할 수 있는지 결정해요. 이러한 작업은 AWS 계정에 비용을 발생시킬 수 있어요. ID 기반 정책을 만들거나 편집할 때는 다음 지침과 권장 사항을 따르세요.

  • AWS 관리형 정책으로 시작해 최소 권한으로 나아가기 – 사용자와 워크로드에 권한을 부여하기 시작하려면 많은 일반적인 사용 사례에 대한 권한을 부여하는 AWS 관리형 정책을 사용하세요. 이 정책은 AWS 계정에서 사용할 수 있어요. 사용 사례에 특화된 AWS 고객 관리형 정책을 정의해 권한을 더 줄일 것을 권장해요. 자세한 내용은 IAM 사용자 가이드의 AWS 관리형 정책 또는 직무별 AWS 관리형 정책을 참고하세요.
  • 최소 권한 적용 – IAM 정책으로 권한을 설정할 때는 작업을 수행하는 데 필요한 권한만 부여하세요. 특정 조건에서 특정 리소스에 대해 수행할 수 있는 작업을 정의하면 되며, 이를 최소 권한이라고 해요. IAM으로 권한을 적용하는 방법은 IAM 사용자 가이드의 IAM의 정책 및 권한을 참고하세요.
  • IAM 정책의 조건을 사용해 접근 추가 제한 – 정책에 조건을 추가해 작업과 리소스에 대한 접근을 제한할 수 있어요. 예를 들어 모든 요청이 SSL로 전송되어야 한다고 지정하는 정책 조건을 작성할 수 있어요. 또한 특정 AWS 서비스(예: AWS CloudFormation)를 통해 사용되는 경우에만 서비스 작업 접근을 허용하는 조건도 사용할 수 있어요. 자세한 내용은 IAM 사용자 가이드의 IAM JSON policy elements: Condition을 참고하세요.
  • IAM Access Analyzer로 IAM 정책 검증 – IAM Access Analyzer는 새 정책과 기존 정책이 IAM 정책 언어(JSON)와 IAM 모범 사례를 준수하는지 검증해요. IAM Access Analyzer는 보안되고 기능적인 정책을 작성하도록 돕는 100개 이상의 정책 검사와 실행 가능한 권장 사항을 제공해요. 자세한 내용은 IAM 사용자 가이드의 IAM Access Analyzer policy validation을 참고하세요.
  • MFA(다중 요소 인증) 요구 – AWS 계정에서 IAM 사용자나 루트 사용자가 필요한 시나리오라면 추가 보안을 위해 MFA를 켜세요. API 작업이 호출될 때 MFA를 요구하려면 정책에 MFA 조건을 추가하세요. 자세한 내용은 IAM 사용자 가이드의 Configuring MFA-protected API access를 참고하세요.

IAM의 모범 사례에 대한 자세한 내용은 IAM 사용자 가이드의 보안 모범 사례를 참고하세요.

Amazon EKS 콘솔 사용

Amazon EKS 콘솔에 접근하려면 IAM 보안 주체에 최소한의 권한 세트가 필요해요. 이 권한은 보안 주체가 AWS 계정의 Amazon EKS 리소스를 나열하고 세부 정보를 볼 수 있게 해줘요. 최소 필수 권한보다 더 제한적인 ID 기반 정책을 만들면 해당 정책이 연결된 보안 주체에 대해 콘솔이 의도대로 작동하지 않아요.

IAM 보안 주체가 여전히 Amazon EKS 콘솔을 사용할 수 있게 하려면 AmazonEKSAdminPolicy 같은 고유한 이름의 정책을 만드세요. 정책을 보안 주체에 연결하세요. 자세한 내용은 IAM 사용자 가이드의 Adding and removing IAM identity permissions을 참고하세요.

중요

다음 예시 정책은 보안 주체가 콘솔의 Configuration 탭에서 정보를 볼 수 있게 해요. AWS Management Console의 Overview 및 Resources 탭에서 정보를 보려면 보안 주체에 Kubernetes 권한도 필요해요. 자세한 내용은 Required permissions을 참고하세요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}

AWS CLI나 AWS API에만 호출하는 보안 주체에게는 최소 콘솔 권한을 허용할 필요가 없어요. 대신 수행하려는 API 작업과 일치하는 작업에만 접근을 허용하세요.

IAM 사용자가 자신의 권한을 볼 수 있게 허용

이 예시는 IAM 사용자가 자신의 사용자 ID에 연결된 인라인 및 관리형 정책을 볼 수 있게 하는 정책을 만드는 방법을 보여줘요. 이 정책은 콘솔 또는 AWS CLI·AWS API를 사용해 프로그래밍 방식으로 이 작업을 완료할 수 있는 권한을 포함해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}

AWS Cloud에 Kubernetes 클러스터 생성

이 예시 정책은 us-west-2 AWS 리전에서 my-cluster라는 Amazon EKS 클러스터를 만들기 위한 최소 권한을 포함해요. 클러스터를 만들려는 AWS 리전으로 AWS 리전을 바꿀 수 있어요. AWS Management Console에서 The actions in your policy do not support resource-level permissions and require you to choose All resources라는 경고가 보이면 안전하게 무시할 수 있어요. 계정에 이미 AWSServiceRoleForAmazonEKS 역할이 있다면 정책에서 iam:CreateServiceLinkedRole 작업을 제거할 수 있어요. 계정에서 Amazon EKS 클러스터를 만든 적이 있다면 이 역할은 이미 존재하므로(삭제하지 않는 한) 그렇습니다.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "eks:CreateCluster",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-cluster"
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::111122223333:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iam:AWSServiceName": "eks"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/cluster-role-name"
        }
    ]
}

Outpost에 로컬 Kubernetes 클러스터 생성

이 예시 정책은 us-west-2 AWS 리전의 Outpost에서 my-cluster라는 Amazon EKS 로컬 클러스터를 만들기 위한 최소 권한을 포함해요. 클러스터를 만들려는 AWS 리전으로 AWS 리전을 바꿀 수 있어요. AWS Management Console에서 The actions in your policy do not support resource-level permissions and require you to choose All resources라는 경고가 보이면 안전하게 무시할 수 있어요. 계정에 이미 AWSServiceRoleForAmazonEKSLocalOutpost 역할이 있다면 정책에서 iam:CreateServiceLinkedRole 작업을 제거할 수 있어요. 계정의 Outpost에서 Amazon EKS 로컬 클러스터를 만든 적이 있다면 이 역할은 이미 존재하므로(삭제하지 않는 한) 그렇습니다.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "eks:CreateCluster",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-cluster"
        },
        {
            "Action": [
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "iam:GetRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::111122223333:role/aws-service-role/outposts.eks-local.amazonaws.com/AWSServiceRoleForAmazonEKSLocalOutpost"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::111122223333:role/cluster-role-name"
        },
        {
            "Action": [
                "iam:CreateInstanceProfile",
                "iam:TagInstanceProfile",
                "iam:AddRoleToInstanceProfile",
                "iam:GetInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:RemoveRoleFromInstanceProfile"
            ],
            "Resource": "arn:aws:iam::*:instance-profile/eks-local-*",
            "Effect": "Allow"
        }
    ]
}

Kubernetes 클러스터 업데이트

이 예시 정책은 us-west-2 AWS 리전에서 my-cluster라는 클러스터를 업데이트하기 위한 최소 권한을 포함해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "eks:UpdateClusterVersion",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-cluster"
        }
    ]
}

모든 클러스터 나열 또는 설명

이 예시 정책은 계정의 모든 클러스터를 나열하고 설명하기 위한 최소 권한을 포함해요. IAM 보안 주체는 update-kubeconfig AWS CLI 명령을 사용하려면 클러스터를 나열하고 설명할 수 있어야 해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:ListClusters"
            ],
            "Resource": "*"
        }
    ]
}

클러스터 업데이트 취소 (롤백)

사용자가 진행 중인 롤백 작업을 취소할 수 있게 하려면 eks:CancelUpdate 작업을 부여하세요. 리소스 ARN 또는 태그 기반 조건으로 범위를 지정할 수 있어요.

리소스 ARN 기반:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "eks:CancelUpdate",
    "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-cluster"
  }]
}

태그 기반:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "eks:CancelUpdate",
    "Resource": "*",
    "Condition": {
      "StringEquals": {
        "aws:ResourceTag/environment": "development"
      }
    }
  }]
}

전체 클러스터 롤백 프로세스에 대한 자세한 내용은 클러스터를 이전 Kubernetes 버전으로 롤백하기를 참고하세요.

더 알아보기 (Learn more)