Gestisci l'accesso agli account di servizio

Questa pagina descrive come concedere, modificare e revocare l'accesso di un'entità a un singolo account di servizio. Per gestire l'accesso di un'entità a tutti gli account di servizio in un progetto, una cartella o un'organizzazione, gestiscine l'accesso nel progetto, a livello di cartella o organizzazione.

In Identity and Access Management (IAM), l'accesso viene gestito tramite i criteri di autorizzazione, noti anche come criteri IAM. Un criterio di autorizzazione è collegato risorsa Google Cloud. Ogni criterio di autorizzazione contiene una raccolta di ruoli associazioni che associano una o più entità, come utenti o servizio. con un ruolo IAM. Queste associazioni di ruoli concedono ruoli specificati alle entità, sia sulla risorsa cui il criterio di autorizzazione collegati e su tutti i discendenti di quella risorsa. Per ulteriori informazioni sui criteri di autorizzazione, consulta Informazioni sui criteri di autorizzazione.

Gli account di servizio sono risorse a cui è possibile concedere l'accesso ad altre entità e le entità a cui è possibile concedere l'accesso ad altre risorse. Questa pagina tratta gli account di servizio come risorse e descrive come concederne l'accesso ad altre entità. Per scoprire come concedere a un account di servizio l'accesso ad altri consulta le seguenti guide:

In questa pagina viene descritto come gestire l'accesso agli account di servizio utilizzando Console Google Cloud, Google Cloud CLI e l'API REST. Puoi anche gestire l'accesso utilizzando le librerie client IAM.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire l'accesso a un account di servizio, chiedi all'amministratore di concederti il ruolo IAM Amministratore account di servizio (roles/iam.serviceAccountAdmin) nell'account di servizio o nel progetto proprietario dell'account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per gestire l'accesso a un account di servizio. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per gestire l'accesso a un account di servizio sono necessarie le seguenti autorizzazioni:

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

Potresti anche riuscire a ottenere queste autorizzazioni con ruoli personalizzati e altri ruoli predefiniti.

Visualizza accesso attuale

La sezione seguente illustra come utilizzare la console Google Cloud, gcloud CLI e l'API REST per visualizzare chi ha accesso a un servizio . Puoi anche visualizzare l'accesso utilizzando il client IAM librerie per ottenere il criterio di autorizzazione dell'account di servizio.

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai al servizio Account

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio.

  4. Vai alla scheda Autorizzazioni. Le entità con accesso a questo servizio dell'account elenca tutte le entità a cui è stato concesso un ruolo l'account di servizio.

    Questo elenco include le entità il cui accesso proviene dai ruoli concessi sulle risorse padre. Per ulteriori informazioni sull'ereditarietà dei criteri, consulta Eredità dei criteri e gerarchia delle risorse.

  5. (Facoltativo) Per visualizzare le concessioni di ruoli per gli agenti di servizio, seleziona la casella di controllo Includi concessioni dei ruoli fornite da Google.

gcloud

Per vedere chi ha accesso al tuo account di servizio, ottieni il criterio di autorizzazione per l'account di servizio. Per scoprire come interpretare i criteri di autorizzazione, consulta Informazioni sui criteri di autorizzazione.

Per ottenere il criterio di autorizzazione per l'account di servizio, esegui il comando Comando get-iam-policy per l'account di servizio:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Fornisci i seguenti valori:

  • SA_ID: l'ID del tuo account di servizio. Questo può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com, o l'ID numerico univoco dell'account di servizio.

  • FORMAT: il formato del criterio. Utilizza json o yaml.

  • PATH: il percorso di un nuovo file di output per il criterio.

Ad esempio, il comando seguente recupera il criterio per l'account di servizio my-service-account e la salva nella tua home directory in formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

Per vedere chi ha accesso al tuo account di servizio, ottieni il criterio di autorizzazione per l'account di servizio. Per scoprire come interpretare i criteri di autorizzazione, consulta Informazioni sui criteri di autorizzazione.

Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo progetto Google Cloud ID. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
  • SA_ID: l'ID del tuo account di servizio. Può essere l'indirizzo email dell'account di servizio nel formatoSA_NAME@PROJECT_ID.iam.gserviceaccount.com o l'ID numerico univoco dell'account di servizio.

  • POLICY_VERSION: la versione del criterio da utilizzare restituito. Le richieste devono specificare la versione del criterio più recente, ovvero la versione del criterio 3. Consulta la sezione Specificare una versione del criterio quando si riceve un criterio per maggiori dettagli.

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

