このページでは、GKE 接続クラスタ環境でカスタム制約を有効にして使用する方法について説明します。 Google Cloudの組織のポリシー Service は、リソース構成の管理とクラウド環境でのガードレールの作成で効果的です。
概要
カスタム組織のポリシーを使用すると、GKE Multi-Cloud 環境全体にわたる詳細なリソース ポリシーを作成して、特定のセキュリティとコンプライアンスに関する組織の要件を満たすことができます。ドライラン モードで組織のポリシーを作成して、本番環境のワークロードに影響を与えることなく新しいポリシーをテストすることもできます。
組織のポリシーの詳細については、組織のポリシー Service の概要をご覧ください。
始める前に
始める前に、次のトピックを理解しておきましょう。
ポリシーの継承
デフォルトでは、組織のポリシーを適用したリソースの子孫にそのポリシーが継承されます。たとえば、組織にポリシーを適用すると、 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