커스텀 제약 조건 만들기 및 관리

이 페이지에서는 GKE 연결 클러스터 환경 내에서 커스텀 제약 조건을 사용 설정하고 사용하는 방법을 보여줍니다. Google Cloud의 조직 정책 서비스를 사용하면 클라우드 환경에서 리소스 구성을 관리하고 가드레일을 만들 수 있습니다.

개요

커스텀 조직 정책을 사용하면 GKE Multi-cloud 환경 전반에서 세분화된 리소스 정책을 만들어 조직의 특정 보안 및 규정 준수 요구사항을 충족할 수 있습니다. 테스트 실행 모드에서 조직 정책을 만들어 프로덕션 워크로드에 영향을 미치지 않고 새 정책을 테스트할 수도 있습니다.

조직 정책에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.

시작하기 전에

시작하기 전에 다음 주제를 이해해야 합니다.

정책 상속

기본적으로 조직 정책은 정책을 적용하는 리소스의 하위 요소에 상속됩니다. 예를 들어 조직에 정책을 적용하면 Google Cloud 에서 조직의 모든 프로젝트에 정책을 적용합니다. 정책 상속 및 평가 규칙 변경 방법에 대한 자세한 내용은 계층 구조 평가 규칙을 참조하세요.

제한사항

커스텀 제약 조건을 만들기 전에 다음 제한사항에 유의하세요.

  • 커스텀 제약 조건은 GKE 연결된 클러스터 리소스의 CREATE 또는 UPDATE 메서드에만 적용될 수 있습니다.
  • 새로 적용된 커스텀 제약 조건은 기존 리소스에 자동으로 적용되지 않습니다. 제약 조건을 적용하려면 기존 리소스를 업데이트해야 합니다. 업데이트해야 하는 기존 리소스를 찾으려면 시험 이전 조직 정책을 시행하면 됩니다.
  • 제약 조건을 만들고 조직 정책을 시행하려면 Google Cloud 조직에 조직 정책 관리자(roles/orgpolicy.policyAdmin) IAM 역할이 필요합니다. 커스텀 제약 조건으로 조직 정책을 관리하는 데 필요한 권한에 대한 자세한 내용은 필요한 역할을 참조하세요.

가격 책정

조직 정책 및 커스텀 제약 조건은 무료로 제공됩니다.

커스텀 제약조건 만들기

'출력 전용'으로 설명된 필드를 제외하고 AttachedCluster API 리소스 사양의 필드를 사용하여 커스텀 제약 조건을 지정해야 합니다.

커스텀 제약조건 만들기

새 커스텀 제약 조건을 만들려면 YAML 파일에서 제약 조건을 정의하고 Google Cloud CLI를 사용하여 조직에서 커스텀 제약 조건을 적용합니다. 이 제약 조건은 GKE 연결 클러스터 리소스 전반에 적용할 특정 정책을 캡슐화해야 합니다.

  1. 커스텀 제약조건에 대한 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 파일을 만든 후에는 조직 정책에서 제약 조건을 사용할 수 있도록 설정해야 합니다.

  1. 커스텀 제약 조건을 설정하려면 gcloud org-policies set-custom-constraint 명령어를 사용합니다.

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    PATH_TO_FILE을 커스텀 제약 조건 YAML 정의의 경로로 바꿉니다.

  2. 커스텀 제약 조건이 생성되었는지 확인하려면 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.
    

커스텀 제약 조건 시행

새 커스텀 제약 조건을 적용하려면 제약 조건을 참조하는 조직 정책을 만든 후 조직 정책을 적용합니다.

  1. 조직 정책에 대한 YAML 파일을 만듭니다.

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    다음을 바꿉니다.

    • RESOURCE_HIERARCHY: 시정 조치 범위에 영향을 미치는 새 정책의 위치입니다. Google Cloud 리소스 계층 구조를 가이드로 사용합니다. 예를 들어 특정 프로젝트에 정책을 적용하려면 projects/PROJECT_ID를 사용합니다. 특정 조직에 정책을 적용하려면 organizations/ORGANIZATION_ID를 사용합니다.

    • POLICY_NAME: 새 정책의 이름입니다.

  2. 정책을 시행합니다.

    gcloud org-policies set-policy PATH_TO_POLICY
    

    PATH_TO_POLICY를 정책 정의 파일의 경로로 바꿉니다.

  3. 정책이 있는지 확인합니다.

    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 클러스터를 등록하여 조직 정책을 테스트합니다.

  1. 제한된 프로젝트에 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
    
    
  2. 출력은 다음과 비슷합니다.

    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