Controllo dell'accesso per le risorse dell'organizzazione con IAM

Trusted Cloud by S3NS offre Identity and Access Management (IAM), che consente di concedere un accesso più granulare a risorse Trusted Cloud specifiche e impedisce 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 consente di controllare chi (utenti) ha quale accesso (ruoli) a quali risorse impostando le policy di autorizzazione. Le policy di autorizzazione concedono ruoli specifici a un utente, conferendogli determinate autorizzazioni.

Questa pagina descrive i ruoli IAM disponibili nella risorsa organizzazione e come creare e gestire le policy di autorizzazione per le risorse organizzazione utilizzando l'API Cloud Resource Manager. Per saperne di più, consulta la pagina Gestire l'accesso a progetti, cartelle e organizzazioni.

Autorizzazioni e ruoli

Per controllare l'accesso alle risorse, Trusted Cloud by S3NS è necessario che gli account che effettuano richieste API dispongano dei ruoli IAM appropriati. I ruoli IAM includono autorizzazioni che consentono agli utenti di eseguire azioni specifiche sulle risorseTrusted Cloud . Ad esempio, l'autorizzazione resourcemanager.organizations.get consente a un utente di ottenere dettagli sulla risorsa della propria organizzazione.

Non concedi direttamente le autorizzazioni agli utenti, ma assegni loro ruoli, che includono una o più autorizzazioni.

Puoi concedere uno o più ruoli sulla stessa risorsa.

Utilizzare i 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 in quel ruolo.

Ruolo Autorizzazioni

(roles/resourcemanager.organizationAdmin)

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:

  • 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.capabilities.*

  • resourcemanager.capabilities.get
  • resourcemanager.capabilities.update

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 in cui puoi concedere questo ruolo:

  • Organizzazione

resourcemanager.organizations.get

(roles/orgpolicy.policyAdmin)

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

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

  • Organizzazione

cloudasset.assets.analyzeOrgPolicy

cloudasset.assets.exportResource

cloudasset.assets.listResource

cloudasset.assets.searchAllResources

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

recommender.orgPolicyInsights.*

  • recommender.orgPolicyInsights.get
  • recommender.orgPolicyInsights.list
  • recommender.orgPolicyInsights.update

recommender.orgPolicyRecommendations.*

  • recommender.orgPolicyRecommendations.get
  • recommender.orgPolicyRecommendations.list
  • recommender.orgPolicyRecommendations.update

(roles/browser)

Accesso in lettura per l'esplorazione della gerarchia di un progetto, inclusi cartella, organizzazione e policy 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:

  • 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 che puoi adattare alle tue esigenze. Quando crei un ruolo personalizzato da utilizzare con Resource Manager, tieni presente quanto segue:
  • Elenca e ottieni autorizzazioni, ad esempio resourcemanager.projects.get/list, devono sempre essere concesse in coppia.
  • Se il tuo ruolo personalizzato include le autorizzazioni folders.list e folders.get, deve includere anche projects.list e projects.get.
  • Tieni presente che l'autorizzazione setIamPolicy per le risorse di organizzazione, cartella e 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 di autorizzazione della risorsa. Puoi visualizzare la policy di autorizzazione per una risorsa organizzazione utilizzando la console Trusted Cloud , Google Cloud CLI o il metodo getIamPolicy().

Console

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

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

    Apri la pagina 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, fai clic per espandere un ruolo e visualizzare tutti i membri che lo hanno nella sezione Autorizzazioni.

gcloud

Recupera la policy di autorizzazione 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 di autorizzazione, 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 la policy di autorizzazione per la risorsa 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.s3ns-system.iam.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
}

Python

Il metodo getIamPolicy() consente di ottenere un criterio di autorizzazione 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 in modo che possano accedere alle risorse e alle API di un'organizzazione. Puoi concedere ruoli a un'email di un account utente, a un gruppo Google, a un account di servizio o a un dominio G Suite. Puoi utilizzare la console Trusted Cloud , gcloud CLI o il metodo setIamPolicy() per concedere i ruoli.

Console

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

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

    Apri la pagina 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 hai una risorsa Cartella, la risorsa Organizzazione non sarà visibile. Per continuare, consulta le istruzioni per la concessione dei ruoli tramite la pagina IAM.

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

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

  6. Nel campo Nuovi membri, inserisci i membri del team che vuoi aggiungere. Puoi designare un'email dell'account utente, un gruppo Google, un service account 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 la policy di autorizzazione di una risorsa dell'organizzazione utilizzando il comando gcloud:

  1. Ottieni la policy di autorizzazione per la risorsa dell'organizzazione utilizzando il comando get-iam-policy e restituisci la policy a un file JSON:

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. I contenuti del file JSON saranno simili a quelli riportati di seguito:

{
    "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="
}
  1. Con un editor di testo, apri il file JSON e aggiungi una nuova voce all'array bindings che definisce l&#39Amministratore organizzazionee. Ad esempio, per rendere anotheradmin@gcp-test.com un Amministratore organizzazione, devi modificare l'esempio precedente come segue:
{
    "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="
}
  1. Aggiorna il criterio di autorizzazione 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.s3ns-system.iam.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.s3ns-system.iam.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKJUiQ="
}

Il metodo setIamPolicy() consente di concedere ruoli agli utenti collegando un criterio consenti alla risorsa organizzazione. Il criterio di autorizzazione è una raccolta di associazioni che definiscono .

