Dienstkonten erstellen und verwalten

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

Standardmäßig können Sie jedem Projekt bis zu 100 Dienstkonten hinzufügen, die den Zugriff auf Ihre Ressourcen steuern. Sie haben auch die Möglichkeit, gegebenenfalls eine Kontingenterhöhung anzufordern. Weitere Informationen zu Kontingenten und Limits finden Sie in diesem Artikel.

Hinweis

Erforderliche Berechtigungen

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

  • Dienstkontonutzer (roles/iam.serviceAccountUser): Umfasst Berechtigungen zum Auflisten von Dienstkonten, Abrufen von Details zu einem Dienstkonto und zum Übernehmen der Identität eines Dienstkontos.
  • Dienstkontoadministrator (roles/iam.serviceAccountAdmin): Umfasst Berechtigungen zum Auflisten von Dienstkonten und zum Abrufen von Details zu einem Dienstkonto. Umfasst außerdem Berechtigungen zum Erstellen, Aktualisieren und Löschen von Dienstkonten sowie zum Anzeigen oder Ändern der IAM-Richtlinie für ein Dienstkonto.

Weitere Informationen zu diesen Rollen finden Sie unter Dienstkontenrollen.

Einfache IAM-Rollen enthalten auch Berechtigungen zum Verwalten von Dienstkonten. In einer Produktionsumgebung sollten Sie keine einfachen Rollen zuweisen, Sie können sie aber in einer Entwicklungs- oder Testumgebung gewähren.

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.

Wenn Sie ein Dienstkonto erstellen, müssen Sie eine alphanumerische ID angeben (in den Beispielen unten SA_NAME). Beispiel: my-service-account. Die ID muss zwischen 6 und 30 Zeichen lang sein und alphanumerische Zeichen in Kleinschreibung sowie Bindestriche enthalten. Nachdem Sie ein Dienstkonto erstellt haben, können Sie den Namen nicht mehr ändern.

Der Name des Dienstkontos ist eine eindeutige Kennung. Er wird in der E-Mail-Adresse des Dienstkontos angezeigt, die während der Erstellung bereitgestellt wird. Beispiel: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

Jedes Dienstkonto hat außerdem eine eindeutige numerische ID, die automatisch erstellt wird.

Außerdem geben Sie beim Erstellen eines Dienstkontos diese Informationen an:

  • SA_DESCRIPTION ist eine optionale Beschreibung für das Dienstkonto.
  • SA_DISPLAY_NAME ist ein Anzeigename für das Dienstkonto.
  • 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). In einer Produktionsumgebung sollten Sie keine einfachen Rollen zuweisen, Sie können sie aber in einer Entwicklungs- oder Testumgebung gewähren.

Nachdem Sie ein Dienstkonto erstellt haben, müssen Sie möglicherweise 60 Sekunden oder länger warten, bis Sie das Dienstkonto verwenden können. Wenn Sie versuchen, ein Dienstkonto direkt nach dem Erstellen zu verwenden und eine Fehlermeldung erhalten, können Sie die Anfrage mit exponentiellem Backoff wiederholen.

Console

  1. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“
  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie auf Dienstkonto erstellen.
  4. Geben Sie einen Dienstkontonamen ein, der in der Cloud Console angezeigt werden soll.

    Die Cloud Console generiert anhand dieses Namens eine Dienstkonto-ID. Bearbeiten Sie die ID bei Bedarf. Sie können die ID später nicht mehr ändern.

  5. Optional: Geben Sie eine Beschreibung für das Dienstkonto ein.
  6. Wenn Sie die Zugriffssteuerungen derzeit nicht festlegen möchten, klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

    Wenn Sie die Zugriffssteuerungen jetzt festlegen möchten, klicken Sie auf Erstellen und fahren Sie mit dem nächsten Schritt fort.

  7. Optional: Wählen Sie eine oder mehrere IAM-Rollen aus, die dem Dienstkonto für das Projekt zugewiesen werden sollen.
  8. Wenn Sie alle Rollen hinzugefügt haben, klicken Sie auf Weiter.
  9. Optional: Fügen Sie im Feld Rolle „Dienstkontonutzer“ Mitglieder hinzu, die die Identität des Dienstkontos annehmen können.
  10. Optional: Fügen Sie im Feld Rolle "Dienstkontoadministrator" Mitglieder hinzu, die das Dienstkonto verwalten können.
  11. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

