Controllo dell'accesso alle risorse dell'organizzazione con IAM

Google Cloud offre Identity and Access Management (IAM), che consente di offrire l'accesso granulare a specifiche risorse Google Cloud e impedisce ad altre risorse. IAM ti consente di adottare il livello di sicurezza principio del minimo privilegiato, quindi puoi concedere solo l'accesso necessario alle 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 ruoli specifici a un utente che concedegli alcune autorizzazioni.

Questa pagina illustra i ruoli IAM che sono disponibili a livello delle risorse dell'organizzazione e come creare e gestire Criteri IAM per le risorse dell'organizzazione che utilizzano l'API Cloud Resource Manager. Per una descrizione dettagliata di IAM, leggi le documentazione IAM. In particolare, consulta Concessione, modifica e revoca dell'accesso.

Autorizzazioni e ruoli

Per controllare l'accesso alle risorse, Google Cloud richiede che gli account che creano API alle richieste dispongono di ruoli IAM appropriati. Ruoli IAM includi le autorizzazioni che consentono agli utenti di eseguire azioni specifiche dell'accesso a specifiche risorse Google Cloud. Ad esempio, L'autorizzazione resourcemanager.organizations.get consente a un utente di ottenere dettagli sulle risorse della loro organizzazione.

Non concedi direttamente le autorizzazioni agli utenti, concediamo loro roles, che hanno una o più autorizzazioni raggruppate al loro interno.

Puoi concedere uno o più ruoli sulla stessa risorsa.

Utilizzo dei ruoli predefiniti

Nella tabella seguente sono elencati i ruoli che puoi concedere per accedere a un le proprietà della risorsa dell'organizzazione, la descrizione di autorizzazioni raggruppate all'interno del ruolo.

Ruolo Autorizzazioni

(roles/resourcemanager.organizationAdmin)

Accesso per gestire i criteri IAM e visualizzare i criteri dell'organizzazione per organizzazioni, cartelle e progetti.

Risorse di livello più basso a cui puoi concedere questo ruolo:

  • Progetto

essentialcontacts.*

  • essentialcontacts.contacts.create
  • essentialcontacts.contacts.delete
  • essentialcontacts.contacts.get
  • essentialcontacts.contacts.list
  • essentialcontacts.contacts.send
  • essentialcontacts.contacts.update

iam.policybindings.*

  • iam.policybindings.get
  • iam.policybindings.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.createPolicyBinding

resourcemanager.folders.deletePolicyBinding

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.searchPolicyBindings

resourcemanager.folders.setIamPolicy

resourcemanager.folders.updatePolicyBinding

resourcemanager.organizations.*

  • resourcemanager.organizations.createPolicyBinding
  • resourcemanager.organizations.deletePolicyBinding
  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.searchPolicyBindings
  • resourcemanager.organizations.setIamPolicy
  • resourcemanager.organizations.updatePolicyBinding

resourcemanager.projects.createPolicyBinding

resourcemanager.projects.deletePolicyBinding

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.searchPolicyBindings

resourcemanager.projects.setIamPolicy

resourcemanager.projects.updatePolicyBinding

(roles/resourcemanager.organizationViewer)

Fornisce l'accesso per visualizzare un'organizzazione.

Risorse di livello più basso a cui puoi concedere questo ruolo:

  • Organizzazione

resourcemanager.organizations.get

(roles/orgpolicy.policyAdmin)

Fornisce l'accesso per definire le restrizioni che un'organizzazione vuole applicare sulla configurazione delle risorse cloud impostando i criteri dell'organizzazione.

Risorse di livello più basso a cui puoi concedere questo ruolo:

  • Organizzazione

orgpolicy.*

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

policysimulator.orgPolicyViolations.list

policysimulator.orgPolicyViolationsPreviews.*

  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.list

(roles/browser)

Accesso in lettura per l'esplorazione della gerarchia di un progetto, incluse la cartella, l'organizzazione e . Il ruolo non include l'autorizzazione per la visualizzazione delle risorse di un progetto.

Risorse di livello più basso a cui puoi concedere questo ruolo:

  • Progetto

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.organizations.get

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

Creazione di ruoli personalizzati

