サービス アカウントの作成と管理

このページでは、Cloud Identity and Access Management API、Google Cloud Platform Console、gcloud コマンドライン ツールを使用して、サービス アカウントを作成および管理する方法について説明します。

新しいクラウド プロジェクトを作成すると、Google Cloud Platform(GCP)はそのプロジェクトの下に 1 つの Compute Engine サービス アカウントと 1 つの App Engine サービス アカウントを自動的に作成します。プロジェクトには最大 98 個のサービス アカウントを作成し、リソースへのアクセスを制御できます。

始める前に

必要な権限

ユーザーがサービス アカウントを管理できるようにするには、次のいずれかの役割を付与します。

  • サービス アカウント ユーザーroles/iam.serviceAccountUser): サービス アカウントの取得、一覧表示、代理操作を行う権限を付与します。
  • サービス アカウント管理者roles/iam.serviceAccountAdmin): サービス アカウント ユーザーの権限に加え、サービス アカウントに対して Cloud IAM ポリシーを作成、更新、削除、設定、取得する権限を付与します。

Cloud IAM の基本の役割には、サービス アカウントを管理するための権限も含まれていますが、他の GCP リソースへの不要なアクセスを防止するために、いずれかの事前定義された役割を付与することをおすすめします。

サーリス アカウントに関連する役割の詳細については、サービス アカウントの役割をご覧ください。

サービス アカウントの作成

サービス アカウントの作成はプロジェクトへのメンバーの追加に似ていますが、サービス アカウントは個々のエンドユーザーではなくアプリケーションに属します。

以下の例で、[SA-NAME] はサービス アカウントの名前です(my-service-account など)。これは一意の識別子で、作成時にプロビジョニングされたサービス アカウントのメールアドレス(my-service-account@project-id.iam.gserviceaccount.com など)に含まれます。他の API でサービス アカウントを更新するときにも使用します。作成後に変更することはできません。

次の値も指定します。

  • [SA-DESCRIPTION] はサービス アカウントの説明です(省略可能)。
  • [SA-DISPLAY-NAME] はサービス アカウント用のわかりやすい名前です。
  • [PROJECT-ID] は Google Cloud Platform プロジェクトの ID です。

サービス アカウントを作成するには、少なくとも、サービス アカウント管理者の役割(roles/iam.serviceAccountAdmin)または編集者の基本の役割(roles/editor)が付与されている必要があります。

Console

  1. GCP Console で [サービス アカウント] ページを開きます。

    [サービス アカウント] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択し、[開く] をクリックします。

  4. [サービス アカウントを作成] をクリックします。

  5. サービス アカウント名(わかりやすい表示名)、オプションの説明を入力し、サービス アカウントに付与する役割を選択して、[保存] をクリックします。

gcloud コマンド

gcloud beta iam service-accounts create コマンドを実行して、サービス アカウントを作成します。

コマンド:

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

出力はサービス アカウントです。

Created service account [SA-NAME].

REST API

serviceAccounts.create() を呼び出して、サービス アカウントを作成します。

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

リクエストの本文にサービス アカウントのプロパティを含める必要があります。

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

レスポンス:

{
    "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#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Java の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。 詳細については、Cloud IAM Python API のリファレンス ドキュメントをご覧ください。

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

    # pylint: disable=no-member
    service_account = service.projects().serviceAccounts().create(
        name='projects/' + project_id,
        body={
            'accountId': name,
            'serviceAccount': {
                'displayName': display_name
            }
        }).execute()

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

サービス アカウントを作成したら、そのサービス アカウントに 1 つ以上の役割を付与し、自分を代行できるようにします。

サービス アカウントの一覧取得

サービス アカウントの一覧を取得する際、パラメータを指定してレスポンスに含まれるサービス アカウントの数を制限できます。その後、後続のリクエストで ListServiceAccountsResponse.next_page_token を使用して、残りのサービス アカウントの一覧を取得できます。

このメソッドを使用して、サービス アカウントとキーを監査を行います。また、サービス アカウント管理用のカスタムツールの作成も行います。

サービス アカウントを一覧表示するには、少なくともサービス アカウント ユーザー役割(roles/iam.serviceAccountUser)または閲覧者の基本役割(roles/viewer)をユーザーに付与する必要があります。

Console

  1. GCP Console で [サービス アカウント] ページを開きます。

    [サービス アカウント] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択し、[開く] をクリックします。[サービス アカウント] ページに、すべてのサービス アカウントが一覧表示されます。

gcloud コマンド

gcloud iam service-accounts list コマンドを実行して、プロジェクト内のすべてのサービス アカウントを一覧表示します。

コマンド:

gcloud iam service-accounts list

出力はプロジェクト内のすべてのサービス アカウントの一覧です:

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

serviceAccounts.list() メソッドを呼び出します。

リクエスト:

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

レスポンス:

{
    "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#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Java の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。 詳細については、Cloud IAM Python API のリファレンス ドキュメントをご覧ください。

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

    # pylint: disable=no-member
    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

サービス アカウントの名前変更

サービス アカウントの表示名(わかりやすい名前)は通常、サービス アカウントの目的や担当者など、そのサービス アカウントに関する追加情報を取得するのに使用されます。

サービス アカウントの名前を変更するには、少なくともサービス アカウント管理者役割(roles/iam.serviceAccountAdmin)または基本の役割の編集者(roles/editor)を付与する必要があります。

Console

  1. GCP Console で [サービス アカウント] ページを開きます。

    [サービス アカウント] ページを開く

  2. [プロジェクトを選択] をクリックします。
  3. プロジェクトを選択し、[開く] をクリックします。
  4. 名前を変更するサービス アカウントを探し、その行の [その他]more_vert ボタンをクリックしてから、[編集] をクリックします。
  5. 新しい名前を入力して [保存] をクリックします。

gcloud コマンド

gcloud beta iam service-accounts update コマンドを実行して、サービス アカウントを更新します。

コマンド:

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

出力は名前が変更されたサービス アカウントです。

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

REST API

serviceAccounts.patch() メソッドを使用します。

リクエスト:

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

リクエストの本文には、サービス アカウントのメールと、新しい表示名か説明文を含める必要があります。

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

レスポンス:

{
    "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#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Java の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。 詳細については、Cloud IAM Python API のリファレンス ドキュメントをご覧ください。

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

    # First, get a service account using List() or Get()
    resource = 'projects/-/serviceAccounts/' + email
    # pylint: disable=no-member
    service_account = service.projects().serviceAccounts().get(
        name=resource).execute()

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

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

サービス アカウントの無効化

サービス アカウントを削除する場合と同様に、サービス アカウントを無効にすると、アプリケーションはそのサービス アカウントで GCP リソースにアクセスできなくなります。デフォルトの App Engine サービス アカウントと Compute Engine サービス アカウントを無効にすると、インスタンスがプロジェクト内のリソースにアクセスできなくなります。すでに無効になっているサービス アカウントを無効にしようとしても、効果はありません。

サービス アカウントの削除と異なり、無効になったサービス アカウントは必要に応じて簡単に有効にできます。重要なアプリケーションがサービス アカウントを使用しないように、削除する前にサービス アカウントを無効にすることをおすすめします。

サービス アカウントを無効にするには、少なくともサービス アカウント管理者役割(roles/iam.serviceAccountAdmin)または基本役割の編集者(roles/editor)をユーザーに付与する必要があります。

gcloud コマンド

gcloud alpha iam service-accounts disable コマンドを実行して、サービス アカウントを無効にします。

コマンド:

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

出力:

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

REST API

serviceAccounts.disable() メソッドを使用します。

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

サービス アカウントの有効化

無効になったサービス アカウントを有効にすると、アプリケーションはそのサービス アカウントで GCP リソースにアクセスできるようになります。

無効になっているサービス アカウントは、必要なときにいつでも有効にできます。すでに有効になっているサービス アカウントを有効にしようとしても、効果はありません。

サービス アカウントを有効にするには、少なくともサービス アカウント管理者役割(roles/iam.serviceAccountAdmin)または基本役割の編集者(roles/editor)をユーザーに付与する必要があります。

gcloud コマンド

gcloud alpha iam service-accounts enable コマンドを実行して、サービス アカウントを有効にします。

コマンド:

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

出力:

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

REST API

serviceAccounts.enable() メソッドを使用します。

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

サービス アカウントの削除

サービス アカウントを削除すると、アプリケーションはそのサービス アカウントを使用して Google Cloud Platform リソースにアクセスすることができなくなります。デフォルトの App Engine サービス アカウントと Compute Engine サービス アカウントを削除すると、インスタンスがプロジェクト内のリソースにアクセスできなくなります。

慎重に削除してください。サービス アカウントを削除する前に、重要なアプリケーションがそのサービス アカウントを使用していないことを確認してください。サービス アカウントが使用されているかどうかわからない場合は、削除する前にサービス アカウントを無効にすることをおすすめします。無効になっているサービス アカウントがまだ使用中の場合は、簡単に有効にできます。

サービス アカウントが削除されても、役割のバインディングはすぐには削除されません。最大期間の 60 日が過ぎると、システムから自動的に削除されます。

サービス アカウントを削除するには、少なくともサービス アカウント管理者役割(roles/iam.serviceAccountAdmin)または基本役割の編集者(roles/editor)がユーザーに付与されている必要があります。

Console

  1. GCP Console で [サービス アカウント] ページを開きます。

    [サービス アカウント] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択し、[開く] をクリックします。

  4. 削除するサービス アカウントを選択し、[削除]delete をクリックします。

gcloud コマンド

gcloud iam service-accounts delete コマンドを実行して、サービス アカウントを削除します。

コマンド:

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

出力:

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

REST API

serviceAccounts.delete() メソッドを使用します。

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

C#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Java の設定手順に従ってください。 詳細については、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

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。 詳細については、Cloud IAM Python API のリファレンス ドキュメントをご覧ください。

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

    # pylint: disable=no-member
    service.projects().serviceAccounts().delete(
        name='projects/-/serviceAccounts/' + email).execute()

    print('Deleted service account: ' + email)

サービス アカウントを削除した後に、同じ名前で新しいサービス アカウントを作成しないでください。予期しない動作が起こる可能性があります。詳細については、サービス アカウントの削除と再作成をご覧ください。

サービス アカウントの削除の取り消し

削除したサービス アカウントを undelete コマンドで復元できる場合があります。

サービス アカウントの削除を取り消すには、削除されたサービス アカウントに対する iam.serviceAccounts.undelete 権限が呼び出し元に付与されている必要があります。この権限は、基本役割のオーナー(roles/owner)に含まれています。

削除を取り消すコマンドを使用する際は、削除したサービス アカウントの一意の ID を指定する必要があります。一意の ID は、21 桁の数値です(103271949540120710052 など)。削除したサービス アカウントの一意の ID がわからない場合は、該当する削除操作のアクティビティ ログで見つけることができます。

以下の状況においては、削除したサービス アカウントを復元できません。

  • サービス アカウントが削除されてから 30 日以上経過している場合、システムから自動的に削除されているため、顧客サポート リクエストを申請しても復元できません。
  • 削除したサービス アカウントのメールアドレスがアクティブな(削除されていない)サービス アカウントで使用されている場合、削除したサービス アカウントを復元できません。たとえば、名前が foo@project-id.iam.gserviceaccount.com で一意の ID が 103271949540120710052 のアカウントを削除し、その後、名前は同じ foo@project-id.iam.gserviceaccount.com で一意の ID が 103271949540120710329 の新しいアカウントを作成した場合、最初のサービス アカウントは復元できません。この問題を解決するには、新しい(2 番目の)サービス アカウントを削除してから、削除の取り消しコマンドを実行します。

REST API

serviceAccounts.undelete() メソッドを使用します。

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

アカウントを復元するには、REST 呼び出しを発行する必要があります。たとえば、以下のように curl を使用して実施できます。ここでは、削除したサービス アカウントの一意の ID は 103271949540120710052 です。

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

復元に成功すると、レスポンス コード 200 と、復元したサービス アカウントに関する詳細が返されます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Identity and Access Management のドキュメント