이 페이지에서는 GKE 연결 클러스터 환경 내에서 커스텀 제약 조건을 사용 설정하고 사용하는 방법을 보여줍니다. Google Cloud의 조직 정책 서비스를 사용하면 클라우드 환경에서 리소스 구성을 관리하고 가드레일을 만들 수 있습니다.
개요
커스텀 조직 정책을 사용하면 GKE Multi-cloud 환경 전반에서 세분화된 리소스 정책을 만들어 조직의 특정 보안 및 규정 준수 요구사항을 충족할 수 있습니다. 테스트 실행 모드에서 조직 정책을 만들어 프로덕션 워크로드에 영향을 미치지 않고 새 정책을 테스트할 수도 있습니다.
조직 정책에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.
시작하기 전에
시작하기 전에 다음 주제를 이해해야 합니다.
정책 상속
기본적으로 조직 정책은 정책을 적용하는 리소스의 하위 요소에 상속됩니다. 예를 들어 조직에 정책을 적용하면 Google Cloud 에서 조직의 모든 프로젝트에 정책을 적용합니다. 정책 상속 및 평가 규칙 변경 방법에 대한 자세한 내용은 계층 구조 평가 규칙을 참조하세요.
제한사항
커스텀 제약 조건을 만들기 전에 다음 제한사항에 유의하세요.
- 커스텀 제약 조건은 GKE 연결된 클러스터 리소스의
CREATE
또는UPDATE
메서드에만 적용될 수 있습니다. - 새로 적용된 커스텀 제약 조건은 기존 리소스에 자동으로 적용되지 않습니다. 제약 조건을 적용하려면 기존 리소스를 업데이트해야 합니다. 업데이트해야 하는 기존 리소스를 찾으려면 시험 이전 조직 정책을 시행하면 됩니다.
- 제약 조건을 만들고 조직 정책을 시행하려면 Google Cloud 조직에 조직 정책 관리자(
roles/orgpolicy.policyAdmin
) IAM 역할이 필요합니다. 커스텀 제약 조건으로 조직 정책을 관리하는 데 필요한 권한에 대한 자세한 내용은 필요한 역할을 참조하세요.
가격 책정
조직 정책 및 커스텀 제약 조건은 무료로 제공됩니다.
커스텀 제약조건 만들기
'출력 전용'으로 설명된 필드를 제외하고 AttachedCluster API 리소스 사양의 필드를 사용하여 커스텀 제약 조건을 지정해야 합니다.
커스텀 제약조건 만들기
새 커스텀 제약 조건을 만들려면 YAML 파일에서 제약 조건을 정의하고 Google Cloud CLI를 사용하여 조직에서 커스텀 제약 조건을 적용합니다. 이 제약 조건은 GKE 연결 클러스터 리소스 전반에 적용할 특정 정책을 캡슐화해야 합니다.
커스텀 제약조건에 대한 YAML 파일을 만듭니다.
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - gkemulticloud.googleapis.com/AttachedCluster 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
: 연결된 클러스터 리소스의 표현에 대해 작성된 조건입니다. 조건은 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/AttachedCluster 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-
정책 테스트
제한된 프로젝트에 EKS 클러스터를 등록하여 조직 정책을 테스트합니다.
제한된 프로젝트에 EKS 클러스터를 등록합니다.
gcloud container attached clusters register CLUSTER_NAME \ --location=GOOGLE_CLOUD_REGION \ --fleet-project=PROJECT_NUMBER \ --platform-version=PLATFORM_VERSION \ --distribution=eks \ --issuer-url=ISSUER_URL \ --context=KUBECONFIG_CONTEXT \ --kubeconfig=KUBECONFIG_PATH
출력은 다음과 비슷합니다.
ERROR: (gcloud.container.attached.clusters.register) 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