이 페이지에서는 AWS용 GKE 환경 내에서 커스텀 제약조건을 사용 설정하고 사용하는 방법을 보여줍니다. Google Cloud의 조직 정책 서비스를 사용하면 클라우드 환경에서 리소스 구성을 관리하고 가드레일을 만들 수 있습니다.
개요
커스텀 조직 정책을 사용하면 GKE Multi-cloud 환경 전반에서 세분화된 리소스 정책을 만들어 조직의 특정 보안 및 규정 준수 요구사항을 충족할 수 있습니다. 테스트 실행 모드에서 조직 정책을 만들어 프로덕션 워크로드에 영향을 미치지 않고 새 정책을 테스트할 수도 있습니다.
조직 정책에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.
시작하기 전에
시작하기 전에 다음 주제를 이해해야 합니다.
정책 상속
기본적으로 조직 정책은 정책을 적용하는 리소스의 하위 요소에 상속됩니다. 예를 들어 조직에 정책을 적용하면 Google Cloud 에서 조직의 모든 프로젝트에 정책을 적용합니다. 정책 상속 및 평가 규칙 변경 방법에 대한 자세한 내용은 계층 구조 평가 규칙을 참조하세요.
제한사항
커스텀 제약조건을 만들기 전에 다음 제한사항에 유의하세요.
- 커스텀 제약조건은 AWS용 GKE 리소스의
CREATE
또는UPDATE
메서드에만 적용할 수 있습니다. - 새로 적용된 커스텀 제약조건은 기존 리소스에 자동으로 적용되지 않습니다. 제약조건을 적용하려면 기존 리소스를 업데이트해야 합니다. 업데이트해야 하는 기존 리소스를 찾으려면 시험 이전 조직 정책을 시행하면 됩니다.
- 제약조건을 만들고 조직 정책을 시행하려면 Google Cloud 조직에 조직 정책 관리자(
roles/orgpolicy.policyAdmin
) IAM 역할이 필요합니다. 커스텀 제약조건으로 조직 정책을 관리하는 데 필요한 권한에 대한 자세한 내용은 필요한 역할을 참조하세요.
가격 책정
조직 정책 및 커스텀 제약조건은 무료로 제공됩니다.
커스텀 제약조건 만들기
커스텀 제약조건은 "출력 전용"으로 설명된 필드를 제외하고 AwsCluster 및 AwsNodepool API 리소스 사양의 필드를 사용하여 지정해야 합니다.커스텀 제약조건 만들기
새 커스텀 제약조건을 만들려면 YAML 파일에서 제약조건을 정의하고 Google Cloud CLI를 사용하여 조직에서 커스텀 제약조건을 적용합니다. 이 제약조건은 AWS용 GKE 리소스 전반에 적용할 특정 정책을 캡슐화해야 합니다.
클러스터에 커스텀 제약조건을 정의하기 위한 YAML 파일을 만듭니다.
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
노드 풀에 커스텀 제약조건을 정의하려면 다음 YAML 구성을 사용하세요.
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
다음을 바꿉니다.
ORGANIZATION_ID
: 조직 ID입니다(예:123456789
).CONSTRAINT_NAME
: 새 커스텀 제약조건의 이름입니다. 커스텀 제약조건은custom.
으로 시작해야 하며 대문자, 소문자 또는 숫자만 포함할 수 있습니다. 예를 들면custom.allowClusterCreateIfAnnotationPresent
입니다. 이 필드의 최대 길이는 프리픽스를 제외하고 70자(영문 기준)입니다(예:organizations/123456789/customConstraints/custom
).CONDITION
: Google Cloud 리소스의 표현에 대해 작성된 조건입니다. 조건은 Common Expression Language(CEL)로 작성됩니다. 이 필드의 최대 길이는 1,000자(영문 기준)입니다. 예를 들면 조건:"key" in resource.annotations && resource.annotations.key == "created-by"
입니다.ACTION
: 조건이 충족되면 수행할 작업입니다.ALLOW
또는DENY
일 수 있습니다.DISPLAY_NAME
: 제약조건 표시 이름입니다. 이 필드의 최대 길이는 200자(영문 기준)입니다.DESCRIPTION
: 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대한 설명입니다(예:"Allow new clusters only when certain annotations are set."
). 이 필드의 최대 길이는 2,000자(영문 기준)입니다.
커스텀 제약조건을 만드는 방법에 대한 자세한 내용은 커스텀 제약조건 정의를 참조하세요.
제약조건을 리소스와 연결
새 커스텀 제약조건의 YAML 파일을 만든 후에는 조직 정책에서 제약조건을 사용할 수 있도록 설정해야 합니다.
커스텀 제약조건을 설정하려면
gcloud org-policies set-custom-constraint
명령어를 사용합니다.gcloud org-policies set-custom-constraint PATH_TO_FILE
PATH_TO_FILE
을 커스텀 제약조건 YAML 정의의 경로로 바꿉니다.커스텀 제약조건이 생성되었는지 확인하려면
gcloud org-policies list-custom-constraints
명령어를 사용합니다.gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
출력에 생성된 정책이 표시됩니다.
CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent ACTION_TYPE: ALLOW METHOD_TYPES: CREATE RESOURCE_TYPES: gkemulticloud.googleapis.com/AwsCluster DISPLAY_NAME: Allow new clusters only when certain annotations are set.
커스텀 제약조건 시행
새 커스텀 제약조건을 시행하려면 제약조건을 참조하는 조직 정책을 만든 후 조직 정책을 적용합니다.
조직 정책에 대한 YAML 파일을 만듭니다.
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
다음을 바꿉니다.
RESOURCE_HIERARCHY
: 시정 조치 범위에 영향을 미치는 새 정책의 위치입니다. Google Cloud 리소스 계층 구조를 가이드로 사용합니다. 예를 들어 특정 프로젝트에 정책을 적용하려면projects/
PROJECT_ID
를 사용합니다. 특정 조직에 정책을 적용하려면organizations/
ORGANIZATION_ID
를 사용합니다.POLICY_NAME
: 새 정책의 이름입니다.
정책을 시행합니다.
gcloud org-policies set-policy PATH_TO_POLICY
PATH_TO_POLICY
를 정책 정의 파일의 경로로 바꿉니다.정책이 있는지 확인합니다.
gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
다음을 바꿉니다.
RESOURCE_FLAG
: 정책을 적용한 Google Cloud 리소스입니다. 예를 들면 프로젝트 또는 조직입니다.RESOURCE_ID
: 정책을 적용한 리소스의 ID입니다. 예를 들어 프로젝트 ID 또는 조직 ID입니다.
출력은 다음과 비슷합니다.
CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent LIST_POLICY: - BOOLEAN_POLICY: SET ETAG: CPjb27wGEOijhL4B-
정책 테스트
제한된 프로젝트에서 새 AWS 클러스터를 만들어 조직 정책을 테스트합니다.제한된 프로젝트에서 AWS 클러스터를 만듭니다.
gcloud container aws clusters create CLUSTER_NAME \ --aws-region AWS_REGION \ --location GOOGLE_CLOUD_LOCATION \ --cluster-version CLUSTER_VERSION \ --fleet-project FLEET_PROJECT \ --vpc-id VPC_ID \ --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \ --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \ --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \ --role-arn API_ROLE_ARN \ --database-encryption-kms-key-arn DB_KMS_KEY_ARN \ --admin-users ADMIN_USERS_LIST \ --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \ --iam-instance-profile CONTROL_PLANE_PROFILE \ --tags "Name=CLUSTER_NAME-cp"
출력은 다음과 비슷합니다.
FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."] '@type': type.googleapis.com/google.rpc.ErrorInfo domain: googleapis.com metadata: customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent service: gkemulticloud.googleapis.com reason: CUSTOM_ORG_POLICY_VIOLATION