조직 정책 구성

조직 정책을 사용하면 조직의 리소스를 중앙에서 프로그래매틱 방식으로 제어할 수 있습니다. 조직 정책 관리자는 전체 조직에 걸쳐 정책을 구성할 수 있습니다.

이 버전의 Google Distributed Cloud (GDC) 오프라인에서는 조직 정책을 위한 UI나 CLI가 없습니다. API 또는 kubectl CLI를 사용하여 관리해야 합니다.

이점

조직 정책을 구성하면 다음과 같은 여러 이점이 있습니다.

  • 조직의 리소스 사용 방법에 대한 제한사항 구성을 중앙에서 제어합니다.
  • 개발팀이 규정을 준수할 수 있도록 가드레일을 정의하고 설정합니다.
  • 프로젝트 소유자와 해당 팀에서 규정을 위반하지 않고 신속하게 이동할 수 있도록 지원합니다.

Identity and Access Management와의 차이점

Identity and Access Management누구에 중점을 두며 이를 통해 관리자는 권한을 기반으로 특정 리소스에 조치를 취할 수 있는 사용자를 승인할 수 있습니다.

조직 정책은 무엇에 중점을 두며 이를 통해 관리자는 구성 방법을 결정하기 위해 특정 리소스에 대한 제한사항을 설정할 수 있습니다.

사용 가능한 조직 정책 유형 목록

이 GDC 출시에서는 다음 정책 유형을 사용할 수 있습니다.

GDCHRestrictedService

GDCHRestrictedService 정책 유형을 사용하면 GDC에서 사용할 수 있는 서비스를 제한할 수 있습니다. 적용되면 정책은 참조하는 API의 사용을 방지합니다. 예를 들어 이 정책 유형을 사용하여 특정 프로젝트로 지정된 서비스의 사용을 제한할 수 있습니다. 팀에서 새 GDC 서비스를 사용하도록 허용하기 전에 테스트를 실행하려는 경우 정책을 사용하여 새 GDC 서비스에 대한 액세스를 완전히 제한할 수도 있습니다.

서비스 리소스와 동일한 클러스터에서 이 정책을 만듭니다. 서로 다른 서비스 또는 서로 다른 프로젝트에 대해 이 정책의 인스턴스를 여러 개 만들 수 있습니다.

다음은 이 정책의 템플릿입니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: POLICY_NAME
spec:
  match:
    MATCH_SCHEMA
  parameters:
    disabledOperations:
      - DISABLED_OPERATION

다음을 바꿉니다.

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

  • MATCH_SCHEMA: 이 제약 조건에 대해 일치시킬 리소스입니다. 자세한 내용은 클러스터 내에서 조직 정책의 범위 정의 섹션을 참고하세요.

  • DISABLED_OPERATION: 이 정책에서 차단하는 작업 그룹입니다. 허용되는 값은 CREATEUPDATE입니다. disabledOperations 필드의 기본값은 *입니다.

GDCHRestrictedService 정책은 UPDATECREATE 작업만 지원합니다. GET, LIST, DELETE 작업을 제한하려면 IAM을 사용하여 역할을 할당하는 것이 좋습니다.

GDCHRestrictedService 정책은 GDC에서 사용할 수 있는 서비스 중 다음 하위 집합만 지원합니다.

서비스 API 그룹 kinds
Marketplace marketplace.gdc.goog MarketplaceService
Vertex AI Workbench aiplatform.gdc.goog Notebook
데이터베이스 서비스 - Postgres postgresql.dbadmin.gdc.goog
  • DBCluster
  • BackupPlan
  • Import
  • Restore
데이터베이스 서비스 - Oracle oracle.dbadmin.gdc.goog
  • DBCluster
  • BackupPlan
  • Import
Transfer Appliance system.gpc.gke.io TransferApplianceRequest
백업 backup.gdc.goog BackupRepositoryManager
Spark용 Dataproc 컨테이너 (마켓 서비스) sparkoperator.k8s.io SparkApplication

특정 서비스의 종류를 모두 지정할 필요는 없습니다. 해당 종류만 지정하여 서비스 기능의 하위 집합 사용을 제한할 수 있습니다.

