Questa pagina mostra come limitare operazioni specifiche sulle risorse Google Kubernetes Engine (GKE) nella tua organizzazione utilizzando vincoli personalizzati nel servizio Google Cloud Organization Policy Service. Puoi utilizzare i vincoli per aiutare la tua organizzazione a soddisfare i requisiti di conformità, sicurezza e policy assicurandoti che le risorse del cluster soddisfino requisiti specifici. In questa pagina imparerai a creare vincoli personalizzati e ad applicarli alle risorse del cluster.
Questa pagina è dedicata agli esperti di sicurezza che si assicurano che la loro organizzazione soddisfi i requisiti di conformità, sicurezza e criteri limitando o richiedendo configurazioni specifiche sulle risorse del cluster. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti GKE. Google Cloud
Prima di leggere questa pagina, assicurati di conoscere le norme relative ai criteri dell'organizzazione.
Informazioni sui criteri e sui vincoli dell'organizzazione
Il servizio Google Cloud Policy dell'organizzazione offre un controllo centralizzato e programmatico sulle risorse della tua organizzazione. In qualità di amministratore delle policy dell'organizzazione, puoi definire una policy dell'organizzazione, ovvero un insieme di limitazioni chiamate vincoli che si applicano alle risorse Google Cloud e ai discendenti di queste risorse nella gerarchia delle risorseGoogle Cloud . Puoi applicare le policy dell'organizzazione a livello di organizzazione, cartella o progetto.
La policy dell'organizzazione fornisce vincoli predefiniti per vari servizi Google Cloud . Tuttavia, se cerchi un controllo più granulare e personalizzabile sui campi specifici limitati nelle policy dell'organizzazione, puoi anche creare vincoli personalizzati e utilizzarli in una policy dell'organizzazione personalizzata.
Risorse supportate in GKE
Per GKE, puoi creare vincoli personalizzati per i metodi CREATE
o UPDATE
in qualsiasi campo della risorsa Cluster
o NodePool
dell'API Google Kubernetes Engine v1, ad eccezione dei campi di sola lettura e dei seguenti campi:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Ereditarietà delle policy
Per impostazione predefinita, i criteri vengono ereditati dai discendenti delle risorse su cui applichi i criteri. Ad esempio, se applichi una policy a una cartella,Google Cloud applica la policy a tutti i progetti contenuti nella cartella. Per scoprire di più su questo comportamento e su come modificarlo, consulta Regole di valutazione della gerarchia.
Prezzi
Le policy e i vincoli dell'organizzazione sono offerti senza costi aggiuntivi.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione
eseguendo
gcloud components update
.
-
Per ottenere le autorizzazioni necessarie per creare vincoli e applicare le policy dell'organizzazione, chiedi all'amministratore di concederti il ruolo IAM Organization Policy Administrator (
roles/orgpolicy.policyAdmin
) nella tua organizzazione Google Cloud . Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Assicurati di conoscere il tuo ID organizzazione.
Crea un vincolo personalizzato
Per creare un nuovo vincolo personalizzato, definisci il vincolo in un file YAML e applica il vincolo personalizzato nella tua organizzazione utilizzando Google Cloud CLI.
Crea un file YAML per il vincolo personalizzato:
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME resourceTypes: - container.googleapis.com/RESOURCE_NAME methodTypes: - METHOD1 - METHOD2 condition: "resource.OBJECT_NAME.FIELD_NAME == VALUE" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
Sostituisci quanto segue:
ORGANIZATION_ID
: l'ID della tua organizzazione, ad esempio123456789
.CONSTRAINT_NAME
: il nome che vuoi assegnare al nuovo vincolo personalizzato. Un vincolo personalizzato deve iniziare concustom.
e può includere solo lettere maiuscole, lettere minuscole o numeri, ad esempiocustom.enableGkeAutopilot
. La lunghezza massima di questo campo è di 70 caratteri, senza contare il prefisso, ad esempioorganizations/123456789/customConstraints/custom.
.RESOURCE_NAME
: il nome (non l'URI) della risorsa REST dell'API GKE contenente l'oggetto e il campo che vuoi limitare. Ad esempio,Cluster
oNodePool
.
METHOD1,METHOD2,...
: un elenco di metodi RESTful per i quali applicare il vincolo. Può essereCREATE
oCREATE
eUPDATE
.condition
: la condizione in base alla quale convalidare la richiesta, scritta in Common Expression Language (CEL). Questo campo ha una lunghezza massima di 1000 caratteri. L'espressione deve contenere i seguenti campi e supporta operatori logici come&&
e||
:OBJECT_NAME
: il nome dell'oggetto dell'API GKE che vuoi limitare, in formato pascalCase. Ad esempio:privateClusterConfig
.FIELD_NAME
: il nome del campo dell'API GKE che vuoi limitare, nel formato pascalCase. Ad esempio:enablePrivateNodes
.VALUE
: il valore del campo. Per i campi booleani, utilizzatrue
ofalse
. Per i campi stringa, utilizza"STRING"
.
ACTION
: l'azione da eseguire secondition
è soddisfatta. Può essereALLOW
oDENY
.DISPLAY_NAME
: un nome facile da ricordare per il vincolo. Questo campo ha una lunghezza massima di 200 caratteri.DESCRIPTION
: una descrizione chiara del vincolo da visualizzare come messaggio di errore in caso di violazione della policy. Questo campo ha una lunghezza massima di 2000 caratteri.
Applica il vincolo personalizzato:
gcloud org-policies set-custom-constraint PATH_TO_FILE
Sostituisci
PATH_TO_FILE
con il percorso del file della definizione del vincolo personalizzato.Verifica che il vincolo personalizzato esista:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
L'output è simile al seguente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= ...
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.
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 gerarchia delle risorseGoogle Cloud come guida. Ad esempio, se vuoi applicare la policy in un progetto specifico, utilizzaprojects/PROJECT_ID
. Per applicare la policy in un'organizzazione specifica, utilizzaorganizations/ORGANIZATION_ID
.POLICY_NAME
: il nome della nuova policy.
Applica la policy:
gcloud org-policies set-policy PATH_TO_POLICY
Sostituisci
PATH_TO_POLICY
con il percorso del file di definizione della policy.Verifica che il criterio esista:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Sostituisci quanto segue:
RESOURCE_FLAG
: la risorsa Google Cloud in cui hai applicato il criterio. Ad esempio,project
ofolder
.RESOURCE_ID
: l'ID della risorsa in cui hai applicato il criterio. Ad esempio, l'ID cartella Google Cloud .
Per un elenco di argomenti, consulta la pagina
gcloud org-policies list
.L'output è simile al seguente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG iam.disableWorkloadIdentityClusterCreation - SET CO3UkJAGEOj1qsQB custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= custom.enableBinAuth - SET CJfKiZUGEJju7LUD
Esempio: crea un vincolo personalizzato e applica una norma
L'esempio seguente crea un vincolo e una policy personalizzati che richiedono che tutti i nuovi cluster in un progetto specifico siano cluster Autopilot.
Prima di iniziare, devi sapere quanto segue:
- L'ID organizzazione
- Un ID progetto
Crea il vincolo
Salva il seguente file come
constraint-enable-autopilot.yaml
:name: organizations/ORGANIZATION_ID/customConstraints/custom.enableGkeAutopilot resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.autopilot.enabled == false" actionType: DENY displayName: Enable GKE Autopilot description: All new clusters must be Autopilot clusters.
Definisce un vincolo in base al quale, per ogni nuovo cluster, se la modalità cluster non è Autopilot, l'operazione viene negata.
Applica il vincolo:
gcloud org-policies set-custom-constraint ~/constraint-enable-autopilot.yaml
Verifica che il vincolo esista:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
L'output è simile al seguente:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.enableGkeAutopilot DENY CREATE container.googleapis.com/Cluster Enable GKE Autopilot ...
Crea la policy
Salva il seguente file come
policy-enable-autopilot.yaml
:name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot spec: rules: - enforce: true
Sostituisci
PROJECT_ID
con l'ID progetto.Applica la norma:
gcloud org-policies set-policy ~/policy-enable-autopilot.yaml
Verifica che il criterio esista:
gcloud org-policies list --project=PROJECT_ID
L'output è simile al seguente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E=
Dopo aver applicato il criterio, attendi circa due minuti prima che Google Cloud inizi a applicarlo.
Testare la policy
Prova a creare un cluster GKE Standard nel progetto:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--num-nodes=1
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto della policy.CONTROL_PLANE_LOCATION
: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
L'output è il seguente:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Esplora esempi di vincoli personalizzati per casi d'uso comuni
Gli esempi seguenti forniscono la sintassi di alcuni vincoli personalizzati che potresti trovare utili, ad esempio l'applicazione della federazione delle identità per i carichi di lavoro per GKE sui nuovi cluster. Per utilizzare questi esempi, modificali in base alle tue esigenze specifiche. Dopodiché, applicale alla tua organizzazione seguendo le istruzioni riportate in questa pagina.
Descrizione | Sintassi del vincolo |
---|---|
Consenti la creazione di cluster solo quando è abilitata l'autorizzazione binaria |
name: organizations/ORGANIZATION_ID/customConstraints/custom.gkeBinaryAuthorization resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.binaryAuthorization.enabled == true || resource.binaryAuthorization.evaluationMode=='PROJECT_SINGLETON_POLICY_ENFORCE'" action: ALLOW displayName: Enable GKE Binary Authorization description: All new clusters must enable Binary Authorization. |
Non disabilitare l'upgrade automatico dei nodi per i nuovi node pool |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE condition: "resource.management.autoUpgrade == true" actionType: ALLOW displayName: Enable node auto-upgrade description: All node pools must have node auto-upgrade enabled. |
Abilitare la federazione delle identità per i carichi di lavoro per GKE per i nuovi cluster |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableWorkloadIdentity resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "has(resource.workloadIdentityConfig.workloadPool) || resource.workloadIdentityConfig.workloadPool.size() > 0" actionType: ALLOW displayName: Enable Workload Identity on new clusters description: All new clusters must use Workload Identity. |
Non disabilitare Cloud Logging sui cluster esistenti |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableLogging resourceTypes: - container.googleapis.com/Cluster methodTypes: - UPDATE condition: "resource.loggingService == 'none'" actionType: DENY displayName: Do not disable Cloud Logging description: You cannot disable Cloud Logging on existing GKE cluster. |
Consenti la creazione o l'aggiornamento del pool di nodi Standard solo quando gli endpoint metadati legacy sono disabilitati |
name: organizations/ORGANIZATION_ID/customConstraints/custom.nodeConfigMetadata resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE - UPDATE condition: "'disable-legacy-endpoints' in resource.config.metadata && resource.config.metadata['disable-legacy-endpoints'] == 'true'" actionType: ALLOW displayName: Disable legacy metadata endpoints description: You can only create or update node pools if you disable legacy metadata endpoints. Questo esempio di vincolo mostra come impostare un vincolo personalizzato su un
valore della mappa. Il campo |
Passaggi successivi
- Scopri di più sui vincoli.
- Scopri le opzioni aggiuntive che puoi utilizzare per personalizzare le tue norme.
- Scopri come impostare i criteri dell'organizzazione in base ai tag.
- Scopri come richiedere l'attivazione di VM Manager su tutti i nodi GKE.