I criteri dell'organizzazione di Google Cloud offrono un sistema centralizzato e programmatico un controllo completo sulle risorse dell'organizzazione. Come amministratore dei criteri dell'organizzazione, puoi definire un criterio dell'organizzazione, un insieme di restrizioni denominate vincoli che si applicano le risorse Google Cloud e i discendenti di queste risorse nel Gerarchia delle risorse di Google Cloud. Puoi applicare i criteri dell'organizzazione all'indirizzo a livello di organizzazione, cartella o progetto.
I criteri dell'organizzazione forniscono vincoli predefiniti per vari servizi Google Cloud. Tuttavia, se vuoi un controllo più granulare e personalizzabile sui campi specifici limitati nelle norme dell'organizzazione, puoi anche creare norme dell'organizzazione personalizzate.
Vantaggi
Puoi utilizzare criteri dell'organizzazione personalizzati che fanno riferimento a IAM per controllare in che modo i criteri di autorizzazione possono essere modificati. In particolare, puoi controllare:
- A chi è possibile concedere ruoli
- A chi è possibile revocare i ruoli
- Quali ruoli possono essere concessi
- Quali ruoli possono essere revocati
Ad esempio, puoi impedire che i ruoli che contengono la parola admin
concesso alle entità i cui indirizzi email terminano con @gmail.com
.
Ereditarietà dei criteri
Per impostazione predefinita, i criteri dell'organizzazione vengono ereditati dai discendenti delle risorse su cui applichi il criterio. Ad esempio, se applichi un criterio su una cartella, Google Cloud applica i criteri a tutti i progetti . Per scoprire di più su questo comportamento e su come modificarlo, consulta Regole di valutazione della gerarchia.
Prezzi
Il servizio Criteri dell'organizzazione, inclusi i criteri predefiniti e personalizzati, è offerto senza costi aggiuntivi.
Limitazioni
Criteri dell'organizzazione personalizzati in modalità dry run che fanno riferimento
Gli attributi IAM hanno alcune limitazioni. ovvero gli audit log
violazioni che riguardano il metodo setiamPolicy
potrebbero mancare i seguenti elementi
campi:
resourceName
serviceName
methodName
Prima di iniziare
- Assicurati di conoscere la tua organizzazione ID.
-
Se vuoi testare i criteri dell'organizzazione personalizzati che fanno riferimento risorse IAM, creare un nuovo progetto. Test i criteri dell'organizzazione di un progetto esistente potrebbero interrompere la sicurezza per i flussi di lavoro.
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per gestire i criteri dell'organizzazione, chiedi all'amministratore di concederti seguenti ruoli IAM:
-
Amministratore criteri dell'organizzazione (
roles/orgpolicy.policyAdmin
) dell'organizzazione -
Modifica il criterio IAM del progetto:
Amministratore IAM progetto (
roles/resourcemanager.projectIamAdmin
) del progetto
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti le autorizzazioni necessarie per gestire i criteri dell'organizzazione. Per vedere le autorizzazioni esatte obbligatorie, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per gestire i criteri dell'organizzazione sono necessarie le seguenti autorizzazioni:
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
-
resourcemanager.projects.setIamPolicy
Potresti anche riuscire a ottenere queste autorizzazioni con ruoli personalizzati e altri ruoli predefiniti.
Crea un vincolo personalizzato
Un vincolo personalizzato viene definito in un file YAML dalle risorse, dai metodi le condizioni e le azioni supportate dal servizio per applicare il criterio dell'organizzazione. Le condizioni per i vincoli personalizzati definiti utilizzando CEL (Common Expression Language). Per ulteriori informazioni su come creare condizioni nei vincoli personalizzati utilizzando CEL, consulta la sezione Creazione e gestione di vincoli personalizzati.
Per creare un file YAML per un vincolo personalizzato:
name: organizations/ORG_ID/customConstraints/CONSTRAINT_NAME
resourceTypes: iam.googleapis.com/AllowPolicy
methodTypes:
METHOD_TYPE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Sostituisci quanto segue:
ORG_ID
: l'ID organizzazione, ad esempio123456789
.CONSTRAINT_NAME
: il nome che vuoi per la tua nuova personalizzazione di blocco. Un vincolo personalizzato deve iniziare concustom.
e può solo includere lettere maiuscole, lettere minuscole o numeri, ad esempiocustom.denyProjectIAMAdmin
. La lunghezza massima di questo campo è di 70 caratteri, senza contare il prefisso, ad esempioorganizations/123456789/customConstraints/custom
.METHOD_TYPE
: il tipo di azione a cui vuoi applicare vincolo a cui applicare. Se vuoi che il vincolo venga applicato quando qualcuno tenta di concedere un ruolo a un'entità, utilizza i seguenti valori:- CREATE - UPDATE
Se vuoi che il vincolo venga applicato quando qualcuno tenta di revocare utilizza il seguente valore:
- REMOVE_GRANT
CONDITION
: una condizione CEL scritta rispetto a una rappresentazione di una risorsa di servizio supportata. Questo campo ha un valore la lunghezza massima di 1000 caratteri. Vedi i contenuti supportati attributi per ulteriori informazioni sugli attributi disponibili per la scrittura delle condizioni. Ad esempio:resource.bindings.exists(binding, RoleNameMatches(role, ['roles/resourcemanager.projectIamAdmin']))
.ACTION
: l'azione da eseguire secondition
è sono soddisfatte determinate condizioni. Può essereALLOW
oDENY
.DISPLAY_NAME
: un nome semplice per di blocco. Questo campo ha una lunghezza massima di 200 caratteri.DESCRIPTION
: facoltativo. Una descrizione semplice per il vincolo venga visualizzato come messaggio di errore quando il criterio viene violato. Questo campo ha una lunghezza massima di 2000 caratteri.
Per saperne di più su come creare un vincolo personalizzato, consulta Definizione di vincoli personalizzati.
Configurare un vincolo personalizzato
Dopo aver creato un nuovo vincolo personalizzato utilizzando Google Cloud CLI, devi configurarlo per disponibile per i criteri dell'organizzazione nella tua organizzazione. Per configurare un vincolo personalizzato, utilizza il comandogcloud org-policies set-custom-constraint
:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH
con il percorso completo del tuo
personalizzato. Ad esempio: /home/user/customconstraint.yaml
.
Al termine, troverai i vincoli personalizzati come criteri dell'organizzazione disponibili
nel tuo elenco di criteri dell'organizzazione
di Google Cloud.
Per verificare che la limitazione personalizzata esista, utilizza il comando gcloud org-policies list-custom-constraints
:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID
con l'ID della risorsa dell'organizzazione.
Per ulteriori informazioni, consulta
Visualizzare i criteri dell'organizzazione.
Applica un criterio dell'organizzazione personalizzato
Puoi applicare un vincolo booleano creando un criterio dell'organizzazione che vi faccia riferimento. e applicando il criterio dell'organizzazione a una risorsa Google Cloud.Console
Per applicare un vincolo booleano:
- Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.
- Seleziona il selettore di progetti nella parte superiore della pagina.
- Dal selettore di progetti, scegli il progetto per il quale vuoi impostare criterio dell'organizzazione.
- Seleziona il vincolo dall'elenco nella pagina Criteri dell'organizzazione. Dovrebbe essere visualizzata la pagina Dettagli criterio per il vincolo in questione.
- Per configurare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
- Nella pagina Modifica criterio, seleziona Sostituisci criterio della risorsa padre.
- Fai clic su Aggiungi una regola.
- In Applicazione, scegli se applicare questo criterio dell'organizzazione deve essere attivato o disattivato.
- Se vuoi, per applicare le condizioni del criterio dell'organizzazione a un tag, fai clic su Aggiungi condizione. Tieni presente che se aggiungi una regola condizionale a un'organizzazione devi aggiungere almeno una regola incondizionata. In caso contrario, la norma non potrà essere salvata. Per maggiori dettagli, consulta Impostazione di un criterio dell'organizzazione con tag.
- Se si tratta di un vincolo personalizzato, puoi fare clic su Testa modifiche per simulare l'effetto di questo criterio dell'organizzazione. Per ulteriori informazioni, consulta Testare le modifiche ai criteri dell'organizzazione con Policy Simulator.
- Per completare e applicare il criterio dell'organizzazione, fai clic su Imposta criterio. Le norme potrebbero essere necessari fino a 15 minuti.
gcloud
Per creare un criterio dell'organizzazione che applichi un vincolo booleano, crea un file YAML del criterio che faccia riferimento al vincolo:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
Sostituisci quanto segue:
-
PROJECT_ID
: il progetto su cui vuoi applicare in modo forzato i tuoi di blocco. -
CONSTRAINT_NAME
: il nome definito per il vincolo personalizzato. Per ad esempiocustom.denyProjectIAMAdmin
.
Per applicare il criterio dell'organizzazione contenente il vincolo, esegui questo comando:
gcloud org-policies set-policy POLICY_PATH
Sostituisci POLICY_PATH
con il percorso completo del criterio dell'organizzazione
YAML. L'applicazione del criterio richiederà fino a 15 minuti.
Testa il criterio dell'organizzazione personalizzato
Se vuoi, puoi testare il criterio dell'organizzazione impostandolo e poi di eseguire un'azione che il criterio dovrebbe impedire.
Questa sezione descrive come testare il seguente vincolo del criterio dell'organizzazione:
name: organizations/ORG_ID/customConstraints/custom.denyProjectIAMAdmin
resourceTypes: iam.googleapis.com/AllowPolicy
methodTypes:
- CREATE
- UPDATE
condition:
"resource.bindings.exists(
binding,
RoleNameMatches(binding.role, ['roles/resourcemanager.projectIamAdmin']) &&
binding.members.exists(member,
MemberSubjectMatches(member, ['user:EMAIL_ADDRESS'])
)
)"
actionType: DENY
displayName: Do not allow EMAIL_ADDRESS to be granted the Project IAM Admin role.
Se vuoi testare questo vincolo personalizzato:
Copia il vincolo in un file YAML e sostituisci i seguenti valori:
ORG_ID
: l'ID numerico del tuo dell'organizzazione Google Cloud.MEMBER_EMAIL_ADDRESS
: l'indirizzo email del principale che vuoi utilizzare per testare il vincolo personalizzato. Mentre il vincolo è attivo, a questa entità non sarà possibile concedere il ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin
) nel progetto per cui viene applicato il vincolo.
Configura il vincolo personalizzato applicarla per il progetto che hai creato per testare il vincolo del criterio dell'organizzazione personalizzato.
Prova a concedere il ruolo Amministratore IAM progetto (
roles/resourcemanager.projectIamAdmin
) all'entità di cui l'indirizzo email incluso nel vincolo personalizzato. Prima di eseguire il comando, sostituisci i seguenti valori:PROJECT_ID
: l'ID di Google Cloud progetto in cui hai applicato il vincoloEMAIL_ADDRESS
: l'indirizzo email dell'entità specificato al momento della creazione del vincolo del criterio dell'organizzazione.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL_ADDRESS --role=roles/resourcemanager.projectIamAdmin
L'output è il seguente:
Operation denied by custom org policies: ["customConstraints/custom.denyProjectIAMAdmin": "EMAIL_ADDRESS can't be granted the Project IAM Admin role."]
Attributi supportati da Identity and Access Management
IAM supporta l'attributo resources.bindings
. Questo attributo
che viene restituito per tutti i metodi che modificano il criterio di autorizzazione di una risorsa. Tutte queste risposte
terminano con setIamPolicy
.
L'attributo resource.bindings
ha la seguente struttura, in cui
BINDINGS
è un array di associazioni di ruoli che sono state modificate
durante una modifica a un criterio di autorizzazione:
{
"bindings": {
BINDINGS
}
}
Ogni associazione in resource.bindings
ha la seguente struttura, in cui
ROLE
è il nome del ruolo nell'associazione del ruolo e
MEMBERS
è un elenco di identificatori per le entità che
sono stati aggiunti o rimossi dall'associazione dei ruoli:
{
"role": "ROLE"
"members": {
MEMBERS
}
}
Per conoscere i formati che possono avere gli identificatori principali, consulta Identificatori principali.
Puoi valutare l'attributo resource.bindings
e i suoi campi solo utilizzando il metodo
funzioni supportate. Altri operatori e
come ==
, !=
, in
, contains
, startsWith
e
endsWith
: non sono supportati.
Funzioni supportate
Puoi utilizzare le seguenti funzioni CEL per valutare i campi role
e members
delle risorse binding
. Quando utilizzi queste funzioni, puoi anche utilizzare
operatori logici &&
(and
) e ||
(or
) per scrivere condizioni multiparte.
Funzione | Descrizione |
---|---|
RoleNameMatches(
bool
|
Restituisce
|
RoleNameStartsWith(
bool
|
Restituisce
|
RoleNameEndsWith(
bool
|
Restituisce
|
RoleNameContains(
bool
|
Restituisce
|
MemberSubjectMatches(
bool
|
Restituisce
Se l'identificatore di
|
MemberSubjectEndsWith(
bool
|
Restituisce
Se l'identificatore di
|
Esempi di criteri dell'organizzazione personalizzati per i casi d'uso comuni
La tabella seguente fornisce la sintassi di alcuni criteri dell'organizzazione personalizzati che potresti trovare utili.
Nei seguenti esempi vengono utilizzate le macro CEL all
e exists
. Per ulteriori informazioni
informazioni su queste macro, consulta
Macro.
Descrizione | Sintassi del vincolo |
---|---|
Bloccare la possibilità di concedere un ruolo specifico. |
name: organizations/ORG_ID/customConstraints/custom.denyRole resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameMatches(binding.role, ['ROLE']) )" actionType: DENY displayName: Do not allow the ROLE role to be granted |
Consenti solo la concessione di ruoli specifici. |
name: organizations/ORG_ID/customConstraints/custom.specificRolesOnly resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, RoleNameMatches(binding.role, ['ROLE_1', 'ROLE_2']) )" actionType: ALLOW displayName: Only allow the ROLE_1 role and ROLE_2 role to be granted |
Impedisci che i ruoli che iniziano con roles/storage.
concesso.
|
name: organizations/ORG_ID/customConstraints/custom.dontgrantStorageRoles resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameStartsWith(binding.role, ['roles/storage.']) )" actionType: DENY displayName: Prevent roles that start with "roles/storage." from being granted |
Impedisci l'esecuzione di qualsiasi ruolo il cui nome contiene admin
revocata.
|
name: organizations/ORG_ID/customConstraints/custom.dontRevokeAdminRoles resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - REMOVE_GRANT condition: "resource.bindings.exists( binding, RoleNameContains(binding.role, ['admin']) )" actionType: DENY displayName: Prevent roles with "admin" in their names from being revoked |
Consenti di assegnare ruoli solo a entità specifiche. |
name: organizations/ORG_ID/customConstraints/custom.allowSpecificPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, binding.members.all(member, MemberSubjectMatches(member, ['user:USER','serviceAccount:SERVICE_ACCOUNT']) ) )" actionType: ALLOW displayName: Only allow roles to be granted to USER and SERVICE_ACCOUNT |
Impedisci che i ruoli vengano revocati da entità specifiche. |
name: organizations/ORG_ID/customConstraints/custom.denyRemovalOfSpecificPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - REMOVE_GRANT condition: "resource.bindings.exists( binding, binding.members.exists(member, MemberSubjectMatches(member, ['user:USER_1','user:USER_2']) ) )" actionType: DENY displayName: Do not allow roles to be revoked from USER_1 or USER_2 |
Impedisci le entità con indirizzi email che terminano con
@gmail.com dalla concessione dei ruoli.
|
name: organizations/ORG_ID/customConstraints/custom.dontGrantToGmail resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, binding.members.exists(member, MemberSubjectEndsWith(member, ['@gmail.com']) ) )" actionType: DENY displayName: Do not allow members whose email addresses end with "@gmail.com" to be granted roles |
Consenti solo la concessione di ruoli specifici e solo a entità specifiche. |
name: organizations/ORG_ID/customConstraints/custom.allowSpecificRolesAndPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, RoleNameMatches(binding.role, ['ROLE_1', 'ROLE_2']) && binding.members.all(member, MemberSubjectMatches(member, ['serviceAccount:SERVICE_ACCOUNT', 'group:GROUP']) ) )" actionType: ALLOW displayName: Only allow ROLE_1 and ROLE_2 to be granted to SERVICE_ACCOUNT and GROUP |
Impedisci che vengano concessi ruoli Cloud Storage a
allUsers e allAuthenticatedUsers .
|
name: organizations/ORG_ID/customConstraints/custom.denyStorageRolesForPrincipalAllUsers methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameStartsWith(binding.role, ['roles/storage.']) && binding.members.exists(member, MemberSubjectMatches(member, ['allUsers', 'allAuthenticatedUsers']) ) )" actionType: DENY displayName: Do not allow storage roles to be granted to allUsers or allAuthenticatedUsers |
Passaggi successivi
- Per saperne di più sui criteri dell'organizzazione, consulta la Introduzione al servizio Criteri dell'organizzazione.
- Scopri di più su come creare e gestire i criteri dell'organizzazione.
- Consulta l'elenco completo dei vincoli dei criteri dell'organizzazione predefiniti.