예를 들어 마켓 서비스 업데이트를 제한하려면 다음 정책을 만듭니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: no-update-to-marketplace-service
spec:
  match:
    kinds:
    - apiGroups:
      - "marketplace.gdc.goog"
      kinds:
      - MarketplaceService
  parameters:
    disabledOperations:
      - "UPDATE"

이 정책은 종류 값이 MarketplaceServicemarketplace.gdc.goog API 그룹에 대한 UPDATE 작업을 방지합니다. 이 정책은 누구도 Marketplace 서비스를 수정할 수 없도록 합니다.

서비스를 완전히 사용 중지하려면 disabledOperations 매개변수에 CREATEUPDATE를 모두 나열하고 여기에 설명된 모든 종류를 나열합니다.

조직 정책을 관리할 IAM 역할 부여

각 조직 정책에는 연결된 IAM 역할이 있습니다. 특정 조직 정책을 관리하려는 사용자 및 그룹에 IAM 역할을 부여합니다. 사용자 또는 그룹이 GDCHRestrictedService 유형의 정책을 생성, 업데이트 또는 삭제할 수 있도록 하려면 사용자 또는 그룹에 gdchrestrictedservice-policy-manager IAM 역할을 할당하세요.

클러스터 내에서 조직 정책의 범위 정의

조직 정책을 정의할 때 모든 네임스페이스에 영향을 미칠지, 특정 네임스페이스에만 영향을 미칠지, 지정된 목록을 제외한 모든 네임스페이스에 영향을 미칠지 결정합니다. 이를 위해 정책 정의의 .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces, .spec.match.scope 매개변수를 조합하여 사용합니다.

이러한 매개변수에 대해 자세히 알아보려면 조직 정책 일치 섹션 페이지를 참고하세요. 예를 들어 owner: dba-team 라벨이 있는 네임스페이스에서만 데이터베이스를 만들 수 있도록 허용하려면 다음 정책을 만듭니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: db-restricted-to-dbas
spec:
  match:
    scope: Namespaced
    namespaceSelector:
      matchExpressions:
      # We are restricting the use of the service in namespaces that
      # don't have the owner: dba-team label
      - key: owner
        operator: NotIn
        values:
        - dba-team
    kinds:
    - apiGroups:
      - "postgresql.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
      - Restore
    - apiGroups:
      - "oracle.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
  parameters:
    disabledOperations:
      - "UPDATE"
      - "CREATE"

기존 정책 롤백

기존 정책의 시행을 중지하려면 kubectl CLI를 사용하여 정책을 삭제하세요. 정책이 정의된 클러스터와 gdchrestrictedservice-policy-manager IAM 역할에 액세스할 수 있는 kubeconfig 파일을 사용합니다.

조직 정책을 삭제하려면 다음을 실행합니다.

kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
    GDCHRestrictedService/POLICY_NAME

다음을 바꿉니다.

  • CLUSTER_KUBECONFIG: 조직 정책이 있는 클러스터의 kubeconfig 파일입니다.

  • POLICY_NAME: 삭제할 조직 정책의 이름입니다.

감사 모드에서 정책 테스트

정책을 시행하지 않고 테스트할 수 있습니다. 정책을 출시하기 전에 정책이 기존 시스템을 중단하지 않는지 확인하거나 동작이 얼마나 광범위하게 퍼져 있는지 추정하려면 정책을 테스트하세요. 테스트를 추가하려면 정책 정의에 enforcementAction을 추가하세요. 이 매개변수에 사용할 수 있는 값은 세 가지입니다.

  • deny: 정책이 적용됩니다. 기본 설정입니다.
  • dryrun: 작업이 허용되지만 감사 로그와 정책 상태 모두에 정책 위반이 표시됩니다. kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME을 사용하여 위반을 검사합니다.
  • warn: 정책 위반을 트리거한 요청에 대한 응답에 경고도 표시된다는 점을 제외하고 dryrun와 동일합니다.

예를 들어 마켓을 사용 중지하는 정책을 테스트하려면 다음 정책을 만듭니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: disable-marketplace-service-project-alice
Spec:
  enforcementAction: warn
  match:
    kinds:
      - apiGroups: ["marketplace.gdc.goog"]
        kinds: ["MarketplaceService"]