Google Cloud offre Identity and Access Management (IAM), che ti consente di concedere un accesso più granulare a risorse Google Cloud specifiche e di impedire l'accesso indesiderato ad altre risorse. IAM ti consente di adottare il principio di sicurezza del privilegio minimo, in modo da concedere solo il livello di accesso necessario per le tue risorse.
IAM ti consente di controllare chi (utenti) dispone di un certo tipo di accesso (ruoli) a determinate risorse attraverso l'impostazione dei criteri IAM. I criteri IAM concedono uno o più ruoli specifici a un utente, assegnandogli determinate autorizzazioni.
Questa pagina illustra i ruoli IAM disponibili a livello di risorsa dell'organizzazione e spiega come creare e gestire i criteri IAM per le risorse dell'organizzazione utilizzando l'API Cloud Resource Manager. Per una descrizione dettagliata di IAM, consulta la documentazione di IAM. In particolare, consulta Assegnazione, modifica e revoca dell'accesso.
Autorizzazioni e ruoli
Per controllare l'accesso alle risorse, Google Cloud richiede che gli account che inviano richieste API dispongano dei ruoli IAM appropriati. I ruoli IAM includono le autorizzazioni che consentono agli utenti di eseguire azioni specifiche sulle risorse Google Cloud. Ad esempio, l'autorizzazione resourcemanager.organizations.get
consente a un utente di visualizzare i dettagli della risorsa della sua organizzazione.
Non concedi direttamente le autorizzazioni agli utenti, ma concedi loro ruoli che includono una o più autorizzazioni.
Puoi concedere uno o più ruoli sulla stessa risorsa.
Utilizzo di ruoli predefiniti
La tabella seguente elenca i ruoli che puoi concedere per accedere alle proprietà di una risorsa dell'organizzazione, la descrizione della funzione del ruolo e le autorizzazioni incluse nel ruolo.
Ruolo | Autorizzazioni |
---|---|
Amministratore organizzazione( Accesso per gestire le policy IAM e visualizzare le policy dell'organizzazione per organizzazioni, cartelle e progetti. Risorse di livello più basso in cui puoi concedere questo ruolo:
|
|
Visualizzatore organizzazione( Fornisce l'accesso per visualizzare un'organizzazione. Risorse di livello più basso in cui puoi concedere questo ruolo:
|
|
Organization Policy Administrator( Fornisce l'accesso per definire le restrizioni che un'organizzazione vuole applicare alla configurazione delle risorse cloud impostando i criteri dell'organizzazione. Risorse di livello più basso in cui puoi concedere questo ruolo:
|
|
Browser( Accesso in lettura per l'esplorazione della gerarchia di un progetto, inclusi cartella, organizzazione e criterio di autorizzazione. Il ruolo non include l'autorizzazione per la visualizzazione delle risorse di un progetto. Risorse di livello più basso in cui puoi concedere questo ruolo:
|
|
Creazione di ruoli personalizzati
Oltre ai ruoli predefiniti descritti in questo argomento, puoi anche creare ruoli personalizzati, ovvero raccolte di autorizzazioni che puoi personalizzare in base alle tue esigenze. Quando crei un ruolo personalizzato da utilizzare con Resource Manager, tieni presente quanto segue:- Le autorizzazioni di elenco e di acquisizione, come
resourcemanager.projects.get/list
, devono sempre essere concesse in coppia. - Se il ruolo personalizzato include le autorizzazioni
folders.list
efolders.get
, deve includere ancheprojects.list
eprojects.get
. - Tieni presente che l'autorizzazione
setIamPolicy
per le risorse dell'organizzazione, della cartella e del progetto consente all'utente di concedere tutte le altre autorizzazioni, pertanto deve essere assegnata con attenzione.
Visualizzare l'accesso esistente per una risorsa dell'organizzazione
Puoi visualizzare i ruoli concessi a un utente per una risorsa dell'organizzazione recuperando il criterio IAM a livello di risorsa dell'organizzazione. Puoi visualizzare un criterio
di una risorsa dell'organizzazione utilizzando la console Google Cloud, Google Cloud CLI o il metodo getIamPolicy()
.
Console
Per visualizzare i ruoli concessi a livello di risorsa dell'organizzazione utilizzando la console Google Cloud:
Vai alla pagina Gestisci risorse nella console Google Cloud:
Nell'elenco a discesa Organizzazione, seleziona la risorsa dell'organizzazione.
Seleziona la casella di controllo per la risorsa dell'organizzazione.
Nel riquadro Informazioni a destra, fai clic su Autorizzazioni per espandere un ruolo e visualizzare tutti i membri che lo hanno.
gcloud
Recupera il criterio IAM per la risorsa dell'organizzazione utilizzando il comando get-iam-policy:
gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]
Il comando restituisce il criterio, che sarà simile al seguente:
bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
Il seguente snippet di codice restituisce il criterio per la risorsa dell'organizzazione
https://cloudresourcemanager.googleapis.com/v3/organizations/12345
.
Richiesta:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
Risposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
Il metodo
getIamPolicy()
consente di recuperare un criterio impostato in precedenza.
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)
Concedere l'accesso a una risorsa dell'organizzazione
Gli amministratori dell'organizzazione possono concedere ruoli IAM ai membri del team
in modo che possano accedere alle risorse e alle API di un'organizzazione. Puoi assegnare ruoli a un indirizzo email dell'Account Google, a un gruppo Google, a un account di servizio o a un dominio G Suite. Per concedere i ruoli, puoi utilizzare la console Google Cloud, gcloud CLI o il metodo setIamPolicy()
.
Console
Per impostare controllo dell'accesso a livello di risorsa dell'organizzazione utilizzando la console Google Cloud:
Vai alla pagina Gestisci risorse nella console Google Cloud:
Nell'elenco a discesa Organizzazione, seleziona la risorsa dell'organizzazione.
Seleziona la casella di controllo per la risorsa dell'organizzazione. Se non hai una risorsa Cartella, la risorsa dell'organizzazione non sarà visibile. Per continuare, consulta le istruzioni per concedere i ruoli tramite la pagina IAM.
Se il riquadro Informazioni a destra è nascosto, fai clic su Mostra riquadro informazioni nell'angolo in alto a destra.
Nel riquadro Informazioni, fai clic su Aggiungi membro nella scheda Autorizzazioni.
Nel campo Nuovi membri, inserisci i membri del team che vuoi aggiungere. Puoi designare un indirizzo email dell'Account Google, un gruppo Google, un account di servizio o un dominio G Suite.
Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo da concedere ai membri del team.
Fai clic su Aggiungi.
gcloud
Per impostare il criterio IAM di una risorsa dell'organizzazione utilizzando il comando gcloud
:
Recupera il criterio IAM per la risorsa dell'organizzazione utilizzando il comando
get-iam-policy
e salvalo in un file JSON:gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json > [FILENAME.JSON]
I contenuti del file JSON saranno simili al seguente:
{ "bindings": [ { "members": [ "user:testuser1@gcp-test.com" ], "role": "roles/editor" }, { "members": [ "user:admin@gcp-test.com", ], "role": "roles/resourcemanager.organizationAdmin" }, { "members": [ "user:testuser2@gcp-test.com" ], "role": "roles/resourcemanager.projectCreator" }, ], "etag": "BwU1aRxWk30=" }
Con un editor di testo, apri il file JSON e aggiungi una nuova voce all'array bindings che definisce l'Amministratore organizzazione. Ad esempio, per impostare
anotheradmin@gcp-test.com
come Amministratore organizzazione, modifica l'esempio riportato sopra nel seguente modo:{ "bindings": [ { "members": [ "user:testuser1@gcp-test.com" ], "role": "roles/editor" }, { "members": [ "user:admin@gcp-test.com", "user:anotheradmin@gcp-test.com" ], "role": "roles/resourcemanager.organizationAdmin" }, { "members": [ "user:testuser20@gcp-test.com" ], "role": "roles/resourcemanager.projectCreator" }, ], "etag": "BwU1aRxWk30=" }
Aggiorna il criterio della risorsa dell'organizzazione eseguendo il seguente comando:
gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
API
Richiesta:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
Risposta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
Il metodo setIamPolicy()
ti consente di concedere ruoli agli utenti collegando un criterio IAM alla risorsa dell'organizzazione. Il criterio IAM è una raccolta di istruzioni che definisce chi ha quale accesso.
Lettura, modifica e scrittura: un pattern comune per aggiornare i metadati di una risorsa, come il criterio, è leggere il suo stato corrente, aggiornare i dati localmente e inviare i dati modificati per la scrittura. Questo pattern può comportare un conflitto se due o più processi indipendenti tentano la sequenza contemporaneamente. Ad esempio, supponiamo che un progetto abbia due proprietari e che entrambi stiano tentando di apportare contemporaneamente modifiche in conflitto ai criteri. In alcuni casi, le modifiche apportate da uno dei proprietari del progetto potrebbero non andare a buon fine. IAM risolve questo problema utilizzando una proprietà etag nei criteri IAM. Questa proprietà viene utilizzata per verificare se il dispositivo è cambiato dall'ultima richiesta. Quando invii una richiesta a IAM con un valore etag, IAM confronta il valore etag nella richiesta con il valore etag esistente associato al criterio. Scrive il criterio solo se i valori etag corrispondono.
Quando aggiorni un criterio, ottienilo prima utilizzando getIamPolicy()
,
aggiornalo e poi scrivilo utilizzando setIamPolicy()
.
Utilizza il valore etag per impostare il criterio solo se il criterio corrispondente
in GetPolicyResponse
contiene un valore etag.
Python
Il metodo
setIamPolicy()
ti consente di associare un criterio a una risorsa. Il metodo setIamPolicy
accetta un
SetIamPolicyRequest
, che contiene un criterio da impostare e la risorsa
a cui è associato il criterio. Restituisce il criterio risultante. Ti consigliamo di seguire il pattern di lettura, modifica e scrittura quando aggiorni un criterio utilizzando setIamPolicy()
.
Di seguito è riportato un codice campione per impostare un criterio per una risorsa dell'organizzazione:
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
admin_binding = next(
(binding
for binding in policy['bindings']
if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
None)
# Add an empty Organization Administrator binding if not present.
if not admin_binding:
admin_binding = {
'role': 'roles/resourcemanager.organizationAdmin',
'members': []
}
policy['bindings'].append(admin_binding)
# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'policy': policy
}).execute()
print json.dumps(policy, indent=2)
Limitare la visibilità del progetto per gli utenti
Gli utenti possono vedere tutti i progetti a cui hanno accesso nella console Google Cloud e nelle query di ricerca, indipendentemente dal fatto che si trovino o meno nella risorsa dell'organizzazione attualmente selezionata dall'utente. Puoi utilizzare il servizio di criteri dell'organizzazione per limitare l'insieme di progetti restituiti nelle query e nella console Google Cloud. Questa opzione può essere utilizzata per limitare gli utenti a visualizzare solo i progetti all'interno del tuo dominio.
Il vincolo del criterio dell'organizzazioneconstraints/resourcemanager.accessBoundaries
è un
vincolo di elenco
che viene applicato alla risorsa dell'organizzazione. Il vincolo accetta un elenco di ID risorsa dell'organizzazione, che definiscono l'insieme di risorse dell'organizzazione che rendono le proprie risorse visibili agli utenti in una query o nella console Google Cloud.
I progetti vengono visualizzati in No organization
se l'utente non dispone dell'autorizzazione resourcemanager.organizations.get
per la risorsa dell'organizzazione principale del progetto. Ciò può far sembrare che un progetto che non fa parte della risorsa della tua organizzazione non sia associato a nessuna risorsa dell'organizzazione. Se utilizzi il vincolo resourcemanager.accessBoundaries
per non consentire una risorsa dell'organizzazione, i progetti che appartengono a quella risorsa non verranno visualizzati nelle query o nella console Google Cloud. Se questo vincolo viene applicato, non sarà visibile alcun progetto di cui non è ancora stata eseguita la migrazione a una risorsa dell'organizzazione.
Ti consigliamo di eseguire la migrazione dei progetti di dimensioni inferiori a No organization
nella risorsa della tua organizzazione prima di applicare questo vincolo. Per informazioni sulla migrazione dei progetti in una risorsa dell'organizzazione, consulta Spostare un progetto.
Per informazioni su come impostare un criterio dell'organizzazione, consulta Utilizzare i vincoli.
Test delle autorizzazioni
Puoi testare le autorizzazioni IAM di un utente per una risorsa dell'organizzazione con il metodo testIamPermissions()
. Questo metodo prende l'URL della risorsa e l'insieme di autorizzazioni che vuoi verificare come parametri di input e restituisce il sottoinsieme di queste autorizzazioni a cui l'utente ha accesso.
In genere, non esegui testIamPermission()
se utilizzi direttamente la console Google Cloud per gestire le autorizzazioni. testIamPermissions()
è pensato per l'integrazione con il tuo software proprietario, ad esempio un'interfaccia utente grafica personalizzata. Ad esempio, la console Google Cloud utilizza
testIamPermissions()
internamente per determinare quale UI deve essere disponibile per
l'utente che ha eseguito l'accesso.
API
Puoi utilizzare il metodo
testIamPermissions()
per controllare quali delle autorizzazioni specificate sono disponibili per il chiamante per la risorsa specificata. Questo metodo accetta come parametri un nome della risorsa e un insieme di autorizzazioni e restituisce il sottoinsieme di autorizzazioni di cui dispone l'utente chiamante.
Di seguito è riportato un codice campione per testare le autorizzazioni per una risorsa dell'organizzazione:
Request:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions
{
"permissions": [
"resourcemanager.organizations.get",
"resourcemanager.organizations.setIamPolicy"
]
}
Response:
{
"permissions": [
"resourcemanager.organizations.get"
]
}
Python
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
response = crm.organizations().testIamPermissions(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'permissions': [
'resourcemanager.organizations.setIamPolicy',
'resourcemanager.projects.patch'
]
}).execute()
print json.dumps(response, indent=2)