Corpo JSON della richiesta:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta contiene il criterio di autorizzazione dell'account di servizio. Ad esempio:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Concedere o revocare un singolo ruolo

Puoi utilizzare la console Google Cloud e gcloud CLI per concedi o revoca un singolo ruolo per una singola entità, senza modificare direttamente il criterio di autorizzazione dell'account di servizio. I tipi comuni di entità includono Account Google, account di servizio, gruppi Google e domini. Per un elenco di tutte tipi di entità, consulta Concetti relativi all'identità.

In genere, le modifiche ai criteri diventano effettive entro 2 minuti. Tuttavia, in alcuni casi, la propagazione delle modifiche nel sistema può richiedere 7 minuti o più.

Se hai bisogno di aiuto per identificare il ruolo predefinito più appropriato, consulta Scegli i ruoli predefiniti.

Concedi un singolo ruolo

Per concedere un singolo ruolo a un'entità:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai al servizio Account

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio.

  4. Vai alla scheda Autorizzazioni e trova la sezione Entità con accesso a questo account di servizio.

  5. Seleziona un'entità a cui concedere un ruolo:

    • Concedi un ruolo a un'entità che dispone già di altri ruoli nel servizio. di destinazione, individua la riga contenente l'entità, poi fai clic su Modifica principal nella riga corrispondente, quindi fai clic su Aggiungi un altro ruolo.

      Per concedere un ruolo a un agente di servizio, seleziona Includi Concedi i ruoli fornite da Google per vedere il relativo indirizzo email.

    • Per concedere un ruolo a un'entità che non ha ruoli esistenti nel account di servizio, fai clic su Concedi accesso, quindi inserisci l'indirizzo email o un altro identificatore dell'entità.

  6. Seleziona un ruolo da concedere dall'elenco a discesa. Per le best practice di sicurezza, scegli un ruolo che includa solo le autorizzazioni necessarie all'entità.

  7. (Facoltativo) Aggiungi una condizione al ruolo.

  8. Fai clic su Salva. All'entità viene concesso il ruolo nell'account di servizio.

gcloud

Per concedere rapidamente un ruolo a un'entità, esegui Comando add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

Fornisci i seguenti valori:

  • SA_ID: l'ID del tuo account di servizio. Questo può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com, o l'ID numerico univoco dell'account di servizio.

  • PRINCIPAL: un identificatore dell'entità o del membro che solitamente ha il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei valori che può assumere PRINCIPAL, consulta la documentazione di riferimento sull'associazione dei criteri.

    Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o Cloud Identity. Per scoprire come impostare un dominio Cloud Identity, consulta panoramica di Cloud Identity.

  • ROLE_NAME: il nome del ruolo che vuoi assegnare concessione. Utilizza uno dei seguenti formati:

    • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
    • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
    • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

    Per un elenco dei ruoli predefiniti, consulta Informazioni ruoli.

  • CONDITION: facoltativo. La condizione da aggiungere al ruolo associazione. Per ulteriori informazioni sulle condizioni, vedi panoramica delle condizioni.

Ad esempio, per concedere all'utente il ruolo Utente account di servizio my-user@example.com per l'account di servizio my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Revocare un singolo ruolo

Per revocare un singolo ruolo da un'entità, procedi nel seguente modo:

Console

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai al servizio Account

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio.

  4. Vai alla scheda Autorizzazioni e trova la sezione Entità con accesso a questo account di servizio.

  5. Trova la riga con l'indirizzo email dell'entità di cui vuoi accedere revocarlo. Quindi, fai clic su Modifica entità nella riga corrispondente.

  6. Fai clic sul pulsante Elimina per il ruolo che vuoi revocare, quindi fai clic su Salva.

gcloud

Per revocare rapidamente un ruolo da un utente, esegui la Comando remove-iam-policy-binding:

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME

Fornisci i seguenti valori:

  • SA_ID: l'ID del tuo account di servizio. Può essere l'indirizzo email dell'account di servizio nel formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com o l'ID numerico univoco dell'account di servizio.

  • PRINCIPAL: un identificatore dell'entità o del membro che solitamente ha il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio: user:my-user@example.com. Per un elenco completo dei valori che PRINCIPAL può avere, consulta Riferimento all'associazione dei criteri.

    Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o Cloud Identity. Per scoprire come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

  • ROLE_NAME: il nome del ruolo che vuoi assegnare revocarlo. Utilizza uno dei seguenti formati:

    • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
    • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
    • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

    Per un elenco dei ruoli predefiniti, consulta Informazioni ruoli.

Ad esempio, per revocare all'utente il ruolo Utente account di servizio my-user@example.com per l'account di servizio my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Concedi o revoca più ruoli utilizzando la console Google Cloud

Puoi utilizzare la console Google Cloud per concedere e revocare più ruoli per: di una singola entità:

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai a Account di servizio

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio.

  4. Vai alla scheda Autorizzazioni e trova la sezione Entità con accesso a questo account di servizio.

  5. Seleziona l'entità di cui vuoi modificare i ruoli:

    • Per modificare i ruoli per un'entità che dispone già di ruoli nel servizio di destinazione, individua la riga contenente l'entità, poi fai clic su Modifica principal nella riga corrispondente, quindi fai clic su Aggiungi un altro ruolo.

      Per modificare i ruoli per un agente di servizio, seleziona il Casella di controllo Includi concessioni dei ruoli fornite da Google per vedere il relativo indirizzo email.

    • Per concedere ruoli a un'entità che non ne ha già nel service account, fai clic su Concedi accesso, quindi inserisci l'indirizzo email o un altro identificatore dell'entità.

  6. Modifica i ruoli dell'entità:

    • Per concedere un ruolo a un principale che non ha ruoli esistenti nella risorsa, fai clic su Seleziona un ruolo, quindi seleziona un ruolo da concedere dall'elenco a discesa.
    • Per concedere un ruolo aggiuntivo all'entità, fai clic su Aggiungi un altro ruolo. quindi seleziona un ruolo da concedere dall'elenco a discesa.
    • Per sostituire uno dei ruoli del principale con un altro, fai clic sul ruolo esistente, quindi scegli un altro ruolo da concedere dall'elenco a discesa.
    • Per revocare uno dei ruoli dell'entità, fai clic sul pulsante Elimina per ogni ruolo da eliminare revocarlo.

    Puoi anche aggiungere una condizione a un ruolo, modificare il relativo di un ruolo o di rimuovere la dell'oggetto in questione.

  7. Fai clic su Salva.

Concedi o revoca più ruoli in modo programmatico

Apportare modifiche all'accesso su larga scala che comportino la concessione e la revoca di più ruoli per più entità, usa il pattern read-modify-write per aggiornare criterio di autorizzazione dell'account di servizio:

  1. Leggi il criterio di autorizzazione attuale chiamando getIamPolicy().
  2. Modifica il criterio di autorizzazione mediante un editor di testo o in modo programmatico per aggiungere o rimuovere eventuali entità o associazioni di ruoli.
  3. Scrivi il criterio di autorizzazione aggiornato chiamando setIamPolicy().

Questa sezione mostra come utilizzare gcloud CLI e l'API REST per aggiorna il criterio di autorizzazione. Puoi anche aggiornare il criterio di autorizzazione utilizzando il metodo Librerie client IAM.

In genere, le modifiche ai criteri diventano effettive entro 2 minuti. Tuttavia, in alcuni casi, la propagazione delle modifiche nel sistema può richiedere almeno 7 minuti.

Ottieni il criterio di autorizzazione attuale

gcloud

Per ottenere il criterio di autorizzazione per l'account di servizio, esegui il comando Comando get-iam-policy per l'account di servizio:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Fornisci i seguenti valori:

  • SA_ID: l'ID del tuo account di servizio. Questo può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com, o l'ID numerico univoco dell'account di servizio.

  • FORMAT: il formato del criterio di autorizzazione. Usa json o yaml.

  • PATH: il percorso di un nuovo file di output per l'elemento allow .

Ad esempio, il seguente comando recupera il criterio di autorizzazione per l'account di servizio my-service-account e la salva nella tua home directory in formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

Il metodo serviceAccounts.getIamPolicy recupera il criterio di autorizzazione di un account di servizio.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo progetto Google Cloud ID. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
  • SA_ID: l'ID del tuo account di servizio. Può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com o il servizio ID numerico univoco dell'account.

  • POLICY_VERSION: la versione del criterio da utilizzare restituito. Le richieste devono specificare la versione più recente dei criteri, ovvero la versione 3. Per maggiori dettagli, consulta la sezione Specificare una versione delle norme al momento dell'ottenimento di una norma.

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

