Dienstkonten erstellen und verwalten

Auf dieser Seite erfahren Sie, wie Sie Dienstkonten mit der Cloud Identity and Access Management API, der Google Cloud Platform ID und dem Befehlszeilentool gcloud erstellen und verwalten.

Wenn Sie ein neues Cloud-Projekt erstellen, werden von der Google Cloud Platform (GCP) automatisch ein Compute Engine-Dienstkonto und ein App Engine-Dienstkonto unter dem Projekt erstellt. Sie können bis zu 98 weitere Dienstkonten dem Projekt hinzufügen, um den Zugriff auf die Ressourcen zu steuern.

Vorbereitung

Erforderliche Berechtigung

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

Primitive Cloud IAM-Rollen enthalten auch Berechtigungen zum Verwalten von Dienstkonten. Wir empfehlen jedoch, eine der oben genannten vordefinierten Rollen zu gewähren, um nicht benötigten Zugriff auf andere GCP-Ressourcen auszuschließen. 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 anzugebenden Dienstkontos, z. B. my-service-account. Dies ist eine eindeutige Kennung, die während der Erstellung in der E-Mail-Adresse des Dienstkontos bereitgestellt wird, wie zum Beispiel my-service-account@project-id.iam.gserviceaccount.com. Sie wird auch verwendet, um das Dienstkonto mit anderen APIs zu aktualisieren. Nach ihrer Erstellung kann sie nicht 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 Platform-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 GCP Console.

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt auswählen.

  3. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

  4. Klicken Sie auf Dienstkonto erstellen.

  5. 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 beta iam service-accounts create aus, um ein Dienstkonto zu erstellen.

Befehl:

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

Die Ausgabe ist das Dienstkonto:

Created service account [SA-NAME].

REST API

Rufen Sie die Methode 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 unter Cloud IAM-Schnellstart 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 unter Cloud IAM-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
	"context"
	"fmt"
	"io"

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

// createServiceAccount creates a service account.
func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %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-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

public ServiceAccount createServiceAccount(String projectId, String name, String displayName)
    throws IOException {

  ServiceAccount serviceAccount = new ServiceAccount();
  serviceAccount.setDisplayName(displayName);
  CreateServiceAccountRequest request = new CreateServiceAccountRequest();
  request.setAccountId(name);
  request.setServiceAccount(serviceAccount);

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

  System.out.println("Created service account: " + serviceAccount.getEmail());
  return serviceAccount;
}

Python

Für dieses Beispiel müssen Sie Python wie unter Cloud IAM-Schnellstart 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 haben Sie die Möglichkeit, ListServiceAccountsResponse.next_page_token in einer nachfolgenden Anfrage für die Auflistung der übrigen Dienstkonten zu nutzen.

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 Dienstkontonutzer (roles/iam.serviceAccountUser) oder die einfache Rolle Betrachter (roles/viewer).

Console

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

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt 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 unter Cloud IAM-Schnellstart 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 unter Cloud IAM-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
	"context"
	"fmt"
	"io"

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

// listServiceAccounts lists a project's service accounts.
func listServiceAccounts(w io.Writer, projectID string) ([]*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %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-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

public List<ServiceAccount> listServiceAccounts(String projectId) throws IOException {

  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();
  }
  return serviceAccounts;
}

Python

Für dieses Beispiel müssen Sie Python wie unter Cloud IAM-Schnellstart 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 umbenennen

Der Anzeigename eines Dienstkontos wird häufig verwendet, um zusätzliche Informationen zum Dienstkonto zu erfassen, z. B. den Zweck des Dienstkontos oder eine Kontaktperson für das Konto.

Für das Umbenennen 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 GCP Console.

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt auswählen.
  3. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.
  4. Suchen Sie nach dem Dienstkonto, das Sie umbenennen möchten, klicken Sie auf die Schaltfläche Mehr more_vert in dieser Zeile und anschließend auf Bearbeiten.
  5. Geben Sie den neuen Namen ein und klicken Sie auf Speichern.

GCLOUD-BEFEHL

Zum Umbenennen eines Dienstkontos können Sie den Befehl gcloud beta iam service-accounts update verwenden.

Befehl:

gcloud beta 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 unter Cloud IAM-Schnellstart 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 unter Cloud IAM-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
	"context"
	"fmt"
	"io"

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

// renameServiceAccount renames a service account.
func renameServiceAccount(w io.Writer, email, newDisplayName string) (*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %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-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

public ServiceAccount renameServiceAccount(String email, String newDisplayName)
    throws IOException {

  // First, get a service account using List() or Get()
  ServiceAccount serviceAccount =
      service.projects().serviceAccounts().get("projects/-/serviceAccounts/" + email).execute();

  // Then you can update the display name
  serviceAccount.setDisplayName(newDisplayName);
  service.projects().serviceAccounts().update(serviceAccount.getName(), serviceAccount).execute();

  System.out.println(
      "Updated display name for " + serviceAccount.getName() + " to: " + newDisplayName);
  return serviceAccount;
}

Python

Für dieses Beispiel müssen Sie Python wie unter Cloud IAM-Schnellstart 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

Wie beim Löschen eines Dienstkontos haben Anwendungen nach der Deaktivierung eines Dienstkontos keinen Zugriff mehr auf GCP-Ressourcen über dieses Dienstkonto. 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.

Zur Deaktivierung eines Dienstkontos benötigen Nutzer mindestens die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) oder die einfache Rolle "Bearbeiter" (roles/editor).

