Questa pagina mostra come limitare operazioni specifiche sulle risorse Google Kubernetes Engine (GKE) della tua organizzazione utilizzando vincoli personalizzati nel Google Cloud servizio Organization Policy Service. Puoi utilizzare i vincoli per aiutare la tua organizzazione a soddisfare i requisiti di conformità, sicurezza e criteri assicurandoti che le risorse del cluster soddisfino requisiti specifici. In questa pagina scoprirai come creare vincoli personalizzati e applicarli alle risorse del cluster.
Questa pagina è rivolta agli esperti di sicurezza che si assicurano che la propria organizzazione adempia ai requisiti di conformità, sicurezza e criteri limitando o richiedendo configurazioni specifiche per le risorse del cluster. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Prima di leggere questa pagina, assicurati di conoscere le norme relative ai criteri dell'organizzazione.
Informazioni sui criteri e sui vincoli dell'organizzazione
I Google Cloud criteri dell'organizzazione ti offrono un controllo centralizzato e programmatico sulle risorse della tua organizzazione. In qualità di amministratore dei criteri dell'organizzazione, puoi definire un criterio dell'organizzazione, ovvero un insieme di restrizioni chiamate vincoli che si applicano alle Google Cloud risorse e ai discendenti di queste risorse nella Google Cloud gerarchia delle risorse. Puoi applicare i criteri dell'organizzazione a livello di organizzazione, cartella o progetto.
I criteri dell'organizzazione forniscono limitazioni predefinite per vari Google Cloud servizi. Tuttavia, se vuoi un controllo più granulare e personalizzabile sui campi specifici limitati nei criteri dell'organizzazione, puoi anche creare vincoli personalizzati e utilizzarli in un criterio dell'organizzazione personalizzato.
Risorse supportate in GKE
Per GKE, puoi creare vincoli personalizzati per i metodi CREATE
o
UPDATE
su qualsiasi campo della risorsa
Cluster
o
NodePool
dell'API Google Kubernetes Engine v1, tranne per i campi solo di output e per i seguenti campi:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Ereditarietà delle norme
Per impostazione predefinita, i criteri vengono ereditati dai discendenti delle risorse su cui li applichi. Ad esempio, se applichi un criterio a una cartella,Google Cloud lo applichi a tutti i progetti al suo interno. Per scoprire di più su questo comportamento e su come modificarlo, consulta le Regole di valutazione gerarchica.
Prezzi
I criteri e i vincoli dell'organizzazione sono offerti senza costi.
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à,
installa e poi
inizializza gcloud CLI. Se hai già installato l'interfaccia a riga di comando gcloud, ottieni la versione più recente eseguendo
gcloud components update
.
-
Per ottenere le autorizzazioni necessarie per creare vincoli e applicare i criteri dell'organizzazione, chiedi all'amministratore di concederti il ruolo IAM Amministratore dei criteri dell'organizzazione (
roles/orgpolicy.policyAdmin
) nella tua Google Cloud organizzazione. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire 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 ID organizzazione.
Creare un vincolo personalizzato
Per creare una nuova limitazione personalizzata, devi definirla in un file YAML e poi applicarla alla 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 la limitazione. 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 supportare 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, in formattazione PascalCase. Ad esempio:enablePrivateNodes
.VALUE
: il valore del campo. Per i campi booleani, utilizzatrue
ofalse
. Per i campi di stringa, utilizza"STRING"
.
ACTION
: l'azione da intraprendere se viene soddisfatto il criteriocondition
. Può essereALLOW
oDENY
.DISPLAY_NAME
: un nome facile da ricordare per la limitazione. 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 del criterio. 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 un criterio dell'organizzazione che fa riferimento al vincolo, quindi applicalo.
Crea un file YAML per il criterio dell'organizzazione:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
Sostituisci quanto segue:
RESOURCE_HIERARCHY
: la posizione della nuova norma, che influisce sull'ambito dell'applicazione. Utilizza la Google Cloud gerarchia delle risorse come guida. Ad esempio, se volevi applicare il criterio in un progetto specifico, utilizzaprojects/PROJECT_ID
. Per applicare il criterio in un'organizzazione specifica, utilizzaorganizations/ORGANIZATION_ID
.POLICY_NAME
: il nome della nuova norma.
Applicare il criterio:
gcloud org-policies set-policy PATH_TO_POLICY
Sostituisci
PATH_TO_POLICY
con il percorso del file di definizione del criterio.Verifica che il criterio esista:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Sostituisci quanto segue:
RESOURCE_FLAG
: la Google Cloud risorsa in cui hai applicato il criterio. Ad esempio,project
ofolder
.RESOURCE_ID
: l'ID della risorsa in cui hai applicato le norme. Ad esempio, il tuo Google Cloud ID cartella.
Per un elenco degli argomenti, consulta
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: creare un vincolo personalizzato e applicare una norma
L'esempio seguente crea un vincolo e un criterio personalizzati che richiedono che tutti i nuovi cluster di un progetto specifico siano cluster Autopilot.
Prima di iniziare, devi sapere quanto segue:
- Il tuo 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.
Questo definisce un vincolo in cui per ogni nuovo cluster, se la modalità del cluster non è Autopilot, l'operazione viene rifiutata.
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 il criterio
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 il criterio:
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 per Google Cloud iniziare a applicarlo.
Testa il criterio
Prova a creare un cluster GKE Standard nel progetto:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--zone=COMPUTE_ZONE \
--num-nodes=1
L'output è il seguente:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Esplora vincoli personalizzati di esempio per casi d'uso comuni
I seguenti esempi forniscono la sintassi di alcuni vincoli personalizzati che potresti trovare utili, ad esempio l'applicazione di Workload Identity Federation per GKE ai nuovi cluster. Per utilizzare questi esempi, modificali in base alle tue esigenze specifiche. Poi, applicale alla tua organizzazione seguendo le istruzioni riportate in questa pagina.
Descrizione | Sintassi dei vincoli |
---|---|
Consenti la creazione di cluster solo quando è attiva 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 disattivare l'upgrade automatico dei nodi per i nuovi pool di nodi |
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. |
Abilita Workload Identity Federation for 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 disattivare 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 di pool di nodi standard solo quando gli endpoint dei 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 mappa. Il campo |
Passaggi successivi
- Scopri di più sui vincoli.
- Scopri le opzioni aggiuntive che puoi utilizzare per personalizzare le norme.
- Scopri come impostare i criteri dell'organizzazione in base ai tag.
- Scopri come richiedere l'abilitazione di VM Manager su tutti i nodi GKE.