Elenca e modifica i service account

Questa pagina spiega come elencare e modificare i service account utilizzando l'API Identity and Access Management (IAM), la console Trusted Cloud e lo strumento a riga di comando gcloud.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire i service account, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Per scoprire di più su questi ruoli, consulta Ruoli dei service account.

I ruoli di base IAM contengono anche le autorizzazioni per gestire i service account. Non devi concedere ruoli di base in un ambiente di produzione, ma puoi concederli in un ambiente di sviluppo o di test.

Elenco dei service account

Puoi elencare gli account di servizio gestiti dall'utente in un progetto per eseguire il controllo degli account di servizio e delle chiavi o come parte di uno strumento personalizzato per gestire gli account di servizio.

Non puoi elencare gli agenti di servizio che potrebbero essere visualizzati nei log di controllo e nel criterio di autorizzazione del tuo progetto. Gli agenti di servizio non si trovano nel tuo progetto e non puoi accedervi direttamente.

Console

  1. Nella Trusted Cloud console, vai alla pagina Service account.

    Vai ad Account di servizio

  2. Seleziona un progetto.

    La pagina Service account elenca tutti i service account gestiti dall'utente nel progetto selezionato.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Esegui il comando gcloud iam service-accounts list per elencare tutti i service account in un progetto.

    Comando:

    gcloud iam service-accounts list

    L'output è l'elenco di tutti i service account gestiti dall'utente nel progetto:

    NAME                    EMAIL
    SA_DISPLAY_NAME_1    SA_NAME_1@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
    SA_DISPLAY_NAME_2    SA_NAME_2@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
    
  3. C++

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM C++.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& project_id) {
      iam::IAMClient client(iam::MakeIAMConnection());
      int count = 0;
      for (auto& sa : client.ListServiceAccounts("projects/" + project_id)) {
        if (!sa) throw std::move(sa).status();
        std::cout << "ServiceAccount successfully retrieved: " << sa->name()
                  << "\n";
        ++count;
      }
      if (count == 0) {
        std::cout << "No service accounts found in project: " << project_id
                  << "\n";
      }
    }

    C#

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM C#.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class ServiceAccounts
    {
        public static IList<ServiceAccount> ListServiceAccounts(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var response = service.Projects.ServiceAccounts.List(
                "projects/" + projectId).Execute();
            foreach (ServiceAccount account in response.Accounts)
            {
                Console.WriteLine("Name: " + account.Name);
                Console.WriteLine("Display Name: " + account.DisplayName);
                Console.WriteLine("Email: " + account.Email);
                Console.WriteLine();
            }
            return response.Accounts;
        }
    }
    

    Go

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Go.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // listServiceAccounts lists a project's service accounts.
    func listServiceAccounts(w io.Writer, projectID string) ([]*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	response, err := service.Projects.ServiceAccounts.List("projects/" + projectID).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.List: %w", err)
    	}
    	for _, account := range response.Accounts {
    		fmt.Fprintf(w, "Listing service account: %v\n", account.Name)
    	}
    	return response.Accounts, nil
    }
    

    Java

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Java.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.ServiceAccount;
    import java.io.IOException;
    
    public class ListServiceAccounts {
    
      public static void main(String[] args) throws IOException {
        // TODO(Developer): Replace the below variables before running.
        String projectId = "your-project-id";
    
        listServiceAccounts(projectId);
      }
    
      // Lists all service accounts for the current project.
      public static IAMClient.ListServiceAccountsPagedResponse listServiceAccounts(String projectId)
              throws IOException {
        // 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()) {
          IAMClient.ListServiceAccountsPagedResponse response =
                  iamClient.listServiceAccounts(String.format("projects/%s", projectId));
    
          for (ServiceAccount account : response.iterateAll()) {
            System.out.println("Name: " + account.getName());
            System.out.println("Display name: " + account.getDisplayName());
            System.out.println("Email: " + account.getEmail() + "\n");
          }
    
          return response;
        }
      }
    }

    Python

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Python.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    from typing import List
    
    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def list_service_accounts(project_id: str) -> List[iam_admin_v1.ServiceAccount]:
        """Get list of project service accounts.
    
        project_id: ID or number of the Google Cloud project you want to use.
    
        returns a list of iam_admin_v1.ServiceAccount
        """
    
        iam_admin_client = iam_admin_v1.IAMClient()
        request = types.ListServiceAccountsRequest()
        request.name = f"projects/{project_id}"
    
        accounts = iam_admin_client.list_service_accounts(request=request)
        return accounts.accounts

    REST

    Il metodo serviceAccounts.list elenca tutti i account di servizio gestiti dall'utente nel tuo progetto.

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

    • PROJECT_ID: il tuo ID progetto Trusted Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

    Metodo HTTP e URL:

    GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "accounts": [
        {
          "name": "projects/my-project/serviceAccounts/sa-1@my-project.s3ns-system.iam.gserviceaccount.com",
          "projectId": "my-project",
          "uniqueId": "123456789012345678901",
          "email": "sa-1@my-project.s3ns-system.iam.gserviceaccount.com",
          "description": "My first service account",
          "displayName": "Service account 1",
          "etag": "BwUpTsLVUkQ=",
          "oauth2ClientId": "987654321098765432109"
        },
        {
          "name": "projects/my-project/serviceAccounts/sa-2@my-project.s3ns-system.iam.gserviceaccount.com",
          "projectId": "my-project",
          "uniqueId": "234567890123456789012",
          "email": "sa-2@my-project.s3ns-system.iam.gserviceaccount.com",
          "description": "My second service account",
          "displayName": "Service account 2",
          "etag": "UkQpTwBVUsL=",
          "oauth2ClientId": "876543210987654321098"
        }
      ]
    }
    