Read-Modify-Write: un pattern comune per aggiornare i metadati di una risorsa, ad esempio la policy di autorizzazione, consiste nel leggere lo stato attuale, aggiornare i dati localmente e quindi inviare i dati modificati per la scrittura. Questo pattern potrebbe causare un conflitto se due o più processi indipendenti tentano la sequenza contemporaneamente. Ad esempio, supponiamo che ci siano due proprietari per un progetto e che entrambi stiano tentando di apportare modifiche in conflitto alla policy di autorizzazione contemporaneamente. 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 di autorizzazione. Questa proprietà viene utilizzata per verificare se la norma di autorizzazione è cambiata rispetto all'ultima richiesta. Quando effettui una richiesta con un valore ETag, questo viene confrontato con il valore ETag esistente associato al criterio. Scrive il criterio di autorizzazione solo se i valori ETag corrispondono.

Quando aggiorni un criterio di autorizzazione, recuperalo prima utilizzando getIamPolicy(), aggiornalo e poi scrivi il criterio di autorizzazione aggiornato utilizzando setIamPolicy(). Utilizza il valore etag quando imposti il criterio allow solo se il criterio allow corrispondente in GetPolicyResponse contiene un valore etag.

Python

Il metodo setIamPolicy() consente di collegare un criterio di autorizzazione a una risorsa. Il metodo setIamPolicy accetta un SetIamPolicyRequest, che contiene un criterio di autorizzazione da impostare e la risorsa a cui è allegato il criterio di autorizzazione. Restituisce la policy di autorizzazione risultante. Ti consigliamo di seguire il pattern read-modify-write quando aggiorni un criterio di autorizzazione utilizzando setIamPolicy().

Di seguito è riportato un esempio di codice per impostare un criterio di autorizzazione 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 visualizzare tutti i progetti a cui hanno accesso nella console Trusted Cloud e nelle query di ricerca, indipendentemente dal fatto che si trovino o meno nella risorsa organizzativa selezionata dall'utente. Puoi utilizzare il servizio criteri dell'organizzazione per limitare l'insieme di progetti restituiti nelle query e nella console Trusted Cloud . Questo può essere utilizzato per limitare gli utenti alla visualizzazione dei soli progetti all'interno del tuo dominio.

Il vincolo del criterio dell'organizzazione constraints/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. Trusted Cloud

I progetti vengono visualizzati in No organization se l'utente non dispone dell'autorizzazione resourcemanager.organizations.get sulla risorsa dell'organizzazione padre del progetto. In questo modo, un progetto che non fa parte della risorsa dell'organizzazione non sembra associato a una risorsa dell'organizzazione. Se utilizzi il vincolo resourcemanager.accessBoundaries per non consentire una risorsa organizzazione, i progetti che appartengono a quella risorsa organizzazione non vengono visualizzati nelle query o nella console Trusted Cloud . Qualsiasi progetto che non è ancora stato migrato a una risorsa dell'organizzazione non è visibile se questo vincolo viene applicato.

Ti consigliamo di eseguire la migrazione dei progetti che si trovano in No organization alla risorsa organizzazione prima di applicare questo vincolo. Per informazioni sulla migrazione dei progetti in una risorsa dell'organizzazione, consulta Spostamento di un progetto.

Per informazioni sull'impostazione di una policy dell'organizzazione, vedi Utilizzare i vincoli.

Concessione dell'accesso condizionale

Alcuni ruoli IAM, come Amministratore criteri dell'organizzazione (roles/orgpolicy.policyAdmin), possono essere concessi solo a una risorsa organizzazione. A causa dell'ereditarietà dei criteri, questo ruolo viene normalmente ereditato da tutte le risorse dell'organizzazione.

Per un maggiore controllo sulle risorse a cui viene concesso il ruolo, puoi utilizzare le condizioni IAM. L'utilizzo dei tag con le condizioni ti consente di concedere l'accesso alle risorse solo se hanno il tag specificato. Ad esempio, il seguente criterio consente di concedere il ruolo di amministratore dei criteri dell'organizzazione solo per le risorse che hanno il tag environment: dev e non lo concede per altre risorse:

{
  "bindings": [
    {
      "members": [
        "principalSet://iam.googleapis.com/locations/global/workforcePools/my-pool/group/my-group"
      ],
      "role": "roles/orgpolicy.policyAdmin",
      "condition": {
          "title": "Dev_environment_only",
          "description": "Only granted in the development environment",
          "expression":
            "resource.matchTag('123456789012/env', 'dev')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Test delle autorizzazioni

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

In genere non richiami testIamPermission() se utilizzi la consoleTrusted Cloud direttamente per gestire le autorizzazioni. testIamPermissions() è destinato all'integrazione con il tuo software proprietario, ad esempio un'interfaccia utente grafica personalizzata. Ad esempio, la console Trusted Cloud utilizzatestIamPermissions()internamente per determinare quale UI deve essere disponibile per l'utente che ha eseguito l'accesso.

API

Puoi utilizzare il metodo testIamPermissions() per verificare quali delle autorizzazioni specificate ha il chiamante per la risorsa indicata. Questo metodo accetta un nome risorsa e un insieme di autorizzazioni come parametri e restituisce il sottoinsieme di autorizzazioni di cui dispone il chiamante.

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