Dienstkonten erstellen und verwalten

Auf dieser Seite wird erläutert, wie Sie Dienstkonten mit der Cloud Identity and Access Management API, der Google Cloud Console und dem gcloud-Befehlszeilentool erstellen und verwalten.

Wenn Sie ein neues Cloud-Projekt anlegen, erstellt Google Cloud automatisch ein Compute Engine- und ein App Engine-Dienstkonto unter diesem Projekt. Sie können dem Projekt bis zu 98 weitere Dienstkonten hinzufügen, um den Zugriff auf die Ressourcen zu steuern.

Hinweise

Erforderliche Berechtigungen

Gewähren Sie eine der folgenden Rollen, um zuzulassen, dass ein Nutzer Dienstkonten verwalten kann:

  • Dienstkontonutzer (roles/iam.serviceAccountUser): Gewährt Berechtigungen zum Abrufen, Auflisten oder Übernehmen der Identität eines Dienstkontos.
  • Dienstkontoadministrator (roles/iam.serviceAccountAdmin): Beinhaltet die Berechtigungen eines Dienstkontonutzers und gewährt außerdem Berechtigungen zum Erstellen, Aktualisieren, Löschen, Festlegen oder Abrufen der Cloud IAM-Richtlinie für ein Dienstkonto.

Einfache Cloud IAM-Rollen enthalten auch Berechtigungen zum Verwalten von Dienstkonten. Wir empfehlen jedoch, eine der oben genannten vordefinierten Rollen zu gewähren, um unnötigen Zugriff auf andere Google Cloud-Ressourcen zu verhindern. Weitere Informationen zu diesen Rollen finden Sie in der Liste der Dienstkontenrollen.

Dienstkonto erstellen

Das Erstellen eines Dienstkontos ist mit dem Hinzufügen eines Mitglieds zu Ihrem Projekt vergleichbar. Das Dienstkonto gehört jedoch eher zu Ihren Anwendungen als zu einem bestimmten Endnutzer.

In den folgenden Beispielen ist [SA-NAME] der Name des von Ihnen bereitgestellten Dienstkontos, z. B. my-service-account. Dies ist eine eindeutige Kennung, die in der E-Mail-Adresse des Dienstkontos angezeigt wird, das während der Erstellung bereitgestellt wird, z. B. my-service-account@project-id.iam.gserviceaccount.com. Sie können sie auch zur Aktualisierung des Dienstkontos mit anderen APIs verwenden. Nachdem sie erstellt wurde, kann sie nicht mehr geändert werden.

Geben Sie außerdem die folgenden Werte an:

  • [SA-DESCRIPTION] ist eine optionale Beschreibung für das Dienstkonto
  • [SA-DISPLAY-NAME] ist der Anzeigename des Dienstkontos
  • [PROJECT-ID] ist die ID des Google Cloud-Projekts

Für das Erstellen eines Dienstkontos benötigen Nutzer mindestens die Rolle Dienstkontoadministrator (roles/iam.serviceAccountAdmin) oder die einfache Rolle Bearbeiter (roles/editor).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt auswählen, wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

  3. Klicken Sie auf Dienstkonto erstellen.

  4. Geben Sie einen Dienstkontonamen (Anzeigenamen) und eine optionale Beschreibung ein, wählen Sie eine Rolle aus, die Sie dem Dienstkonto zuweisen möchten, und klicken Sie dann auf Speichern.

gcloud-Befehl

Führen Sie den Befehl gcloud iam service-accounts create aus, um ein Dienstkonto zu erstellen.

Befehl:

gcloud iam service-accounts create [SA-NAME] \
        --description "[SA-DESCRIPTION]" \
        --display-name "[SA-DISPLAY-NAME]"
    

Die Ausgabe enthält den Namen des Dienstkontos:

Created service account [SA-NAME].
    

REST API

Rufen Sie serviceAccounts.create() auf, um ein Dienstkonto zu erstellen.

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts
    