gcloud

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_ID \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"

    Ersetzen Sie die folgenden Werte:

    • SERVICE_ACCOUNT_ID: Geben Sie die ID des Dienstkontos an.
    • DESCRIPTION: Optional. Geben Sie eine Beschreibung für das Dienstkonto ein.
    • DISPLAY_NAME: Geben Sie einen Dienstkontonamen ein, der in der Cloud Console angezeigt werden soll.
  2. Optional: Führen Sie den Befehl gcloud projects add-iam-policy-binding aus, um dem Dienstkonto eine IAM-Rolle für Ihr Projekt zuzuweisen:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
        --role="ROLE_NAME"

    Ersetzen Sie die folgenden Werte:

    • PROJECT_ID: die Projekt-ID
    • SERVICE_ACCOUNT_ID: die Dienstkonto-ID
    • ROLE_NAME: ein Rollenname, z. B. roles/compute.osLogin
  3. Optional: Damit Nutzer die Identität des Dienstkontos annehmen können, müssen Sie den Befehl gcloud iam service-accounts add-iam-policy-binding ausführen. Damit gewähren Sie einem Nutzer die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Dienstkonto:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
        --member="user:USER_EMAIL" \
        --role="roles/iam.serviceAccountUser"

    Ersetzen Sie die folgenden Werte:

    • PROJECT_ID: die Projekt-ID
    • SERVICE_ACCOUNT_ID: die Dienstkonto-ID
    • USER_EMAIL: die E-Mail-Adresse des Nutzers

REST

Mit der Methode serviceAccounts.create wird ein Dienstkonto erstellt.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_NAME: Die alphanumerische ID Ihres Dienstkontos. Dieser Name muss zwischen 6 und 30 Zeichen lang sein und kann alphanumerische Zeichen in Kleinbuchstaben sowie Bindestriche enthalten.
  • SA_DESCRIPTION: Optional. Eine Beschreibung des Dienstkontos.
  • SA_DISPLAY_NAME: Ein für Nutzer lesbarer Name des Dienstkontos.

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "accountId": "SA_NAME",
  "serviceAccount": {
    "description": "SA_DESCRIPTION",
    "displayName": "SA_DISPLAY_NAME"
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com",
  "projectId": "my-project",
  "uniqueId": "123456789012345678901",
  "email": "my-service-account@my-project.iam.gserviceaccount.com",
  "displayName": "My service account",
  "etag": "BwUp3rVlzes=",
  "description": "A service account for running jobs in my project",
  "oauth2ClientId": "987654321098765432109"
}

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

namespace iam = google::cloud::iam;
[](std::string const& project_id, std::string const& account_id,
   std::string const& display_name, std::string const& description) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::ServiceAccount service_account;
  service_account.set_display_name(display_name);
  service_account.set_description(description);
  auto response = client.CreateServiceAccount("projects/" + project_id,
                                              account_id, service_account);
  if (!response) throw std::runtime_error(response.status().message());
  std::cout << "ServiceAccount successfully created: "
            << response->DebugString() << "\n";
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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 com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

    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(serviceAccountName);
      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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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.

Wenn das Dienstkonto auf Ressourcen in anderen Projekten zugreifen muss, müssen Sie außerdem in der Regel die APIs für diese Ressourcen in dem Projekt aktivieren, in dem Sie das Dienstkonto erstellt haben.

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 prü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. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

    Auf der Seite Dienstkonten werden alle nutzerverwalteten Dienstkonten im ausgewählten Projekt aufgeführt. Auf dieser Seite sind keine von Google verwalteten Dienstkonten aufgeführt.

gcloud

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

Mit der Methode serviceAccounts.list werden alle Dienstkonten in Ihrem Projekt aufgelistet.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.

HTTP-Methode und URL:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "accounts": [
    {
      "name": "projects/my-project/serviceAccounts/sa-1@my-project.iam.gserviceaccount.com",
      "projectId": "my-project",
      "uniqueId": "123456789012345678901",
      "email": "sa-1@my-project.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.iam.gserviceaccount.com",
      "projectId": "my-project",
      "uniqueId": "234567890123456789012",
      "email": "sa-2@my-project.iam.gserviceaccount.com",
      "description": "My second service account",
      "displayName": "Service account 2",
      "etag": "UkQpTwBVUsL=",
      "oauth2ClientId": "876543210987654321098"
    }
  ]
}

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

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

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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 com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

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 aktualisieren

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