Corpo JSON della richiesta:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta contiene il criterio di autorizzazione dell'account di servizio. Ad esempio:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Salva la risposta in un file del tipo appropriato (json o yaml).

Java

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta API IAM Java documentazione di riferimento.

Per eseguire l'autenticazione su IAM, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    getPolicy(projectId, serviceAccount);
  }

  // Gets a service account's IAM policy.
  public static Policy getPolicy(String projectId, String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to get.
    String serviceAccountEmail = serviceAccount + "@" + projectId + ".iam.gserviceaccount.com";

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, serviceAccountEmail).toString())
              .build();
      Policy policy = iamClient.getIamPolicy(request);
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    }
  }
}

Python

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta API IAM Python documentazione di riferimento.

Per eseguire l'autenticazione su IAM, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_service_account_iam_policy(project_id: str, account: str) -> policy_pb2.Policy:
    """
    Get policy for service account.
    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    """

    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    policy = iam_client.get_iam_policy(request)
    return policy

Modifica il criterio di autorizzazione

Modifica la copia locale del servizio in modo programmatico o utilizzando un editor di testo le norme di autorizzazione dell'account riflettano i ruoli che vuoi concedere o revocare utenti.

Per assicurarti di non sovrascrivere altre modifiche, non modificare o rimuovere il valore campo etag del criterio di autorizzazione. Il campo etag identifica lo stato attuale di il criterio di autorizzazione. Quando imposti il criterio di autorizzazione aggiornato, IAM confronta il valore etag nella richiesta con il etag esistente e scrive il criterio di autorizzazione solo se i valori corrispondono.

Per modificare i ruoli concessi da un criterio di autorizzazione, devi modificare il ruolo associazioni nel criterio di autorizzazione. Le associazioni di ruoli hanno il formato seguente:

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

I segnaposto hanno i seguenti valori:

  • ROLE_NAME: il nome del ruolo che vuoi assegnare concessione. Utilizza uno dei seguenti formati:

    • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
    • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
    • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

    Per un elenco dei ruoli predefiniti, consulta Informazioni ruoli.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: identificatori per le entità che a cui vuoi concedere il ruolo.

    Di solito, gli identificatori entità hanno il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio: user:my-user@example.com. Per un elenco completo dei valori che può assumere PRINCIPAL, consulta la documentazione di riferimento sull'associazione dei criteri.

    Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o Cloud Identity. Per scoprire come impostare un dominio Cloud Identity, consulta panoramica di Cloud Identity.

  • CONDITIONS: facoltativo. Qualsiasi condizione che specificano quando verrà concesso l'accesso.

Concedi un ruolo

Per concedere ruoli alle entità, modifica le associazioni di ruoli nel criterio di autorizzazione. Per scoprire quali ruoli puoi concedere, consulta la sezione Informazioni sui ruoli o visualizza i ruoli concedibili per l'account di servizio. Se hai bisogno identificare i ruoli predefiniti più appropriati, consultare Scegli i ruoli predefiniti.

Facoltativamente, puoi utilizzare le condizioni per concedere ruoli solo quando vengono soddisfatti determinati requisiti.

Per concedere un ruolo già incluso nel criterio di autorizzazione, aggiungi l'entità a un'associazione di ruoli esistente:

gcloud

Modifica il criterio di autorizzazione aggiungendo l'entità a un'associazione dei ruoli esistente. Nota che questa modifica non avrà effetto finché non impostare il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo Utente account di servizio (roles/iam.serviceAccountUser) a kai@example.com:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Per concedere lo stesso ruolo a raha@example.com, aggiungi raha@example.com al associazione di ruoli esistente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

Modifica il criterio di autorizzazione aggiungendo l'entità a un'associazione di ruolo esistente. Tieni presente che questa modifica non verrà applicata finché non imposti il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo Utente account di servizio (roles/iam.serviceAccountUser) a kai@example.com:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Per concedere lo stesso ruolo a raha@example.com, aggiungi raha@example.com al associazione di ruoli esistente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Per concedere un ruolo non ancora incluso nel criterio di autorizzazione, aggiungi una nuova associazione di ruolo:

