Creare e gestire vincoli personalizzati

Questa pagina mostra come abilitare e utilizzare i vincoli personalizzati nell'ambiente GKE su Azure. Google CloudIl servizio Policy dell'organizzazione ti aiuta a gestire le configurazioni delle risorse e a creare barriere protettive nel tuo ambiente cloud.

Panoramica

Con le policy dell'organizzazione personalizzate, puoi creare policy delle risorse granulari negli ambienti GKE Multi-Cloud per soddisfare i requisiti specifici di sicurezza e conformità della tua organizzazione. Puoi anche creare policy dell'organizzazione in modalità dry run per testare nuove policy senza influire sui carichi di lavoro di produzione.

Per saperne di più sulle policy dell'organizzazione, consulta Introduzione al servizio Policy dell'organizzazione.

Prima di iniziare

Prima di iniziare, assicurati di comprendere i seguenti argomenti.

Ereditarietà delle policy

Per impostazione predefinita, le policy dell'organizzazione vengono ereditate dai discendenti delle risorse su cui applichi la policy. Ad esempio, se applichi una policy a un'organizzazione, Google Cloud la policy viene applicata a tutti i progetti dell'organizzazione. Per saperne di più sull'ereditarietà delle policy e su come modificare le regole di valutazione, consulta Regole di valutazione della gerarchia.

Limitazioni

Prima di creare vincoli personalizzati, tieni presente le seguenti limitazioni:

  • I vincoli personalizzati possono essere applicati solo ai metodi CREATE o UPDATE per le risorse GKE su Azure.
  • I vincoli personalizzati appena applicati non vengono applicati automaticamente alle risorse esistenti. Devi aggiornare le risorse esistenti per applicare il vincolo. Per trovare le risorse esistenti che devono essere aggiornate, puoi applicare una policy dell'organizzazione in modalità dry run.
  • Per creare vincoli e applicare policy dell'organizzazione, devi disporre del ruolo IAM Organization Policy Administrator (roles/orgpolicy.policyAdmin) nella tua Google Cloud organizzazione. Per saperne di più sulle autorizzazioni richieste per gestire le policy dell'organizzazione con vincoli personalizzati, consulta Ruoli richiesti.

Prezzi

Le policy dell'organizzazione e i vincoli personalizzati vengono offerti senza costi aggiuntivi.

Crea vincoli personalizzati

I vincoli personalizzati devono essere specificati utilizzando i campi nelle specifiche delle risorse API AzureCluster, AzureNodepool e AzureClient, esclusi i campi descritti come "Solo output".

Crea un vincolo personalizzato

Per creare un nuovo vincolo personalizzato, definisci il vincolo in un file YAML e lo applichi nella tua organizzazione utilizzando Google Cloud CLI. Questo vincolo deve incapsulare la policy specifica che vuoi applicare alle risorse GKE su Azure.

Crea un file YAML per definire un vincolo personalizzato sul cluster:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AzureCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Per definire un vincolo personalizzato sul pool di nodi, utilizza la seguente configurazione YAML:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AzureNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Sostituisci quanto segue:

  • ORGANIZATION_ID : l'ID dell'organizzazione, ad esempio 123456789.

  • CONSTRAINT_NAME : il nome del nuovo vincolo personalizzato. Un vincolo personalizzato deve iniziare con custom. e può includere solo lettere maiuscole, lettere minuscole o numeri. Ad esempio, custom.allowClusterCreateIfAnnotationPresent. La lunghezza massima di questo campo è di 70 caratteri, senza contare il prefisso, ad esempio organizations/123456789/customConstraints/custom.

  • CONDITION : una condizione scritta in base a una rappresentazione di una Google Cloud risorsa. Le condizioni sono scritte in Common Expression Language (CEL). Questo campo ha una lunghezza massima di 1000 caratteri. Ad esempio, condizione: "key" in resource.annotations && resource.annotations.key == "created-by".

  • ACTION : l'azione da intraprendere se la condizione è soddisfatta. Può essere ALLOW o DENY.

  • DISPLAY_NAME : un nome visualizzato per il vincolo. Questo campo ha una lunghezza massima di 200 caratteri.

  • DESCRIPTION : una descrizione del vincolo da visualizzare come messaggio di errore quando la policy viene violata, ad esempio "Allow new clusters only when certain annotations are set." Questo campo ha una lunghezza massima di 2000 caratteri.

Per saperne di più su come creare un vincolo personalizzato, consulta Definizione di vincoli personalizzati.

Associa il vincolo alle risorse

Dopo aver creato il file YAML per un nuovo vincolo personalizzato, devi configurarlo in modo che sia disponibile per le policy dell'organizzazione.

  1. Per configurare un vincolo personalizzato, utilizza il comando gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Sostituisci PATH_TO_FILE con il percorso della definizione YAML del vincolo personalizzato.

  2. Per verificare che il vincolo personalizzato sia stato creato, utilizza il comando gcloud org-policies list-custom-constraints:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    L'output elenca le policy create:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AzureCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

Applica il vincolo personalizzato

Per applicare il nuovo vincolo personalizzato, crea una policy dell'organizzazione che faccia riferimento al vincolo, quindi applica la policy dell'organizzazione.

  1. Crea un file YAML per la policy dell'organizzazione:

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

    Sostituisci quanto segue:

    • RESOURCE_HIERARCHY: la posizione della nuova policy, che influisce sull'ambito di applicazione. Utilizza la Google Cloud gerarchia delle risorse come guida. Ad esempio, se vuoi applicare la policy in un progetto specifico, utilizza projects/PROJECT_ID. Per applicare la policy in un'organizzazione specifica, utilizza organizations/ORGANIZATION_ID.

    • POLICY_NAME: il nome della nuova policy.

  2. Applica la policy:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Sostituisci PATH_TO_POLICY con il percorso del file di definizione della policy.

  3. Verifica che la policy esista:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Sostituisci quanto segue:

    • RESOURCE_FLAG: la Google Cloud risorsa in cui hai applicato la policy. Ad esempio, un progetto o un'organizzazione.

    • RESOURCE_ID: l'ID della risorsa in cui hai applicato la policy. Ad esempio, l'ID progetto o l'ID dell'organizzazione.

    L'output è simile al seguente:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Testa la policy

Testa la policy dell'organizzazione creando un nuovo cluster Azure in un progetto con limitazioni.

  1. Crea un cluster Azure in un progetto con limitazioni.

    gcloud container azure clusters create CLUSTER_NAME \
        --location GOOGLE_CLOUD_LOCATION \
        --fleet-project FLEET_PROJECT \
        --azure-tenant-id "${TENANT_ID}" \
        --azure-application-id "${APPLICATION_ID}" \
        --azure-region AZURE_REGION \
        --pod-address-cidr-blocks POD_CIDR \
        --service-address-cidr-blocks SERVICE_CIDR \
        --vm-size VM_SIZE \
        --cluster-version 1.31.1-gke.1800 \
        --ssh-public-key "$SSH_PUBLIC_KEY" \
        --resource-group-id "$CLUSTER_RG_ID" \
        --vnet-id "$VNET_ID" \
        --subnet-id "$SUBNET_ID" # Optional, see following note \
        --tags "control-plane=CLUSTER_NAME" \
        --admin-users ADMIN_USERS_LIST
    
  2. L'output è simile al seguente:

    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