GCLOUD-BEFEHL

Zur Deaktivierung eines Dienstkontos können Sie den Befehl gcloud alpha iam service-accounts disable verwenden.

Befehl:

gcloud alpha 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

Dienstkonto aktivieren

Nach der Aktivierung eines deaktivierten Dienstkontos erhalten Anwendungen über dieses Dienstkonto wieder Zugriff auf GCP-Ressourcen.

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

Zur Aktivierung eines Dienstkontos benötigen Nutzer mindestens die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) oder die einfache Rolle "Bearbeiter" (roles/editor).

GCLOUD-BEFEHL

Zur Aktivierung eines Dienstkontos können Sie den Befehl gcloud alpha iam service-accounts enable verwenden.

Befehl:

gcloud alpha 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

Dienstkonto löschen

Wenn Sie ein Dienstkonto löschen, haben die Anwendungen über dieses Dienstkonto keinen Zugriff mehr auf Google Cloud Platform-Ressourcen. Wenn Sie die standardmäßigen App Engine- und Compute Engine-Dienstkonten löschen, können die Instanzen nicht mehr auf Ressourcen im Projekt zugreifen.

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 GCP Console.

    Seite "Dienstkonten" öffnen

  2. Klicken Sie auf Projekt auswählen.

  3. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

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

GCLOUD-BEFEHL

Zum Löschen eines Dienstkontos können Sie den Befehl gcloud iam service-accounts delete verwenden.

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 unter Cloud IAM-Schnellstart 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 unter Cloud IAM-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

import (
	"context"
	"fmt"
	"io"

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

// deleteServiceAccount deletes a service account.
func deleteServiceAccount(w io.Writer, email string) error {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return fmt.Errorf("iam.New: %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-Schnellstart zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

public void deleteServiceAccount(String email) throws IOException {

  service.projects().serviceAccounts().delete("projects/-/serviceAccounts/" + email).execute();

  System.out.println("Deleted service account: " + email);
}

Python

Für dieses Beispiel müssen Sie Python wie unter Cloud IAM-Schnellstart 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

Ein gelöschtes Dienstkonto kann unter Umständen mit dem Befehl undelete wiederhergestellt werden.

Zum Wiederherstellen eines Dienstkontos muss dem Aufrufer die Berechtigung iam.serviceAccounts.undelete für das gelöschte Dienstkonto erteilt werden. Diese Berechtigung ist in der einfachen Rolle "Eigentümer" (roles/owner) enthalten.

Die eindeutige ID des gelöschten Dienstkontos muss bei Verwendung des Befehls "Undelete" angegeben werden. Eindeutige IDs sind eine 21-stellige Nummer, z. B. 103271949540120710052. Wenn Sie die eindeutige ID für das gelöschte Dienstkonto nicht kennen, finden Sie sie im Aktivitäts-Log für den entsprechenden Löschvorgang.

Unter den folgenden Bedingungen können Sie ein gelöschtes Dienstkonto nicht wiederherstellen:

  • Gelöschte Dienstkonten werden nach 30 Tagen automatisch aus dem System entfernt und können danach nicht mehr wiederhergestellt werden, auch nicht mit einer Kundensupportanfrage.
  • Wenn die E-Mail-Adresse eines gelöschten Dienstkontos von einem aktiven (nicht gelöschten) Dienstkonto verwendet wird, kann das gelöschte Dienstkonto nicht wiederhergestellt werden. Wenn Sie beispielsweise ein Konto mit dem Namen foo@project-id.iam.gserviceaccount.com und der einmaligen ID 103271949540120710052 und später ein neues Konto mit dem gleichen Namen foo@project-id.iam.gserviceaccount.com jedoch mit der einmaligen ID 103271949540120710329 löschen, kann das erste Dienstkonto nicht wiederhergestellt werden. Stattdessen können Sie das neuere Dienstkonto löschen und anschließend den Befehl "undelete" ausführen, um dieses Problem zu umgehen.

REST API

Verwenden Sie die Methode serviceAccounts.undelete().

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

Es muss ein REST-Aufruf ausgegeben werden, um das Konto wiederherzustellen. Dies kann mit curl erfolgen, zum Beispiel so, wenn die eindeutige ID des gelöschten Dienstkontos 103271949540120710052 lautet:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-length: 0" "https://iam.googleapis.com/v1/projects/-/serviceAccounts/103271949540120710052:undelete"

Eine erfolgreiche Wiederherstellung führt zur Ausgabe eines Antwortcodes 200 mit Details zum wiederhergestellten Dienstkonto.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud IAM-Dokumentation