Damit Nutzer den Namen oder die Beschreibung eines Dienstkontos aktualisieren können, muss ihnen mindestens die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) oder die einfache Rolle "Bearbeiter" (roles/editor) erteilt werden.

Console

  1. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Klicken Sie auf die E-Mail-Adresse des Dienstkontos, das Sie umbenennen möchten.

  4. Geben Sie den neuen Namen in das Feld Name ein und klicken Sie auf Speichern.

gcloud

Aktualisieren Sie mit dem Befehl gcloud iam service-accounts update ein Dienstkonto.

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_SA_DESCRIPTION
displayName: UPDATED_DISPLAY_NAME
name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com

REST

Mit der Methode serviceAccounts.patch wird ein Dienstkonto aktualisiert.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.
  • SA_NAME: Die alphanumerische ID Ihres Dienstkontos. Dieser Name muss zwischen 6 und 30 Zeichen lang sein und kann alphanumerische Zeichen in Kleinbuchstaben sowie Bindestriche enthalten.
  • Ersetzen Sie mindestens eines der folgenden:
    • UPDATED_DISPLAY_NAME: Ein neuer Anzeigename für das Dienstkonto.
    • UPDATED_DESCRIPTION: Eine neue Beschreibung des Dienstkontos.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

namespace iam = google::cloud::iam;
[](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::runtime_error(response.status().message());
  std::cout << "ServiceAccount successfully updated: "
            << response->DebugString() << "\n";
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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 com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

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

    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";
    try {
      // First, get a service account using List() or Get()
      ServiceAccount serviceAccount =
          service
              .projects()
              .serviceAccounts()
              .get("projects/-/serviceAccounts/" + serviceAccountEmail)
              .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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  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

Deaktivieren Sie mit dem Befehl gcloud iam service-accounts disable ein Dienstkonto.

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

Mit der Methode serviceAccounts.disable wird ein Dienstkonto sofort deaktiviert.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.

HTTP-Methode und URL:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Bei Erfolg ist der Antworttext leer.

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

namespace iam = google::cloud::iam;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::DisableServiceAccountRequest request;
  request.set_name(name);
  auto response = client.DisableServiceAccount(request);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully disabled.\n";
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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 com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

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

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

      System.out.println("Disabled service account: " + serviceAccountEmail);
    } 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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  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

Aktivieren Sie mit dem Befehl gcloud iam service-accounts enable ein Dienstkonto.

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

Mit der Methode serviceAccounts.enable wird ein zuvor deaktiviertes Dienstkonto aktiviert.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.

HTTP-Methode und URL:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Bei Erfolg ist der Antworttext leer.

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

namespace iam = google::cloud::iam;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::EnableServiceAccountRequest request;
  request.set_name(name);
  auto response = client.EnableServiceAccount(request);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully enabled.\n";
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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 com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

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

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

      System.out.println("Enabled service account: " + serviceAccountEmail);
    } 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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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("Enabled 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.

Gelöschte Dienstkonten werden nicht auf Ihr Dienstkontokontingent angerechnet.

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. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Wählen Sie das Dienstkonto aus, das Sie löschen möchten, und klicken Sie auf Löschen .

gcloud

Löschen Sie mit dem Befehl gcloud iam service-accounts delete ein Dienstkonto.

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

Mit der Methode serviceAccounts.delete wird ein Dienstkonto gelöscht.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_ID: Die ID Ihres Dienstkontos. Dies kann entweder die E-Mail-Adresse des Dienstkontos im Format SA_NAME@PROJECT_ID.iam.gserviceaccount.com oder die eindeutige numerische ID des Dienstkontos sein.

HTTP-Methode und URL:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Bei Erfolg ist der Antworttext leer.

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C++ API.

namespace iam = google::cloud::iam;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.DeleteServiceAccount(name);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully deleted.\n";
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

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.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

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

    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";
    try {
      service
          .projects()
          .serviceAccounts()
          .delete("projects/-/serviceAccounts/" + serviceAccountEmail)
          .execute();

      System.out.println("Deleted service account: " + serviceAccountEmail);
    } 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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur 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)

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 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, das ursprüngliche Dienstkonto wiederherzustellen, um dieses Problem zu beheben.