Oltre ai ruoli predefiniti descritti in questo argomento, puoi anche creare ruoli personalizzati, ovvero raccolte di autorizzazioni personalizzate in base alle tue esigenze. Quando crei un ruolo personalizzato da utilizzare con Resource Manager, tieni presente i seguenti punti:
  • Elenca e ottieni le autorizzazioni, ad esempio resourcemanager.projects.get/list, devono sempre essere concesse in coppia.
  • Quando il tuo ruolo personalizzato include folders.list e folders.get autorizzazioni, dovrebbe includere anche projects.list e projects.get.
  • Tieni presente che l'autorizzazione setIamPolicy per organizzazione, cartella risorse di progetto permettono all'utente di concedere tutte le altre autorizzazioni, per cui devono essere assegnate con attenzione.

Visualizzazione dell'accesso esistente per una risorsa dell'organizzazione

Puoi visualizzare i ruoli a cui viene concesso un utente per una risorsa dell'organizzazione per ottenere il criterio IAM a livello di risorsa dell'organizzazione. Puoi visualizzare un criterio di una risorsa dell'organizzazione utilizzando la console Google Cloud, o getIamPolicy() .

Console

Per visualizzare i ruoli concessi a livello di risorsa dell'organizzazione utilizzando la console Google Cloud:

  1. Vai alla pagina Gestisci risorse nella console Google Cloud:

    Apri la scheda Gestisci risorse

  2. Nell'elenco a discesa Organizzazione, seleziona la risorsa dell'organizzazione.

  3. Seleziona la casella di controllo per la risorsa dell'organizzazione.

  4. Nel riquadro informazioni a destra, in Autorizzazioni, fai clic per espandere un ruolo e verranno visualizzati tutti i membri a cui è assegnato.

gcloud

Ottieni il criterio IAM per la risorsa dell'organizzazione utilizzando 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 ottenere 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)

Concessione dell'accesso a una risorsa dell'organizzazione

Gli amministratori dell'organizzazione possono concedere ruoli IAM ai membri del team per poter accedere alle risorse e alle API di un'organizzazione. Puoi concedere ruoli all'indirizzo email di un Account Google, a un gruppo Google, a un account di servizio o a un account G Suite dominio. Puoi utilizzare la console Google Cloud, gcloud CLI il setIamPolicy() per concedere i ruoli.

Console

Per impostare il controllo dell'accesso a livello di risorsa dell'organizzazione utilizzando la console Google Cloud:

  1. Vai alla pagina Gestisci risorse nella console Google Cloud:

    Apri la scheda Gestisci risorse

  2. Nell'elenco a discesa Organizzazione, seleziona la risorsa dell'organizzazione.

  3. Seleziona la casella di controllo per la risorsa dell'organizzazione. Se non disponi di un Risorsa cartella, la risorsa organizzazione non sarà visibile. A per continuare, consulta le istruzioni per concedere i ruoli tramite IAM .

  4. Se il riquadro Informazioni a destra è nascosto, fai clic su Mostra informazioni. riquadro nell'angolo in alto a destra.

  5. Nel riquadro Informazioni, nella scheda Autorizzazioni, fai clic su Aggiungi membro.

  6. Nel campo Nuovi membri, inserisci i membri del team che vuoi aggiungere. Puoi specificare l'indirizzo email di un Account Google, un gruppo Google, un servizio o un dominio G Suite.

  7. Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo che vuoi concedere ai membri del team.

  8. Fai clic su Aggiungi.

gcloud

Per impostare il criterio IAM di una risorsa dell'organizzazione utilizzando il comando gcloud:

  1. Ottieni il criterio IAM per la risorsa dell'organizzazione utilizzando il comando get-iam-policy e restituire il criterio in un file JSON:

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. I contenuti del file JSON saranno simili ai seguenti:

    {
        "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="
    }
    
  3. In un editor di testo, apri il file JSON e aggiungi una nuova voce alla di associazioni che definisce Amministratore organizzazione. Ad esempio, per rendere anotheradmin@gcp-test.com un Amministratore organizzazione, cambieresti il mostrato sopra:

    {
        "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="
    }
    
  4. Aggiorna il criterio della risorsa dell'organizzazione eseguendo questo 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 allegando un criterio IAM alla risorsa organizzazione. IAM è una raccolta di istruzioni che definiscono chi ha un determinato accesso.

