組織のポリシーを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は、組織全体にわたってポリシーを構成できます。
このバージョンの Google Distributed Cloud(GDC)エアギャップには、組織のポリシーの UI または CLI がありません。これらを管理するには、API または kubectl CLI を使用する必要があります。
利点
組織のポリシーを構成すると、次のようなメリットがあります。
- 組織のリソースの使用方法に関する制限を構成して集中管理できます。
- 開発チームがコンプライアンスを遵守できるように違反防止策の定義と確立ができます。
- プロジェクト オーナーとチームがコンプライアンス違反を恐れずに迅速に行動できるようになります。
Identity and Access Management との相違点
Identity and Access Management で重要なのは「主体」です。管理者は、特定のリソースに対して誰がアクションを実施できるかを権限に基づいて承認します。
組織のポリシーで重要なのは「何」で、管理者は特定のリソースに対して制限を設定し、どのような構成が可能であるかを決定できます。
利用可能な組織のポリシータイプのリスト
このリリースの GDC では、次のポリシータイプを使用できます。
GDCHRestrictedService
GDCHRestrictedService ポリシータイプを使用すると、GDC で使用できるサービスを制限できます。適用されると、ポリシーは参照する API の使用を禁止します。たとえば、このポリシータイプを使用して、特定のサービスの使用を特定のプロジェクトに制限できます。また、このポリシーを使用して、チームが使用する前にテストを実行する新しい 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: このポリシーがブロックするオペレーションのグループ。指定できる値は- CREATEと- UPDATEです。- disabledOperationsフィールドのデフォルト値は- *です。
GDCHRestrictedService ポリシーは、UPDATE オペレーションと CREATE オペレーションのみをサポートします。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 | 
 | 
| Database Service - Oracle | oracle.dbadmin.gdc.goog | 
 | 
| Transfer Appliance | system.gpc.gke.io | TransferApplianceRequest | 
| バックアップ | backup.gdc.goog | BackupRepositoryManager | 
| Spark 用 Dataproc コンテナ(Marketplace サービス) | 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"
このポリシーは、種類が MarketplaceService の marketplace.gdc.goog API グループに対する UPDATE オペレーションを禁止します。このポリシーにより、Marketplace サービスの変更が禁止されます。
サービスを完全に無効にするには、disabledOperations パラメータに CREATE と UPDATE の両方を指定し、ここに記載されているすべての種類を指定します。
組織のポリシーを管理する IAM ロールを付与する
各組織ポリシーには、関連付けられた IAM ロールがあります。その特定の組織のポリシーを管理するユーザーとグループに IAM ロールを付与します。ユーザーまたはグループが GDCHRestrictedService タイプのポリシーを作成、更新、削除できるようにするには、ユーザーまたはグループに gdchrestrictedservice-policy-manager IAM ロールを割り当てます。
クラスタ内の組織ポリシーのスコープを定義する
組織のポリシーを定義するときに、すべての Namespace に影響を与えるか、特定の Namespace のみに影響を与えるか、特定のリストを除くすべての Namespace に影響を与えるかを決定します。これを実現するには、ポリシー定義の .spec.match.excludedNamespaces、.spec.match.namespaceSelector、.spec.match.namespaces、.spec.match.scope の各パラメータを組み合わせて使用します。
これらのパラメータの詳細については、組織のポリシーの一致セクションのページをご覧ください。たとえば、ラベル owner: dba-team を持つ Namespace でのみデータベースの作成を許可するには、次のポリシーを作成します。
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 を追加します。このパラメータには次の 3 つの値を使用できます。
- deny: ポリシーが適用されます。これはデフォルトの設定です。
- dryrun: アクションは許可されますが、監査ログとポリシー ステータスの両方でポリシー違反を確認できます。- kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAMEを使用して違反を調べます。
- warn:- dryrunと同等ですが、ポリシー違反をトリガーしたリクエストに対するレスポンスで警告も表示されます。
たとえば、Marketplace を無効にするポリシーをテストするには、次のポリシーを作成します。
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"]