Wenn Sie das Dienstkonto nicht wiederherstellen können, können Sie ein neues Dienstkonto mit demselben Namen erstellen, alle Rollen aus dem gelöschten Dienstkonto widerrufen und dem neuen Dienstkonto dieselben Rollen zuweisen. Weitere Informationen finden Sie unter Richtlinien mit gelöschten Mitgliedern.

Numerische ID eines gelöschten 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.

Wenn Sie wissen, dass eine Bindung in einer IAM-Richtlinie das gelöschte Dienstkonto enthält, können Sie die Richtlinie abrufen und dann die numerische ID in der Richtlinie suchen. Die numerische ID wird an den Namen des gelöschten Dienstkontos angehängt. In dieser Richtlinie lautet die numerische ID für das gelöschte Dienstkonto beispielsweise 123456789012345678901:

{
  "version": 1,
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "members": [
        "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901"
      ],
      "role": "roles/iam.serviceAccountUser"
    },
  ]
}

Numerische IDs werden nur an die Namen gelöschter Mitglieder angehängt.

Alternativ können Sie in Ihren Audit-Logs nach dem Vorgang DeleteServiceAccount suchen, durch den das Dienstkonto gelöscht wurde:

  1. Rufen Sie in der Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

  2. Geben Sie im Abfrageeditor die folgende Abfrage ein und ersetzen Sie dabei SERVICE_ACCOUNT_EMAIL durch die E-Mail-Adresse Ihres Dienstkontos (z. B. my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Wenn das Dienstkonto vor mehr als einer Stunde gelöscht wurde, klicken Sie auf schedule Letzte Stunde, wählen Sie einen längeren Zeitraum aus der Drop-down-Liste aus und klicken Sie dann auf Anwenden.

  4. Klicken Sie auf Abfrage ausführen. Die Loganzeige zeigt die DeleteServiceAccount-Vorgänge an, die die Dienstkonten mit dem von Ihnen angegebenen Namen betrafen.

  5. Ermitteln und notieren Sie die numerische ID des gelöschten Dienstkontos. Dazu haben Sie folgende Möglichkeiten:

    • Wenn die Suchergebnisse nur einen DeleteServiceAccount-Vorgang enthalten, suchen Sie im Bereich Logfelder im Feld Eindeutige ID die numerische ID.

    • Wenn die Suchergebnisse mehr als ein Log enthalten, gehen Sie so vor:

      1. Suchen Sie den richtigen Logeintrag. Klicken Sie neben einem Logeintrag auf den Erweiterungspfeil , um den richtigen Logeintrag zu finden. 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.

      2. Suchen Sie im richtigen Logeintrag nach der numerischen ID des Dienstkontos. Um die numerische ID zu ermitteln, maximieren Sie das Feld protoPayload des Logeintrags und suchen Sie nach dem Feld resourceName.

        Die numerische ID ist alles, was auf serviceAccounts im Feld resourceName folgt.

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

Stellen Sie mit dem Befehl gcloud beta iam service-accounts undelete aus, ein Dienstkonto wieder her.

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

Mit der Methode serviceAccounts.undelete wird ein gelöschtes Dienstkonto wiederhergestellt.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.
  • SA_NUMERIC_ID: Die eindeutige numerische ID des Dienstkontos.

HTTP-Methode und URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NUMERIC_ID:undelete

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Wenn das Konto wiederhergestellt werden kann, erhalten Sie einen 200 OK-Antwortcode mit Details zum wiederhergestellten Dienstkonto. Dieser sieht in etwa so aus:

{
  "restoredAccount": {
    "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com",
    "projectId": "my-project",
    "uniqueId": "123456789012345678901",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "displayName": "My service account",
    "etag": "BwUp3rVlzes=",
    "description": "A service account for running jobs in my project",
    "oauth2ClientId": "987654321098765432109"
  }
}

Nächste Schritte

Jetzt testen

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis zu prüfen und zu bewerten. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.

Jetzt kostenlos starten