Policy

Un criterio Identity and Access Management (IAM) che specifica i controlli di accesso per le risorse Google Cloud.

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

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

Esempio di 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

Consulta la documentazione IAM per una descrizione di IAM e delle sue funzionalità.

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

integer

Specifica il formato del criterio.

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

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

  • Ottenere un criterio che include un'associazione di ruoli condizionale
  • Aggiunta di un'associazione di ruoli condizionale a un criterio
  • Modificare un'associazione di ruoli condizionale in un criterio
  • Rimozione di qualsiasi associazione di ruolo, con o senza una condizione, da un criterio che include condizioni

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

Se un criterio non include condizioni, le operazioni su quel criterio possono specificare qualsiasi versione valida o lasciare il campo non impostato.

Per sapere quali risorse supportano condizioni nei relativi criteri IAM, consulta la documentazione IAM.

bindings[]

object (Binding)

Associa un elenco di members, o entità, a un role. Facoltativamente, puoi specificare un condition che determina come e quando vengono applicati i bindings. Ciascun bindings deve contenere almeno un principale.

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

auditConfigs[]

object (AuditConfig)

Specifica la configurazione dell'audit logging di Cloud per questo criterio.

etag

string (bytes format)

etag viene utilizzato per il controllo della concorrenza ottimistica come metodo per evitare che gli aggiornamenti simultanei di un criterio si sovrascrivano a vicenda. È vivamente consigliato che i sistemi utilizzino etag nel ciclo di lettura, modifica e scrittura per eseguire aggiornamenti dei criteri al fine di evitare condizioni di gara: un etag viene restituito nella risposta a getIamPolicy e i sistemi devono inserire questo etag nella richiesta a setIamPolicy per assicurarsi che la modifica venga applicata alla stessa versione del criterio.

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 un criterio della versione 3 con un criterio della versione 1 e tutte le condizioni del criterio della versione 3 andranno perse.

Una stringa con codifica Base64.

Associazione

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 IAM. Per un elenco dei ruoli predefiniti disponibili, consulta questa pagina.

members[]

string

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

  • allUsers: un identificatore speciale che rappresenta tutti gli utenti di internet, con o senza un Account Google.

  • allAuthenticatedUsers: un identificatore speciale che rappresenta chiunque sia autenticato con un Account Google o un account di servizio. Non include identità provenienti da provider di identità (IdP) esterni tramite 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 account di servizio Google. Ad esempio, my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: un identificatore di un account di servizio 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à 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à in un pool di identità per i carichi di lavoro.

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

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

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: tutte le identità in un pool di identità per i carichi di lavoro.

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

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

  • deleted:group:{emailid}?uid={uniqueid}: un indirizzo email (oltre a un identificatore univoco) che rappresenta un gruppo Google eliminato di recente. Ad esempio, admins@example.com?uid=123456789012345678901. Se il gruppo viene recuperato, questo valore viene ripristinato a 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}: È stata eliminata una singola identità 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 ha valore true, questa associazione si applica alla richiesta corrente.

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

Per sapere quali risorse supportano condizioni nei relativi criteri IAM, consulta la documentazione IAM.

Expr

Rappresenta un'espressione testuale nella sintassi CEL (Common Expression Language). CEL è un linguaggio di espressioni simile a C. La sintassi e la semantica di CEL sono descritte all'indirizzo 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 può essere fatto riferimento all'interno di un'espressione sono determinate dal servizio che la valuta. Per ulteriori informazioni, 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 di 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 si passa il mouse sopra l'espressione in un'interfaccia utente.

location

string

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

AuditConfig

Specifica la configurazione di controllo per un servizio. La configurazione determina quali tipi di autorizzazione vengono registrati e quali identità, se presenti, sono esenti dal logging. Un AuditConfig deve avere uno o più AuditLogConfig.

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

Criterio 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, questo criterio abilita i log di DATA_READ, DATA_WRITE e ADMIN_READ. Esclude inoltre jose@example.com dal logging DATA_READ e aliya@example.com dal logging DATA_WRITE.

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

string

Specifica un servizio per cui verrà attivato 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 del logging di ogni tipo di autorizzazione.

AuditLogConfig

Fornisce la configurazione per la registrazione di un tipo di autorizzazioni. Esempio:

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

Questa operazione abilita "DATA_READ" e "DATA_WRITE" ed esclude jose@example.com dal logging 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 generano log per questo tipo di autorizzazione. Deve seguire lo stesso formato di Binding.members.

LogType

L'elenco dei tipi di autorizzazioni validi per i quali è possibile configurare la registrazione. Le scritture degli amministratori vengono sempre registrate e non sono configurabili.

Enum
LOG_TYPE_UNSPECIFIED Maiuscole predefinite. Non dovrebbe mai essere così.
ADMIN_READ Letture amministratore. Esempio: CloudIAM getIamPolicy
DATA_WRITE Scritture di dati. Esempio: creazione degli utenti Cloud SQL
DATA_READ Letture dei dati. Esempio: elenco utenti CloudSQL