Policy

Una policy Identity and Access Management (IAM) che specifica i controlli dell'accesso per le risorse Google Cloud.

Una Policy è una raccolta di bindings. Un binding vincola uno o più members, o entità, a un singolo role. Le entità possono essere account utente, service account, gruppi Google e domini (ad esempio G Suite). Un role è un elenco denominato di autorizzazioni; ogni role può essere un ruolo predefinito IAM o un ruolo personalizzato creato dall'utente.

Per alcuni tipi di risorse Google Cloud, un binding può anche specificare una condition, ovvero un'espressione logica che consente l'accesso a una risorsa solo se l'espressione restituisce true. Una condizione può aggiungere vincoli in base agli attributi della richiesta, della risorsa o di entrambi. Per scoprire quali risorse supportano le condizioni nelle relative policy IAM, consulta la documentazione di IAM.

Esempio JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

Esempio YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

Per una descrizione di IAM e delle sue funzionalità, consulta la documentazione di IAM.

Rappresentazione JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Campi
version

integer

Specifica il formato della policy.

I valori validi sono 0, 1 e 3. Le richieste che specificano un valore non valido vengono rifiutate.

Qualsiasi operazione che influisce sulle associazioni di ruoli condizionali deve specificare la versione 3. Questo requisito si applica alle seguenti operazioni:

  • Recupero di una policy che include un'associazione di ruoli condizionale
  • Aggiunta di un'associazione di ruoli condizionale a una policy
  • Modifica di un'associazione di ruoli condizionale in una policy
  • Rimozione di qualsiasi associazione di ruoli, con o senza condizione, da una policy che include condizioni

Importante: se utilizzi le condizioni IAM, devi includere il campo etag ogni volta che chiami setIamPolicy. Se ometti questo campo, IAM ti consente di sovrascrivere una policy di versione 3 con una policy di versione 1 e tutte le condizioni della policy di versione 3 andranno perse.

Se una policy non include condizioni, le operazioni su questa policy possono specificare qualsiasi versione valida o lasciare il campo non impostato.

Per scoprire quali risorse supportano le condizioni nelle relative policy IAM, consulta la documentazione di IAM.

bindings[]

object (Binding)

Associa un elenco di members, o entità, a un role. (Facoltativo) Può specificare una condition che determina come e quando vengono applicati i bindings. Ciascuno dei bindings deve contenere almeno un'entità.

I bindings in una Policy possono fare riferimento a un massimo di 1500 entità. Di queste, un massimo di 250 possono essere gruppi Google. Ogni occorrenza di un'entità viene conteggiata ai fini di questi limiti. Ad esempio, se i bindings concedono 50 ruoli diversi a user:alice@example.com e a nessun'altra entità, puoi aggiungere altre 1450 entità a bindings in Policy.

auditConfigs[]

object (AuditConfig)

Specifica la configurazione dell'audit log di Cloud per questa policy.

etag

string (bytes format)

etag viene utilizzato per il controllo della concorrenza ottimistico per evitare che gli aggiornamenti simultanei di una policy si sovrascrivano a vicenda. È consigliabile che i sistemi utilizzino etag nel ciclo di lettura-modifica-scrittura per eseguire gli aggiornamenti delle policy al fine di evitare possibili race condition: un etag viene restituito nella risposta a getIamPolicy e i sistemi devono inserire questo etag nella richiesta a setIamPolicy per garantire che la modifica venga applicata alla stessa versione della policy.

Importante: se utilizzi le condizioni IAM, devi includere il campo etag ogni volta che chiami setIamPolicy. Se ometti questo campo, IAM ti consente di sovrascrivere una policy di versione 3 con una policy di versione 1 e tutte le condizioni della policy di versione 3 andranno perse.

Una stringa con codifica in base64.

Binding

Associa members, o entità, a un role.

Rappresentazione JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Campi
role

string

Ruolo assegnato all'elenco di members o entità. Ad esempio, roles/viewer, roles/editor o roles/owner.

Per una panoramica dei ruoli e delle autorizzazioni IAM, consulta la documentazione di IAM. Per un elenco dei ruoli predefiniti disponibili, consulta questa pagina.

members[]

string