Modifica un account di servizio

Il nome visualizzato (nome descrittivo) e la descrizione di un account di servizio vengono comunemente utilizzati per acquisire informazioni aggiuntive sulaccount di serviziot, ad esempio lo scopo deaccount di serviziont o una persona di contatto per l'account.

Console

  1. Nella Trusted Cloud console, vai alla pagina Service account.

    Vai ad Account di servizio

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email del account di servizio che vuoi rinominare.

  4. Inserisci il nuovo nome nella casella Nome, quindi fai clic su Salva.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Esegui il comando gcloud iam service-accounts update per aggiornare un account di servizio.

    Comando:

    gcloud iam service-accounts update 
    SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
    --description="UPDATED_SA_DESCRIPTION"
    --display-name="UPDATED_DISPLAY_NAME"

    L'output è il account di servizio rinominato:

    description: UPDATED_SA_DESCRIPTION
    displayName: UPDATED_DISPLAY_NAME
    name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
    
  3. C++

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM C++.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name, std::string const& display_name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::PatchServiceAccountRequest request;
      google::iam::admin::v1::ServiceAccount service_account;
      service_account.set_name(name);
      service_account.set_display_name(display_name);
      google::protobuf::FieldMask update_mask;
      *update_mask.add_paths() = "display_name";
      *request.mutable_service_account() = service_account;
      *request.mutable_update_mask() = update_mask;
      auto response = client.PatchServiceAccount(request);
      if (!response) throw std::move(response).status();
      std::cout << "ServiceAccount successfully updated: "
                << response->DebugString() << "\n";
    }

    C#

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM C#.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class ServiceAccounts
    {
        public static ServiceAccount RenameServiceAccount(string email,
            string newDisplayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            // First, get a ServiceAccount using List() or Get().
            string resource = "projects/-/serviceAccounts/" + email;
            var serviceAccount = service.Projects.ServiceAccounts.Get(resource)
                .Execute();
            // Then you can update the display name.
            serviceAccount.DisplayName = newDisplayName;
            serviceAccount = service.Projects.ServiceAccounts.Update(
                serviceAccount, resource).Execute();
            Console.WriteLine($"Updated display name for {serviceAccount.Email} " +
                "to: " + serviceAccount.DisplayName);
            return serviceAccount;
        }
    }
    

    Go

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Go.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // renameServiceAccount renames a service account.
    func renameServiceAccount(w io.Writer, email, newDisplayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	// First, get a ServiceAccount using List() or Get().
    	resource := "projects/-/serviceAccounts/" + email
    	serviceAccount, err := service.Projects.ServiceAccounts.Get(resource).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Get: %w", err)
    	}
    	// Then you can update the display name.
    	serviceAccount.DisplayName = newDisplayName
    	serviceAccount, err = service.Projects.ServiceAccounts.Update(resource, serviceAccount).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Update: %w", err)
    	}
    
    	fmt.Fprintf(w, "Updated service account: %v", serviceAccount.Email)
    	return serviceAccount, nil
    }
    

    Java

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Java.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.GetServiceAccountRequest;
    import com.google.iam.admin.v1.PatchServiceAccountRequest;
    import com.google.iam.admin.v1.ServiceAccount;
    import com.google.iam.admin.v1.ServiceAccountName;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    
    public class RenameServiceAccount {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        String projectId = "your-project-id";
        String serviceAccountName = "my-service-account-name";
        String displayName = "your-new-display-name";
    
        renameServiceAccount(projectId, serviceAccountName, displayName);
      }
    
      // Changes a service account's display name.
      public static ServiceAccount renameServiceAccount(String projectId, String serviceAccountName,
                                                        String displayName) throws IOException {
        // Construct the service account email.
        // You can modify the ".iam.gserviceaccount.com" to match the service account name in which
        // you want to delete the key.
        // See, https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=en#deleting
        String serviceAccountEmail = serviceAccountName + "@" + 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()) {
          // First, get a service account using getServiceAccount or listServiceAccounts
          GetServiceAccountRequest serviceAccountRequest = GetServiceAccountRequest.newBuilder()
                  .setName(ServiceAccountName.of(projectId, serviceAccountEmail).toString())
                  .build();
          ServiceAccount serviceAccount = iamClient.getServiceAccount(serviceAccountRequest);
    
          // You can patch only the `display_name` and `description` fields. You must use
          //  the `update_mask` field to specify which of these fields you want to patch.
          serviceAccount = serviceAccount.toBuilder().setDisplayName(displayName).build();
          PatchServiceAccountRequest patchServiceAccountRequest =
                  PatchServiceAccountRequest.newBuilder()
                          .setServiceAccount(serviceAccount)
                          .setUpdateMask(FieldMask.newBuilder().addPaths("display_name").build())
                          .build();
          serviceAccount = iamClient.patchServiceAccount(patchServiceAccountRequest);
    
          System.out.println(
                  "Updated display name for "
                          + serviceAccount.getName()
                          + " to: "
                          + serviceAccount.getDisplayName());
          return serviceAccount;
        }
      }
    }

    Python

    Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per saperne di più, consulta la documentazione di riferimento dell'API IAM Python.

    Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def rename_service_account(
        project_id: str, account: str, new_name: str
    ) -> types.ServiceAccount:
        """Renames service account display name.
    
        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.
        new_name: New display name of the service account.
        """
    
        iam_admin_client = iam_admin_v1.IAMClient()
    
        get_request = types.GetServiceAccountRequest()
        get_request.name = f"projects/{project_id}/serviceAccounts/{account}"
        service_account = iam_admin_client.get_service_account(request=get_request)
    
        service_account.display_name = new_name
    
        request = types.PatchServiceAccountRequest()
        request.service_account = service_account
        # You can patch only the `display_name` and `description` fields.
        # You must use the `update_mask` field to specify which of these fields
        # you want to patch.
        # To successfully set update mask you need to transform
        # snake_case field to camelCase.
        # e.g. `display_name` will become `displayName`
        request.update_mask = "displayName"
    
        updated_account = iam_admin_client.patch_service_account(request=request)
        return updated_account

    REST

    Il metodo serviceAccounts.patch aggiorna un account di servizio.

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

    • PROJECT_ID: il tuo ID progetto Trusted Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.
    • SA_ID: l'ID del account di servizio. Può trattarsi dell'indirizzo email del account di servizio nel formato SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com o dell'ID numerico univoco del service account.
    • SA_NAME: l'ID alfanumerico del account di servizio. Il nome deve essere compreso tra 6 e 30 caratteri e può contenere caratteri alfanumerici minuscoli e trattini.
    • Sostituisci almeno uno dei seguenti elementi:
      • UPDATED_DISPLAY_NAME: Un nuovo nome visualizzato per il service account.
      • UPDATED_DESCRIPTION: una nuova descrizione per il service account.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "serviceAccount": {
        "email": "SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com",
        "displayName": "UPDATED_DISPLAY_NAME",
        "description": "UPDATED_DESCRIPTION"
      },
      "updateMask": "displayName,description"
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com",
      "displayName": "My updated service account",
      "description": "An updated description of my service account"
    }
    

Passaggi successivi