Der Text der Anfrage sollte die Attribute für das Dienstkonto enthalten.

{
        "accountId": "[SA-NAME]",
        "serviceAccount": {
            "description": "[SA-DESCRIPTION]",
            "displayName": "[SA-DISPLAY-NAME]"
        }
    }
    

Antwort:

{
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "113948692397867021414",
        "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION",
        "displayName": "SA-DISPLAY-NAME",
        "etag": "BwUp3rVlzes=",
        "oauth2ClientId": "117249000288840666939"
    }
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    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 CreateServiceAccount(string projectId,
            string name, string displayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            var request = new CreateServiceAccountRequest
            {
                AccountId = name,
                ServiceAccount = new ServiceAccount
                {
                    DisplayName = displayName
                }
            };
            var serviceAccount = service.Projects.ServiceAccounts.Create(
                request, "projects/" + projectId).Execute();
            Console.WriteLine("Created service account: " + serviceAccount.Email);
            return serviceAccount;
        }
    }

Go

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // createServiceAccount creates a service account.
    func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.CreateServiceAccountRequest{
    		AccountId: name,
    		ServiceAccount: &iam.ServiceAccount{
    			DisplayName: displayName,
    		},
    	}
    	account, err := service.Projects.ServiceAccounts.Create("projects/"+projectID, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Create: %v", err)
    	}
    	fmt.Fprintf(w, "Created service account: %v", account)
    	return account, nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.CreateServiceAccountRequest;
    import com.google.api.services.iam.v1.model.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class CreateServiceAccount {

      // Creates a service account.
      public static void createServiceAccount(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          ServiceAccount serviceAccount = new ServiceAccount();
          serviceAccount.setDisplayName("your-display-name");
          CreateServiceAccountRequest request = new CreateServiceAccountRequest();
          request.setAccountId("your-service-account-name");
          request.setServiceAccount(serviceAccount);

          serviceAccount =
              service.projects().serviceAccounts().create("projects/" + projectId, request).execute();

          System.out.println("Created service account: " + serviceAccount.getEmail());
        } catch (IOException e) {
          System.out.println("Unable to create service account: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def create_service_account(project_id, name, display_name):
        """Creates a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        my_service_account = service.projects().serviceAccounts().create(
            name='projects/' + project_id,
            body={
                'accountId': name,
                'serviceAccount': {
                    'displayName': display_name
                }
            }).execute()

        print('Created service account: ' + my_service_account['email'])
        return my_service_account

Nachdem Sie ein Dienstkonto erstellt haben, weisen Sie dem Dienstkonto mindestens eine Rolle zu, damit es Aufgaben für Sie erfüllen kann.

Dienstkonten auflisten

Bei der Auflistung von Dienstkonten können Sie Parameter angeben, um die Anzahl der Dienstkonten zu beschränken, die in der Antwort enthalten sind. Anschließend können Sie ListServiceAccountsResponse.next_page_token in einer nachfolgenden Anfrage verwenden, um die verbleibenden Dienstkonten aufzulisten.

Verwenden Sie diese Methode, um Dienstkonten und Schlüssel zu überprüfen oder um benutzerdefinierte Tools für die Verwaltung von Dienstkonten zu erstellen.

Für das Auflisten von Dienstkonten benötigen Nutzer mindestens die Rolle Dienstkontoinhaber (roles/iam.serviceAccountUser) oder die einfache Rolle Betrachter (roles/viewer).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Zur Seite "Dienstkonten"

  2. Klicken Sie auf Auswählen.

  3. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen. Alle Dienstkonten werden auf der Seite "Dienstkonten" aufgelistet.

gcloud-Befehl

Zum Auflisten aller Dienstkonten in einem Projekt können Sie den Befehl gcloud iam service-accounts list verwenden.

Befehl:

gcloud iam service-accounts list
    

Die Ausgabe ist die Liste aller Dienstkonten im Projekt:

NAME                    EMAIL
    SA-DISPLAY-NAME-1       SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com
    SA-DISPLAY-NAME-2       SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com
    

REST API

Rufen Sie die Methode serviceAccounts.list() auf.

Anfrage:

GET https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts
    

Antwort:

{
        "accounts": [
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
            "projectId": "PROJECT-ID",
            "uniqueId": "108979773878059201436",
            "email": "SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
            "description": "SA-DESCRIPTION-1",
            "displayName": "SA-DISPLAY-NAME-1",
            "etag": "BwUpTsLVUkQ=",
            "oauth2ClientId": "102240834887833340852"
        },
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
            "projectId": "PROJECT-ID",
            "uniqueId": "108979773878059201436",
            "email": "SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
            "description": "SA-DESCRIPTION-2",
            "displayName": "SA-DISPLAY-NAME-2",
            "etag": "BwUpTsLVUkQ=",
            "oauth2ClientId": "102240834887833340852"
        }]
    }
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    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

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

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: %v", err)
    	}

    	response, err := service.Projects.ServiceAccounts.List("projects/" + projectID).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.List: %v", err)
    	}
    	for _, account := range response.Accounts {
    		fmt.Fprintf(w, "Listing service account: %v\n", account.Name)
    	}
    	return response.Accounts, nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.ListServiceAccountsResponse;
    import com.google.api.services.iam.v1.model.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;

    public class ListServiceAccounts {

      // Lists all service accounts for the current project.
      public static void listServiceAccounts(String projectId) {
        // String projectId = "my-project-id"

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          ListServiceAccountsResponse response =
              service.projects().serviceAccounts().list("projects/" + projectId).execute();
          List<ServiceAccount> serviceAccounts = response.getAccounts();

          for (ServiceAccount account : serviceAccounts) {
            System.out.println("Name: " + account.getName());
            System.out.println("Display Name: " + account.getDisplayName());
            System.out.println("Email: " + account.getEmail());
            System.out.println();
          }
        } catch (IOException e) {
          System.out.println("Unable to list service accounts: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def list_service_accounts(project_id):
        """Lists all service accounts for the current project."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        service_accounts = service.projects().serviceAccounts().list(
            name='projects/' + project_id).execute()

        for account in service_accounts['accounts']:
            print('Name: ' + account['name'])
            print('Email: ' + account['email'])
            print(' ')
        return service_accounts

Dienstkonto wird aktualisiert

Der Anzeigename (Anzeigename) und die Beschreibung eines Dienstkontos werden häufig verwendet, um zusätzliche Informationen über das Dienstkonto zu erfassen, z. B. den Zweck des Dienstkontos oder eine Kontaktperson für das Konto.

Um den Namen oder die Beschreibung eines Dienstkontos zu aktualisieren, muss dem Nutzer mindestens die Option erteilt werden Dienstkonto-Administrator Rolle (roles/iam.serviceAccountAdmin) oder der Editor primitive Rolle (roles/editor).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt auswählen, wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

  3. Suchen Sie nach dem Dienstkonto, das Sie umbenennen möchten, klicken Sie auf die Schaltfläche in dieser Zeile und anschließend auf Bearbeiten.

  4. Geben Sie den neuen Namen ein und klicken Sie auf Speichern.

gcloud-Befehl

Führen Sie den Befehl gcloud iam service-accounts update aus, um ein Dienstkonto zu aktualisieren.

Befehl:

gcloud iam service-accounts update \
        [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com \
        --description "[UPDATED-SA-DESCRIPTION]" \
        --display-name "[UPDATED-DISPLAY-NAME]"
    

Die Ausgabe ist das umbenannte Dienstkonto:

description: Updated description
    displayName: Updated display name
    name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

REST API

Verwenden Sie die Methode serviceAccounts.patch().

Anfrage:

PATCH https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Der Anfragetext muss die E-Mail-Adresse des Dienstkontos und den neuen Anzeigenamen oder die neue Beschreibung enthalten.

{
        "serviceAccount": {
            "email": "[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com",
            "displayName": "[UPDATED-DISPLAY-NAME]",
            "description": "[UPDATED-DESCRIPTION]"
        },
        "updateMask": "displayName,description"
    }
    

Antwort:

{
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "107522985251862639552",
        "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION",
        "displayName": "Updated display name",
        "etag": "BwUqLK4bL9U=",
        "oauth2ClientId": "105236325228757713905"
    }
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    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

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

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: %v", 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: %v", 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: %v", err)
    	}

    	fmt.Fprintf(w, "Updated service account: %v", serviceAccount.Email)
    	return serviceAccount, nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class RenameServiceAccount {

      // Changes a service account's display name.
      public static void renameServiceAccount(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          // First, get a service account using List() or Get()
          ServiceAccount serviceAccount =
              service
                  .projects()
                  .serviceAccounts()
                  .get(
                      "projects/-/serviceAccounts/"
                          + "your-service-account-name@"
                          + projectId
                          + ".iam.gserviceaccount.com")
                  .execute();

          // Then you can update the display name
          serviceAccount.setDisplayName("your-new-display-name");
          serviceAccount =
              service
                  .projects()
                  .serviceAccounts()
                  .update(serviceAccount.getName(), serviceAccount)
                  .execute();

          System.out.println(
              "Updated display name for "
                  + serviceAccount.getName()
                  + " to: "
                  + serviceAccount.getDisplayName());
        } catch (IOException e) {
          System.out.println("Unable to rename service account: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def rename_service_account(email, new_display_name):
        """Changes a service account's display name."""

        # First, get a service account using List() or Get()
        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        resource = 'projects/-/serviceAccounts/' + email

        my_service_account = service.projects().serviceAccounts().get(
            name=resource).execute()

        # Then you can update the display name
        my_service_account['displayName'] = new_display_name
        my_service_account = service.projects().serviceAccounts().update(
            name=resource, body=my_service_account).execute()

        print('Updated display name for {} to: {}'.format(
            my_service_account['email'], my_service_account['displayName']))
        return my_service_account

Dienstkonto deaktivieren

Ähnlich wie beim Löschen eines Dienstkontos haben Anwendungen beim Deaktivieren eines Dienstkontos darüber keinen Zugriff mehr auf Google Cloud-Ressourcen. Wenn Sie die standardmäßigen App Engine- und Compute Engine-Dienstkonten deaktivieren, können die Instanzen nicht mehr auf Ressourcen im Projekt zugreifen. Wenn Sie versuchen, ein bereits deaktiviertes Dienstkonto zu deaktivieren, hat dies keine Auswirkungen.

Im Gegensatz zum Löschen eines Dienstkontos können deaktivierte Dienstkonten bei Bedarf problemlos wieder aktiviert werden. Es wird empfohlen, ein Dienstkonto vor dem Löschen zu deaktivieren, um sicherzustellen, dass keine kritischen Anwendungen das Dienstkonto verwenden.

Für das Deaktivieren eines Dienstkontos benötigen Nutzer mindestens die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) oder die einfache Rolle "Bearbeiter" (roles/editor).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Zur Seite "Dienstkonten"

  2. Klicken Sie auf Projekt auswählen, wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

  3. Klicken Sie auf den Namen des Dienstkontos, das Sie deaktivieren möchten.

  4. Klicken Sie unter Dienstkontostatus auf Dienstkonto deaktivieren und dann auf Deaktivieren, um die Änderung zu bestätigen.

gcloud-Befehl

Führen Sie den Befehl gcloud iam service-accounts disableaus, um ein Dienstkonto zu deaktivieren.

Befehl:

gcloud iam service-accounts disable [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Ausgabe:

Disabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

REST API

Verwenden Sie die Methode serviceAccounts.disable().

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com:disable
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;

    public partial class ServiceAccounts
    {
        public static void DisableServiceAccount(string email)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            var request = new DisableServiceAccountRequest();

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Disable(request, resource).Execute();
            Console.WriteLine("Disabled service account: " + email);
        }
    }

Go

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // disableServiceAccount disables a service account.
    func disableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.DisableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Disable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Disable: %v", err)
    	}
    	fmt.Fprintf(w, "Disabled service account: %v", email)
    	return nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.DisableServiceAccountRequest;

    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class DisableServiceAccount {

      // Disables a service account.
      public static void disableServiceAccount(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          DisableServiceAccountRequest request = new DisableServiceAccountRequest();
          service
              .projects()
              .serviceAccounts()
              .disable(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com",
                  request)
              .execute();

          System.out.println(
              "Disabled service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to disable service account: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def disable_service_account(email):
        """Disables a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        service.projects().serviceAccounts().disable(
            name='projects/-/serviceAccounts/' + email).execute()

        print("Disabled service account :" + email)

Dienstkonto aktivieren

Nach der Aktivierung eines deaktivierten Dienstkontos erhalten Anwendungen darüber wieder Zugriff auf Google Cloud-Ressourcen.

Sie können jederzeit ein deaktiviertes Dienstkonto wieder aktivieren. Wenn Sie versuchen, ein bereits aktiviertes Dienstkonto zu aktivieren, hat dies keine Auswirkungen.

Für das Aktivieren eines Dienstkontos benötigen Nutzer mindestens die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) oder die einfache Rolle "Bearbeiter" (roles/editor).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Zur Seite "Dienstkonten"

  2. Klicken Sie auf Projekt auswählen, wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

  3. Klicken Sie auf den Namen des Dienstkontos, das Sie aktivieren möchten.

  4. Klicken Sie unter Dienstkontostatus auf Dienstkonto aktivieren und dann auf Aktivieren, um die Änderung zu bestätigen.

gcloud-Befehl

Führen Sie den Befehl gcloud iam service-accounts enable aus, um ein Dienstkonto zu aktivieren.

Befehl:

gcloud iam service-accounts enable [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Ausgabe:

Enabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

REST API

Verwenden Sie die Methode serviceAccounts.enable().

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com:enable
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;

    public partial class ServiceAccounts
    {
        public static void EnableServiceAccount(string email)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            var request = new EnableServiceAccountRequest();

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Enable(request, resource).Execute();
            Console.WriteLine("Enabled service account: " + email);
        }
    }

Go

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // enableServiceAccount enables a service account.
    func enableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.EnableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Enable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Enable: %v", err)
    	}
    	fmt.Fprintf(w, "Enabled service account: %v", email)
    	return nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.EnableServiceAccountRequest;

    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class EnableServiceAccount {

      // Enables a service account.
      public static void enableServiceAccount(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          EnableServiceAccountRequest request = new EnableServiceAccountRequest();
          service
              .projects()
              .serviceAccounts()
              .enable(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com",
                  request)
              .execute();

          System.out.println(
              "Enabled service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to enable service account: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def enable_service_account(email):
        """Enables a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        service.projects().serviceAccounts().enable(
            name='projects/-/serviceAccounts/' + email).execute()

        print("Disabled service account :" + email)

Dienstkonto löschen

Wenn Sie ein Dienstkonto löschen, haben Anwendungen darüber keinen Zugriff mehr auf Google Cloud-Ressourcen. Wenn Sie die App Engine- und Compute Engine-Dienstkonten löschen, haben die Instanzen keinen Zugriff mehr auf Ressourcen in dem Projekt.

Seien Sie bei Löschvorgängen vorsichtig. Achten Sie darauf, dass ein Dienstkonto nicht mehr von kritischen Anwendungen verwendet wird, bevor Sie es löschen. Wenn Sie nicht sicher sind, ob ein Dienstkonto aktuell verwendet wird, sollten Sie das Dienstkonto deaktivieren, bevor Sie es löschen. Deaktivierte Dienstkonten können problemlos wieder aktiviert werden, wenn sie noch verwendet werden.

Wenn ein Dienstkonto gelöscht wird, werden seine Rollenbindungen nicht sofort entfernt. Sie werden spätestens nach 60 Tagen automatisch aus dem System gelöscht.

Für das Löschen eines Dienstkontos benötigen Nutzer mindestens die Rolle Dienstkontoadministrator (roles/iam.serviceAccountAdmin) oder die einfache Rolle Bearbeiter (roles/editor).

Console

  1. Öffnen Sie die Seite Dienstkonten in der Cloud Console.

    Zur Seite "Dienstkonten"

  2. Klicken Sie auf Projekt auswählen, wählen Sie ein Projekt aus und klicken Sie auf Öffnen.

  3. Wählen Sie die Dienstkonten aus, die Sie löschen möchten, und klicken Sie dann auf Löschen .

gcloud-Befehl

Führen Sie den Befehl gcloud iam service-accounts delete aus, um ein Dienstkonto zu löschen.

Befehl:

gcloud iam service-accounts delete \
      [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Ausgabe:

Deleted service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

REST API

Verwenden Sie die Methode serviceAccounts.delete().

DELETE https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;

    public partial class ServiceAccounts
    {
        public static void DeleteServiceAccount(string email)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Delete(resource).Execute();
            Console.WriteLine("Deleted service account: " + email);
        }
    }

Go

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // deleteServiceAccount deletes a service account.
    func deleteServiceAccount(w io.Writer, email string) error {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	_, err = service.Projects.ServiceAccounts.Delete("projects/-/serviceAccounts/" + email).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Delete: %v", err)
    	}
    	fmt.Fprintf(w, "Deleted service account: %v", email)
    	return nil
    }
    

Java

Für dieses Beispiel müssen Sie Java wie unter Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class DeleteServiceAccount {

      // Deletes a service account.
      public static void deleteServiceAccount(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          service
              .projects()
              .serviceAccounts()
              .delete(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com")
              .execute();

          System.out.println(
              "Deleted service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to delete service account: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-accounts")
                .build();
        return service;
      }
    }

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def delete_service_account(email):
        """Deletes a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        service.projects().serviceAccounts().delete(
            name='projects/-/serviceAccounts/' + email).execute()

        print('Deleted service account: ' + email)

Sie sollten kein neues Dienstkonto erstellen, das denselben Namen hat wie das gelöschte Dienstkonto. Das kann zu unerwartetem Verhalten führen. Weitere Informationen finden Sie unter Dienstkonten löschen und neu erstellen.

Dienstkonto wiederherstellen

In einigen Fällen können Sie mit dem Befehl undelete ein gelöschtes Dienstkonto wiederherstellen. Sie können ein gelöschtes Dienstkonto wiederherstellen, wenn es die folgenden Kriterien erfüllt:

  • Das Dienstkonto wurde vor weniger als 30 Tagen gelöscht.

    Nach 30 Tagen entfernt Cloud IAM das Dienstkonto endgültig. Google Cloud kann das Dienstkonto nicht wiederherstellen, wenn es endgültig entfernt wurde, auch wenn Sie eine Supportanfrage stellen.

  • Es ist kein Dienstkonto mit dem gleichen Namen wie das gelöschte Dienstkonto vorhanden.

    Angenommen, Sie löschen versehentlich das Dienstkonto my-service-account@project-id.iam.gserviceaccount.com. Sie benötigen weiterhin ein Dienstkonto mit diesem Namen, also erstellen Sie ein neues Dienstkonto, das ebenfalls den Namen my-service-account@project-id.iam.gserviceaccount.com hat.

    Das neue Dienstkonto übernimmt nicht die Berechtigungen des gelöschten Dienstkontos. Tatsächlich ist es völlig unabhängig vom gelöschten Dienstkonto. Sie können das ursprüngliche Dienstkonto jedoch nicht wiederherstellen, da das neue Dienstkonto denselben Namen hat.

    Löschen Sie das neue Dienstkonto und versuchen Sie dann, das ursprüngliche Dienstkonto wiederherzustellen, um dieses Problem zu beheben.

Numerische ID des Dienstkontos ermitteln

Wenn Sie ein Dienstkonto wiederherstellen, müssen Sie seine numerische ID angeben. Die numerische ID ist eine 21-stellige Zahl, z. B. 123456789012345678901, die das Dienstkonto eindeutig identifiziert. Wenn Sie beispielsweise ein Dienstkonto löschen und dann ein neues Dienstkonto mit dem gleichen Namen erstellen, haben das ursprüngliche Dienstkonto und das neue Dienstkonto unterschiedliche numerische IDs.

Um die numerische ID für ein gelöschtes Dienstkonto zu ermitteln, können Sie in Ihren Audit-Logs nach DeleteServiceAccount-Vorgängen suchen:

  1. Gehen Sie in der Cloud Console zur Seite Loganzeige.

    Zur Loganzeige

  2. Klicken Sie im Suchfeld oben auf der Seite auf den Erweiterungspfeil arrow_drop_down und wählen Sie dann In erweiterten Filter umwandeln aus.

  3. Geben Sie im Suchfeld die folgende Abfrage ein und ersetzen Sie dabei [SERVICE_ACCOUNT_NAME] durch den Namen Ihres Dienstkontos (z. B. my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
        resource.labels.email_id="[SERVICE_ACCOUNT_NAME]"
        "DeleteServiceAccount"
        
  4. Wenn das Dienstkonto vor mehr als einer Stunde gelöscht wurde, wählen Sie zuerst die Drop-down-Liste scheduleLetzte Stunde und dann einen längeren Zeitraum aus.

    Wenn das Dienstkonto vor mehr als 7 Tagen gelöscht wurde, wählen Sie Kein Limit aus.

  5. Klicken Sie auf Filter senden. Die Loganzeige zeigt die DeleteServiceAccount-Vorgänge an, die die Dienstkonten mit dem von Ihnen angegebenen Namen betrafen. Die numerische ID für jedes Dienstkonto wird neben dem Text DeleteServiceAccount angezeigt.

    Wenn die Suchergebnisse nur einen DeleteServiceAccount-Vorgang enthalten, notieren Sie sich die numerische ID. Verwenden Sie die numerische ID, um das Dienstkonto wiederherzustellen.

    Wenn es mehr als ein Suchergebnis gibt, klicken Sie neben einem Suchergebnis auf den Erweiterungspfeil arrow_right. Prüfen Sie die Details des Logeintrags und legen Sie fest, ob im Logeintrag der Vorgang angezeigt wird, den Sie rückgängig machen möchten. Wiederholen Sie diesen Vorgang, bis Sie den richtigen Logeintrag gefunden haben, und notieren Sie sich die numerische ID in diesem Eintrag.

Dienstkonto mit numerischer ID wiederherstellen

Wenn Sie die numerische ID für das gelöschte Dienstkonto gefunden haben, können Sie versuchen, das Dienstkonto wiederherzustellen.

gcloud-Befehl

Führen Sie den Befehl gcloud beta iam service-accounts undelete aus, um ein Dienstkonto wiederherzustellen.

Befehl:

gcloud beta iam service-accounts undelete [ACCOUNT_ID]
    

Ausgabe:

restoredAccount:
      email: SA-NAME@PROJECT-ID.iam.gserviceaccount.com
      etag: BwWWE7zpApg=
      name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com
      oauth2ClientId: '123456789012345678901'
      projectId: PROJECT-ID
      uniqueId: '[ACCOUNT-ID]'
    

REST API

Verwenden Sie die Methode serviceAccounts.undelete(). Ersetzen Sie [ACCOUNT_UNIQUE_ID] durch die numerische ID für das Dienstkonto.

POST https://iam.googleapis.com/v1/projects/-/serviceAccounts/[ACCOUNT_UNIQUE_ID]:undelete
    

Wenn das Konto wiederhergestellt werden kann, erhalten Sie einen 200 OK-Antwortcode mit Details zum wiederhergestellten Dienstkonto.

Weitere Informationen