Specifica le entità che richiedono l'accesso a una risorsa Google Cloud. members può avere i seguenti valori:

  • allUsers: un identificatore speciale che rappresenta chiunque sia connesso a internet, con o senza un Account Google.

  • allAuthenticatedUsers: un identificatore speciale che rappresenta chiunque sia autenticato con un Account Google o un service account. Non include le identità provenienti da provider di identità (IdP) esterni tramite la federazione delle identità.

  • user:{emailid}: un indirizzo email che rappresenta un Account Google specifico. Ad esempio: alice@example.com.

  • serviceAccount:{emailid}: un indirizzo email che rappresenta un service account Google. Ad esempio: my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: un identificatore per un service account Kubernetes. Ad esempio, my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: un indirizzo email che rappresenta un gruppo Google. Ad esempio, admins@example.com.

  • domain:{domain}: il dominio G Suite (principale) che rappresenta tutti gli utenti di quel dominio. Ad esempio, google.com o example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: una singola identità in un pool di identità della forza lavoro.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: tutte le identità della forza lavoro in un gruppo.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: tutte le identità della forza lavoro con un valore di attributo specifico.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: tutte le identità in un pool di identità della forza lavoro.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: una singola identità all'interno di un pool di identità del workload.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: un gruppo di pool di identità del workload.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: tutte le identità in un pool di identità del workload con un determinato attributo.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: tutte le identità in un gruppo di pool di identità del workload.

  • deleted:user:{emailid}?uid={uniqueid}: un indirizzo email (più un identificatore univoco) che rappresenta un utente eliminato di recente. Ad esempio: alice@example.com?uid=123456789012345678901. Se l'utente viene recuperato, viene ripristinato il valore user:{emailid} e l'utente recuperato mantiene il ruolo nell'associazione.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: un indirizzo email (più un identificatore univoco) che rappresenta un service account eliminato di recente. Ad esempio: my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Se l'eliminazione del service account viene annullata, viene ripristinato il valore serviceAccount:{emailid} e il service account mantiene il ruolo nell'associazione.

  • deleted:group:{emailid}?uid={uniqueid}: un indirizzo email (più un identificatore univoco) che rappresenta un gruppo Google eliminato di recente. Ad esempio, admins@example.com?uid=123456789012345678901. Se il gruppo viene recuperato, viene ripristinato il valore group:{emailid} e il gruppo recuperato mantiene il ruolo nell'associazione.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: una singola identità eliminata in un pool di identità della forza lavoro. Ad esempio: deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

La condizione associata a questa associazione.

Se la condizione restituisce true, l'associazione viene applicata alla richiesta corrente.

Se la condizione restituisce false, l'associazione non viene applicata alla richiesta corrente. Tuttavia, un'associazione di ruoli diversa potrebbe concedere lo stesso ruolo a una o più entità in questa associazione.

Per scoprire quali risorse supportano le condizioni nelle relative policy IAM, consulta la documentazione di IAM.

Expr

Rappresenta un'espressione testuale nella sintassi Common Expression Language (CEL). CEL è un linguaggio di espressione simile a C. La sintassi e la semantica di CEL sono documentate alla pagina https://github.com/google/cel-spec.

Esempio (confronto):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Esempio (uguaglianza):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Esempio (logica):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Esempio (manipolazione dei dati):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

Le variabili e le funzioni esatte a cui è possibile fare riferimento all'interno di un'espressione sono determinate dal servizio che la valuta. Per saperne di più, consulta la documentazione del servizio.

Rappresentazione JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Campi
expression

string

Rappresentazione testuale di un'espressione nella sintassi Common Expression Language.

title

string

Facoltativo. Titolo dell'espressione, ovvero una breve stringa che ne descrive lo scopo. Può essere utilizzato, ad esempio, nelle UI che consentono di inserire l'espressione.

description

string

Facoltativo. Descrizione dell'espressione. Si tratta di un testo più lungo che descrive l'espressione, ad esempio quando ci si passa il mouse sopra in una UI.

location

string

Facoltativo. Stringa che indica la posizione dell'espressione per la segnalazione degli errori, ad esempio un nome file e una posizione nel file.

AuditConfig

Specifica la configurazione dell'audit per un servizio. La configurazione determina i tipi di autorizzazione registrati e le identità, se presenti, esenti dal logging. Un AuditConfig deve avere una o più AuditLogConfig.

Se sono presenti AuditConfig sia per allServices sia per un servizio specifico, viene utilizzata l'unione delle due AuditConfig per quel servizio: i log_types specificati in ogni AuditConfig sono abilitati e gli exemptedMember in ogni AuditLogConfig sono esenti.

Policy di esempio con più AuditConfig:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

Per sampleservice, questa policy abilita il logging di DATA_READ, DATA_WRITE e ADMIN_READ. Inoltre, esenta jose@example.com dal logging di DATA_READ e aliya@example.com dal logging di DATA_WRITE.

Rappresentazione JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Campi
service

string

Specifica un servizio che verrà abilitato per l'audit logging. Ad esempio, storage.googleapis.com, cloudsql.googleapis.com. allServices è un valore speciale che copre tutti i servizi.

auditLogConfigs[]

object (AuditLogConfig)

La configurazione per il logging di ogni tipo di autorizzazione.

AuditLogConfig

Fornisce la configurazione per il logging di un tipo di autorizzazione. Esempio:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

In questo modo viene abilitato il logging di "DATA_READ" e "DATA_WRITE", mentre jose@example.com viene esentato dal logging di DATA_READ.

Rappresentazione JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Campi
logType

enum (LogType)

Il tipo di log abilitato da questa configurazione.

exemptedMembers[]

string

Specifica le identità che non causano il logging per questo tipo di autorizzazione. Segue lo stesso formato di Binding.members.

LogType

L'elenco dei tipi di autorizzazione validi per i quali è possibile configurare il logging. Le scritture amministrative vengono sempre registrate e non sono configurabili.

Enum
LOG_TYPE_UNSPECIFIED Caso predefinito. Non dovrebbe mai essere questo.
ADMIN_READ Letture amministrative. Esempio: CloudIAM getIamPolicy
DATA_WRITE Scritture di dati. Esempio: creazione di utenti Cloud SQL
DATA_READ Letture di dati. Esempio: elenco degli utenti CloudSQL