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

このページでは、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] はサービス アカウントの名前です。これは一意の識別子です。サービス アカウントのメールアドレスに表示され、サービス アカウントを他の API で更新するために使用されます。一度作成したら変更はできません。[SA-DISPLAY-NAME] はサービス アカウント用のわかりやすい名前です。[PROJECT-ID] は Google Cloud Platform プロジェクトの ID です。

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

Console

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

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

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

  3. プロジェクトを選択し、[開く] をクリックします。
  4. [サービス アカウントを作成] をクリックします。
  5. サービス アカウント名を入力し、サービス アカウントに付与する役割を選択して [保存] をクリックします。

gcloud コマンド

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

コマンド:

gcloud iam service-accounts create [SA-NAME]
    --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": {
        "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",
    "displayName": "SA-DISPLAY-NAME",
    "etag": "BwUp3rVlzes=",
    "oauth2ClientId": "117249000288840666939"
}

C#

Cloud IAM クライアントのインストールと作成の詳細については、Cloud IAM クライアント ライブラリをご覧ください。

public static ServiceAccount CreateServiceAccount(string projectId,
    string name, string displayName)
{
    var request = new CreateServiceAccountRequest
    {
        AccountId = name,
        ServiceAccount = new ServiceAccount
        {
            DisplayName = displayName
        }
    };

    ServiceAccount serviceAccount = s_iam.Projects.ServiceAccounts
        .Create(request, "projects/" + projectId).Execute();

    Console.WriteLine("Created service account: " + serviceAccount.Email);
    return serviceAccount;
}

サービス アカウントを作成したら、そのサービス アカウントに 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",
        "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",
        "displayName": "SA-DISPLAY-NAME-2",
        "etag": "BwUpTsLVUkQ=",
        "oauth2ClientId": "102240834887833340852"
    }]
}

C#

Cloud IAM クライアントのインストールと作成の詳細については、Cloud IAM クライアント ライブラリをご覧ください。

public static IList<ServiceAccount> ListServiceAccounts(string projectId)
{
    ListServiceAccountsResponse response = s_iam.Projects.ServiceAccounts
        .List("projects/" + projectId).Execute();
    IList<ServiceAccount> serviceAccounts = response.Accounts;

    foreach (ServiceAccount account in serviceAccounts)
    {
        Console.WriteLine("Name: " + account.Name);
        Console.WriteLine("Display Name: " + account.DisplayName);
        Console.WriteLine("Email: " + account.Email);
        Console.WriteLine();
    }
    return serviceAccounts;
}

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

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

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

Console

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

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

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

gcloud コマンド

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

コマンド:

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

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

displayName: Updated display name
email: SA-NAME@PROJECT-ID.iam.gserviceaccount.com
etag: BwUqQpHDCw8=
name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com
oauth2ClientId: '112984177383228986143'
projectId: PROJECT-ID
uniqueId: '112984177383228986143'

REST API

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

リクエスト:

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

リクエストの本文には、新しい表示名、プロジェクト ID、サービス アカウントの一意の ID、サービス アカウントのメールアドレスを含める必要があります。

{
    "displayName":"[UPDATED-DISPLAY-NAME]",
    "etag":"BwUpVKjgNtE=",
    "projectId":"[PROJECT-ID]",
    "uniqueId":"107522985251862639552",
    "email":"[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com",
}

レスポンス:

{
    "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",
    "displayName": "Updated display name",
    "etag": "BwUqLK4bL9U=",
    "oauth2ClientId": "105236325228757713905"
}

C#

Cloud IAM クライアントのインストールと作成の詳細については、Cloud IAM クライアント ライブラリをご覧ください。

public static ServiceAccount RenameServiceAccount(string email,
    string newDisplayName)
{
    // First, get a ServiceAccount using List() or Get()
    string resource = "projects/-/serviceAccounts/" + email;
    ServiceAccount serviceAccount = s_iam.Projects.ServiceAccounts
        .Get(resource).Execute();

    // Then you can update the display name
    serviceAccount.DisplayName = newDisplayName;
    serviceAccount = s_iam.Projects.ServiceAccounts.Update(
        serviceAccount, resource).Execute();

    Console.WriteLine($"Updated display name for {serviceAccount.Email} " +
        "to: " + serviceAccount.DisplayName);
    return serviceAccount;
}

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

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

サービス アカウントを削除するには、少なくとも、サービス アカウント管理者の役割(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 クライアントのインストールと作成の詳細については、Cloud IAM クライアント ライブラリをご覧ください。

public static void DeleteServiceAccount(string email)
{
    string resource = "projects/-/serviceAccounts/" + email;
    s_iam.Projects.ServiceAccounts.Delete(resource).Execute();

    Console.WriteLine("Deleted service account: " + email);
}

次のステップ

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

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

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