Read-Modify-Write: un pattern comune per l'aggiornamento dei metadati di una risorsa. ad esempio nel leggere lo stato attuale, aggiornare i dati localmente, e inviare i dati modificati per la scrittura. Questo pattern può determinare conflitto se due o più processi indipendenti tentano di eseguire la sequenza contemporaneamente. Ad esempio, supponiamo che ci siano due proprietari per un progetto ed entrambi stanno tentando di apportare modifiche in conflitto al criterio nel tempo. Le modifiche apportate da uno dei proprietari del progetto potrebbero non riuscire in alcuni d'uso diversi. IAM risolve questo problema utilizzando una proprietà etag in i criteri IAM. Questa proprietà viene utilizzata per verificare se è 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 . Scrive il criterio solo se i valori dell'etag corrispondono.

Quando aggiorni un criterio, devi prima riceverlo utilizzando getIamPolicy(), aggiorna il criterio, quindi scrivi il criterio aggiornato utilizzando setIamPolicy(). Utilizza il valore etag quando imposti il criterio solo se il criterio corrispondente in GetPolicyResponse contiene un valore etag.

Python

La setIamPolicy() consente di collegare un criterio a una risorsa. Il metodo setIamPolicy richiede un SetIamPolicyRequest, che contiene un criterio da impostare e la risorsa da a cui il criterio è allegato. Restituisce il criterio risultante. Consigliato seguire le istruzioni di lettura, modifica e scrittura durante l'aggiornamento di un criterio utilizzando setIamPolicy().

Ecco un esempio di codice 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)

Limitazione della visibilità del progetto per gli utenti

Gli utenti possono visualizzare 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 selezionata. Puoi utilizzare il servizio Criteri dell'organizzazione per limitare il di progetti che vengono restituiti nelle query e nella console Google Cloud. Questa opzione può essere utilizzata per limitare gli utenti alla visualizzazione solo dei progetti all'interno del tuo dominio.

Il vincolo dei criteri dell'organizzazione constraints/resourcemanager.accessBoundaries è un vincolo di elenco applicato in modo forzato alla risorsa dell'organizzazione. Il vincolo accetta un elenco ID risorsa organizzazione, che definiscono l'insieme di risorse organizzazione che rendere visibili le proprie risorse agli utenti in una query o nella console Google Cloud.

I progetti vengono visualizzati in No organization se l'utente non dispone della Autorizzazione resourcemanager.organizations.get per l'organizzazione principale risorsa del progetto. Questo può far sembrare un progetto che non fa parte della risorsa dell'organizzazione non è associata a una risorsa dell'organizzazione in tutti. Se utilizzi il vincolo resourcemanager.accessBoundaries per non consentire una risorsa organizzazione, i progetti che appartengono a quella risorsa non vengono visualizzati affatto nelle query o nella console Google Cloud. Qualsiasi progetto che non è ancora stata eseguita la migrazione a una risorsa organizzazione non saranno visibili se viene applicato questo vincolo.

Ti consigliamo di eseguire la migrazione dei progetti inferiori a No organization nel tuo dell'organizzazione prima di applicare questo vincolo. Per informazioni su migrazione dei progetti in una risorsa dell'organizzazione, consulta Spostamento di un progetto.

Per informazioni sull'impostazione di un criterio dell'organizzazione, consulta Utilizzo dei vincoli.

Test delle autorizzazioni

Puoi testare le autorizzazioni IAM su un utente per un'organizzazione risorsa con testIamPermissions() . Questo metodo richiede l'URL della risorsa e l'insieme di autorizzazioni da testare come parametri di input e restituisce il sottoinsieme di queste autorizzazioni che a cui l'utente ha accesso.

In genere non richiami testIamPermission() se utilizzi console Google Cloud direttamente per gestire le autorizzazioni. testIamPermissions() è destinata all'integrazione con il software di proprietà dell'utente, come una Graphic User Interface. Ad esempio, la console Google Cloud utilizza testIamPermissions() internamente per determinare quale UI dovrebbe essere disponibile dell'utente che ha eseguito l'accesso.

API

Puoi utilizzare lo testIamPermissions() per controllare quali delle autorizzazioni concesse ha il chiamante l'oggetto risorsa. Questo metodo richiede un nome risorsa e un insieme di autorizzazioni e restituisce il sottoinsieme di autorizzazioni di cui dispone il chiamante.

Ecco alcuni 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)