gcloud

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruoli che conceda il ruolo al principale. Questa modifica non avrà effetto finché non impostare il criterio di autorizzazione aggiornato.

Ad esempio, per concedere il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) a raha@example.com, aggiungi la seguente associazione di ruoli all'array bindings per il criterio di autorizzazione:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

REST

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruoli che conceda il ruolo al principale. Questa modifica non avrà effetto finché non impostare il criterio di autorizzazione aggiornato.

Ad esempio, per concedere il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) a raha@example.com, aggiungi seguente associazione del ruolo all'array bindings per il criterio di autorizzazione:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

Revocare un ruolo

Per revocare un ruolo, rimuovi l'entità dall'associazione dei ruoli. Se non sono presenti ad altre entità nell'associazione dei ruoli, rimuovi l'intera associazione dei ruoli di autorizzazione.

gcloud

Modifica il criterio di autorizzazione rimuovendo l'entità o l'intera associazione del ruolo. Questa variazione non verrà applicata finché non imposterai il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede a kai@example.com e raha@example.com il ruolo Utente account di servizio (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Per revocare il ruolo da kai@example.com, rimuovi kai@example.com da associazione del ruolo:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:raha@example.com"
  ]
}

Per revocare il ruolo sia da kai@example.com sia da raha@example.com, rimuovi l'associazione del ruolo dal criterio di autorizzazione.

REST

Modifica il criterio di autorizzazione rimuovendo l'entità o l'intera associazione del ruolo. Questo modifica non avrà effetto finché non impostare il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede a kai@example.com e raha@example.com il ruolo Utente account di servizio (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Per revocare il ruolo da kai@example.com, rimuovi kai@example.com da associazione del ruolo:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:raha@example.com"
  ]
}

Per revocare il ruolo sia da kai@example.com sia da raha@example.com, rimuovi l'associazione del ruolo dal criterio di autorizzazione.

Imposta il criterio di autorizzazione

Dopo aver modificato il criterio di autorizzazione per concedere e revocare i ruoli, chiama setIamPolicy() per apportare gli aggiornamenti.

gcloud

Per impostare il criterio di autorizzazione per la risorsa, esegui il comando Comando set-iam-policy per l'account di servizio:

gcloud iam service-accounts set-iam-policy SA_ID PATH

Fornisci i seguenti valori:

  • SA_ID: l'ID del tuo account di servizio. Questo può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com, o l'ID numerico univoco dell'account di servizio.

  • PATH: il percorso di un file che contiene la nuova di autorizzazione.

La risposta contiene il criterio di autorizzazione aggiornato.

Ad esempio, il comando seguente imposta il criterio di autorizzazione archiviato in policy.json come criterio di autorizzazione per l'account di servizio. my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \
    ~/policy.json

REST

Il metodo serviceAccounts.setIamPolicy imposta un criterio di autorizzazione aggiornato per l'account di servizio.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo progetto Google Cloud ID. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.
  • SA_ID: l'ID del tuo account di servizio. Può essere l'indirizzo email dell'account di servizio nel modulo SA_NAME@PROJECT_ID.iam.gserviceaccount.com o il servizio ID numerico univoco dell'account.

  • POLICY: una rappresentazione JSON del criterio che che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta Riferimento alle norme.

    Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci policy con quanto segue:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": POLICY
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta contiene il criterio di autorizzazione aggiornato.

Java

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta API IAM Java documentazione di riferimento.

Per autenticarti in IAM, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setServiceAccountPolicy(policy, projectId, serviceAccount);
  }

  // Sets a service account's policy.
  public static Policy setServiceAccountPolicy(Policy policy, String projectId,
                                               String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to set.
    String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", serviceAccount, projectId);

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, accountEmail).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return iamClient.setIamPolicy(request);
    }
  }
}

Python

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta API IAM Python documentazione di riferimento.

Per eseguire l'autenticazione su IAM, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_service_account_iam_policy(
    project_id: str, account: str, policy: policy_pb2.Policy
) -> policy_pb2.Policy:
    """
    Set policy for service account. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    policy: Policy which has to be set.
    """

    # Same approach as for policies on project level, but client stub is different.
    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential reties approach
    # to be sure policy has been updated.
    request.policy.MergeFrom(policy)

    policy = iam_client.set_iam_policy(request)
    return policy

Passaggi successivi

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente