このページでは、Identity and Access Management(IAM)API、Google Cloud Console、gcloud
コマンドライン ツールを使用して、サービス アカウントを作成および管理する方法について説明します。
デフォルトでは、各プロジェクトには最大 100 個のサービス アカウントを設定し、リソースへのアクセスを制御できます。必要な場合は、割り当ての増加をリクエストできます。割り当てと上限をご覧ください。
始める前に
IAM API を有効にします。
IAM サービス アカウントを理解する
Google Cloud CLI をインストールする
必要なロール
サービス アカウントを管理するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼します。
-
サービス アカウントとサービス アカウント メタデータを表示するには: サービス アカウント(
roles/iam.serviceAccountViewer
)を表示します。 -
サービス アカウントを表示して作成するには: サービス アカウントを作成します(
roles/iam.serviceAccountCreator
)。 -
サービス アカウントを表示して削除するには: サービス アカウントの削除(
roles/iam.serviceAccountDeleter
) -
サービス アカウントを完全に管理(サービス アカウントへの表示、作成、更新、無効化、有効化、削除、削除の取り消し、管理)するには、サービス アカウント管理者(
roles/iam.serviceAccountAdmin
)を使用します。
ロールの付与の詳細については、アクセスの管理をご覧ください。
これらのロールの詳細については、サービス アカウントのロールをご覧ください。
IAM の基本ロールには、サービス アカウントを管理する権限も含まれています。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。
サービス アカウントを作成する
サービス アカウントを作成するときは、my-service-account
など、英数字の ID(以下のサンプルでは SA_NAME
)を指定する必要があります。ID は 6~30 文字で、小文字の英数字とダッシュを使用できます。作成したサービス アカウントの名前は変更できません。
サービス アカウントの名前は、作成時にプロビジョニングされたメールアドレスに SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式で表示されます。
各サービス アカウントには、自動的に生成される永続的かつ一意の数値 ID も割り当てられます。
また、サービス アカウントを作成するときには、次の情報も指定します。
SA_DESCRIPTION
は、サービス アカウントの説明です(省略可能)。SA_DISPLAY_NAME
は、わかりやすいサービス アカウント名です。PROJECT_ID
は、Google Cloud プロジェクトの ID です。
サービス アカウントを作成した後、サービス アカウントを使用するまで 60 秒以上待たなければならない場合があります。作成直後のサービス アカウントを使用しようとしてエラーが表示された場合は、指数バックオフを使用してリクエストを再試行できます。
Console
Cloud Console で [サービス アカウントの作成] ページに移動します。
Cloud プロジェクトを選択します。
Cloud Console に表示するサービス アカウント名を入力します。
Cloud Console は、この名前に基づいてサービス アカウント ID を生成します。必要に応じて ID を編集します。後で ID を変更することはできません。
(省略可)サービス アカウントの説明を入力します。
アクセス制御を今すぐ設定しない場合は、[完了] をクリックしてサービス アカウントの作成を終わります。
アクセス制御を今すぐ設定するには、[作成して続行] をクリックして次の手順に進みます。
(省略可)プロジェクトのサービス アカウントに付与する 1 つ以上の IAM ロールを選択します。
ロールの追加が完了したら、[続行] をクリックします。
(省略可)[サービス アカウント ユーザーロール] フィールドに、サービス アカウントの権限を借用できるメンバーを追加します。
(省略可)[サービス アカウント管理者ロール] フィールドに、サービス アカウントを管理できるユーザーを追加します。
[完了] をクリックして、サービス アカウントの作成を完了します。
gcloud
サービス アカウントを作成するには、
gcloud iam service-accounts create
コマンドを実行します。gcloud iam service-accounts create SERVICE_ACCOUNT_ID \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
次の値を置き換えます。
SERVICE_ACCOUNT_ID
: サービス アカウントの IDDESCRIPTION
: サービス アカウントの説明(省略可)DISPLAY_NAME
: Cloud Console に表示するサービス アカウント名
(省略可)サービス アカウントにプロジェクトの IAM ロールを付与するには、
gcloud projects add-iam-policy-binding
コマンドを実行します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \ --role="ROLE_NAME"
次の値を置き換えます。
PROJECT_ID
: プロジェクト IDSERVICE_ACCOUNT_ID
: サービス アカウント ID。ROLE_NAME
: ロール名(例:roles/compute.osLogin
)
(省略可)ユーザーにサービス アカウントの権限借用を許可するには、
gcloud iam service-accounts add-iam-policy-binding
コマンドを実行して、サービス アカウントのサービス アカウント ユーザーロール(roles/iam.serviceAccountUser
)をユーザーに付与します。gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \ --member="user:USER_EMAIL" \ --role="roles/iam.serviceAccountUser"
次の値を置き換えます。
PROJECT_ID
: プロジェクト IDSERVICE_ACCOUNT_ID
: サービス アカウント ID。USER_EMAIL
: ユーザーのメールアドレス
REST
serviceAccounts.create
メソッドを使用して、サービス アカウントを作成します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_NAME
: サービス アカウントの英数字 ID。この名前は 6~30 文字で指定する必要があり、小文字の英数字とダッシュを含めることができます。SA_DESCRIPTION
: 省略可。サービス アカウントの説明。SA_DISPLAY_NAME
: 人が読める形式のサービス アカウント名。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts
JSON 本文のリクエスト:
{ "accountId": "SA_NAME", "serviceAccount": { "description": "SA_DESCRIPTION", "displayName": "SA_DISPLAY_NAME" } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "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++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントを作成したら、そのサービス アカウントに 1 つ以上のロールを付与し、自分を代行できるようにします。
また、サービス アカウントが他のプロジェクトのリソースにアクセスする必要がある場合は、サービス アカウントを作成したプロジェクトのリソースで API を有効にする必要があります。
サービス アカウントの一覧取得
サービス アカウントを一覧表示すると、サービス アカウントとキーの監査や、サービス アカウント管理用のカスタムツールの一部として使用できます。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
[サービス アカウント] ページに、選択したプロジェクトのユーザーが管理するサービス アカウントがすべて一覧表示されます。このページには、Google が管理するサービス アカウントは表示されません。
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
serviceAccounts.list
メソッドを使用して、プロジェクト内のすべてのサービス アカウントを一覧表示します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。
HTTP メソッドと URL:
GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "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++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントの更新
サービス アカウントの表示名(わかりやすい名前)や説明は、サービス アカウントの目的やアカウントの担当者など、サービス アカウントに関する追加情報を取得するためによく使用されます。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
名前を変更するサービス アカウントのメールアドレスをクリックします。
[名前] ボックスに新しい名前を入力して、[保存] をクリックします。
gcloud
gcloud iam service-accounts update
コマンドを実行して、サービス アカウントを更新します。
コマンド:
gcloud iam service-accounts update \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --description="UPDATED_SA_DESCRIPTION" \ --display-name="UPDATED_DISPLAY_NAME"
出力は名前が変更されたサービス アカウントです。
description: UPDATED_SA_DESCRIPTION displayName: UPDATED_DISPLAY_NAME name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com
REST
serviceAccounts.patch
メソッドを使用して、サービス アカウントを更新します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。SA_NAME
: サービス アカウントの英数字 ID。この名前は 6~30 文字で指定する必要があり、小文字の英数字とダッシュを含めることができます。- 次のうち少なくとも 1 つを置き換えます。
UPDATED_DISPLAY_NAME
: サービス アカウントの新しい表示名。UPDATED_DESCRIPTION
: サービス アカウントの新しい説明。
HTTP メソッドと URL:
PATCH https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID
JSON 本文のリクエスト:
{ "serviceAccount": { "email": "SA_NAME@PROJECT_ID.iam.gserviceaccount.com", "displayName": "UPDATED_DISPLAY_NAME", "description": "UPDATED_DESCRIPTION" }, "updateMask": "displayName,description" }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "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++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントの無効化
サービス アカウントを削除した場合と同様に、サービス アカウントを無効にすると、アプリケーションでそのサービス アカウントを使用して Google Cloud リソースにアクセスできなくなります。デフォルトの App Engine サービス アカウントと Compute Engine サービス アカウントを無効にすると、インスタンスがプロジェクト内のリソースにアクセスできなくなります。すでに無効になっているサービス アカウントを無効にしようとしても、効果はありません。
サービス アカウントの削除と異なり、無効になったサービス アカウントは必要に応じて簡単に有効にできます。重要なアプリケーションがサービス アカウントを使用しないように、削除する前にサービス アカウントを無効にすることをおすすめします。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
無効にするサービス アカウントの名前をクリックします。
[サービス アカウントのステータス] で、[サービス アカウントを無効にする] をクリックします。さらに、[無効にする] をクリックして、変更を確認します。
gcloud
gcloud iam service-accounts disable
コマンドを実行して、サービス アカウントを無効にします。
コマンド:
gcloud iam service-accounts disable SA_NAME@PROJECT_ID.iam.gserviceaccount.com
出力:
Disabled service account SA_NAME@PROJECT_ID.iam.gserviceaccount.com
REST
serviceAccounts.disable
メソッドを使用して、サービス アカウントを直ちに無効にします。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:disable
リクエストを送信するには、次のいずれかのオプションを展開します。
成功すると、レスポンスの本文は空になります。
C++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントの有効化
無効にしたサービス アカウントを有効にすると、そのサービス アカウントから再び Google Cloud リソースにアクセスできるようになります。
無効になっているサービス アカウントは、必要なときにいつでも有効にできます。すでに有効になっているサービス アカウントを有効にしようとしても、効果はありません。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
有効にするサービス アカウントの名前をクリックします。
[サービス アカウントのステータス] で、[サービス アカウントを有効にする] をクリックします。さらに、[有効にする] をクリックして、変更を確認します。
gcloud
gcloud iam service-accounts enable
コマンドを実行して、サービス アカウントを有効にします。
コマンド:
gcloud iam service-accounts enable SA_NAME@PROJECT_ID.iam.gserviceaccount.com
出力:
Enabled service account SA_NAME@PROJECT_ID.iam.gserviceaccount.com
REST
serviceAccounts.enable
メソッドを使用して、以前に無効化されたサービス アカウントを有効にします。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:enable
リクエストを送信するには、次のいずれかのオプションを展開します。
成功すると、レスポンスの本文は空になります。
C++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントの削除
サービスアカウントを削除すると、アプリケーションでそのサービス アカウントから Google Cloud リソースにアクセスできなくなります。デフォルトの App Engine サービス アカウントと Compute Engine サービス アカウントを削除すると、インスタンスがプロジェクト内のリソースにアクセスできなくなります。
慎重に削除してください。サービス アカウントを削除する前に、重要なアプリケーションがそのサービス アカウントを使用していないことを確認してください。サービス アカウントが使用されているかどうかわからない場合は、削除する前にサービス アカウントを無効にすることをおすすめします。無効になっているサービス アカウントがまだ使用中の場合は、簡単に有効にできます。
サービス アカウントを削除した後に同じ名前で新しいサービス アカウントを作成した場合、新しいサービス アカウントは別の ID として扱われます。削除されたサービス アカウントに付与されているロールは継承されません。一方、サービス アカウントを削除してからその削除を取り消しても、サービス アカウントの ID は変更されず、サービス アカウントのロールは維持されます。
サービス アカウントが削除されても、役割のバインディングはすぐには削除されません。最大期間の 60 日が過ぎると、システムから自動的に削除されます。 それまでは、サービス アカウントは接頭辞 deleted:
と接尾辞 ?uid=NUMERIC_ID
が付くロール バインディングに表示されます。NUMERIC_ID
の部分は、サービス アカウントの一意の数値 ID です。
削除されたサービス アカウントは、サービス アカウントの割り当てにはカウントされません。
Console
Cloud Console で、[サービス アカウント] ページに移動します。
プロジェクトを選択します。
削除するサービス アカウントを選択して、[削除]
をクリックします。
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
serviceAccounts.delete
メソッドを使用して、サービス アカウントを削除します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_ID
: サービス アカウントの ID。これは、サービス アカウントのメールアドレス(SA_NAME@PROJECT_ID.iam.gserviceaccount.com
の形式)、またはサービス アカウントの一意の数値 ID のいずれかです。
HTTP メソッドと URL:
DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID
リクエストを送信するには、次のいずれかのオプションを展開します。
成功すると、レスポンスの本文は空になります。
C++
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。
C#
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
サービス アカウントの削除の取り消し
undelete
コマンドを使用して、サービス アカウントの削除の取り消しが可能な場合があります。通常、次の条件を満たしている場合、サービス アカウントの削除を取り消すことができます。
サービス アカウントが削除されてから 30 日以内である。
30 日を過ぎると、IAM はサービス アカウントを完全に削除します。サービス アカウントが完全に削除された後、サポート リクエストを送信していても、Google Cloud でサービス アカウントを復元することはできません。
削除されたサービス アカウントと同じ名前のサービス アカウントが存在しない。
たとえば、サービス アカウント
my-service-account@project-id.iam.gserviceaccount.com
を誤って削除したとします。同じ名前のサービス アカウントがまだ必要なため、同じ名前のサービス アカウント(my-service-account@project-id.iam.gserviceaccount.com
)を作成したとします。新しいサービス アカウントは、削除されたサービス アカウントの権限を継承しません。実際に、削除されたサービス アカウントとは完全に分離されています。ただし、新しいサービス アカウントに前と同じ名前が付いているため、元のサービス アカウントの削除を取り消すことはできません。
この問題を解決するには、新しいサービス アカウントを削除してから、元のサービス アカウントの削除を取り消します。
サービス アカウントの削除を取り消すことができない場合は、同じ名前で新しいサービス アカウントを作成し、削除されたサービス アカウントからすべてのロールを取り消して、新しいサービス アカウントに同じロールを付与します。詳細については、削除されたプリンシパルを含むポリシーをご覧ください。
削除されたサービス アカウントの数値 ID の確認
サービス アカウントの削除を取り消すには、数値 ID を指定する必要があります。数値 ID は 21 桁の数字(123456789012345678901
など)で、サービス アカウントを一意に識別します。サービス アカウントを削除してから同じ名前のサービス アカウントを作成しても、元のサービス アカウントと新しいサービス アカウントには異なる数値 ID が割り当てられます。
許可ポリシー バインディングに削除済みのサービス アカウントが含まれていることがわかっている場合は、許可ポリシーを取得して許可ポリシーの数値 ID を確認できます。数値 ID は、削除されたサービス アカウントの名前に追加されます。たとえば、この許可ポリシーの場合、削除されたサービス アカウントの数値 ID は 123456789012345678901
です。
{ "version": 1, "etag": "BwUjMhCsNvY=", "bindings": [ { "members": [ "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901" ], "role": "roles/iam.serviceAccountUser" }, ] }
数値 ID は、削除されたプリンシパルの名前にのみ追加されます。
サービス アカウントを削除した DeleteServiceAccount
オペレーションを監査ログで検索することもできます。
Cloud Console で、[ログ エクスプローラ] ページに移動します。
[ログ エクスプローラ] に移動
クエリエディタで次のクエリを入力します。ここで、
SERVICE_ACCOUNT_EMAIL
は、サービス アカウントのメールアドレス(my-service-account@project-id.iam.gserviceaccount.com
など)に置き換えます。resource.type="service_account" resource.labels.email_id="SERVICE_ACCOUNT_EMAIL" "DeleteServiceAccount"
サービス アカウントが 1 時間以上前に削除された場合は、[
直近の 1 時間] プルダウン リストからより長い期間を選択して、[適用] をクリックします。[クエリを実行] をクリックします。ログ エクスプローラに、指定した名前のサービス アカウントに影響する
DeleteServiceAccount
オペレーションが表示されます。次のいずれかの方法で、削除したサービス アカウントの数値 ID を探して書き留めます。
検索結果に 1 つの
DeleteServiceAccount
オペレーションしか含まれていない場合、[ログのフィールド] ペインの [一意の ID] フィールドで数値 ID を探します。検索結果に複数のログが表示される場合は、次のようにします。
正しいログエントリを見つけます。正しいログエントリを見つけるには、ログエントリの横にある
展開矢印をクリックします。ログエントリの詳細を確認し、元に戻すオペレーションのログエントリがあるかどうかを確認します。正しいログエントリが見つかるまでこの手順を繰り返します。正しいログエントリで、サービス アカウントの数値 ID を見つけます。数値 ID を確認するには、ログエントリの
protoPayload
フィールドを展開して、resourceName
フィールドを探します。resourceName
フィールドのserviceAccounts
より後すべてが数値 ID です。
サービス アカウントの数値 ID による削除の取り消し
削除されたサービス アカウントの数値 ID が見つかったら、サービス アカウントの削除を取り消すことができます。
gcloud
gcloud beta iam service-accounts undelete
コマンドを実行して、サービス アカウントの削除を取り消します。
コマンド:
gcloud beta iam service-accounts undelete ACCOUNT_ID
出力:
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
serviceAccounts.undelete
メソッドを使用して、削除されたサービス アカウントを復元します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。SA_NUMERIC_ID
: サービス アカウントの一意の数値 ID。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NUMERIC_ID:undelete
リクエストを送信するには、次のいずれかのオプションを展開します。
アカウント削除の取り消しができる場合は、復元されたサービス アカウントに関する詳細を含む 200 OK
レスポンス コードを受け取ります。以下に例を示します。
{ "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" } }
次のステップ
- サービス アカウントキーを作成、管理する方法について学ぶ。
- サービス アカウントを含むすべてのタイプのプリンシパルに IAM のロールを付与するプロセスを確認する。
- ロールの推奨事項を使用して、すべてのプリンシパル(サービス アカウントを含む)の権限の範囲を制限する方法を確認する。
- プリンシパルにサービス アカウントの権限借用を許可する方法を理解する。
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
無料で開始