サービス アカウント キーの一覧表示と取得

このページでは、Trusted Cloud コンソール、Google Cloud CLI、Identity and Access Management APIGoogle Cloud クライアント ライブラリのいずれかを使用して、サービス アカウント キーを一覧表示して取得する方法について説明します。

始める前に

必要なロール

サービス アカウント キーの一覧表示と取得に必要な権限を取得するには、鍵を管理するプロジェクトまたはサービス アカウントに対するサービス アカウントの表示roles/iam.serviceAccountViewer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

詳しくは、サービス アカウントのロールをご覧ください。

IAM の基本ロールには、サービス アカウント キーを管理するための権限も含まれています。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。

サービス アカウント キーを一覧表示する

Trusted Cloud コンソール、gcloud CLI、serviceAccount.keys.list() メソッド、いずれかのクライアント ライブラリを使用して、サービス アカウントのサービス アカウント キーを一覧表示できます。

serviceAccount.keys.list() メソッドは、サービス アカウントと鍵の監査や、サービス アカウント管理用のカスタムツールの作成に広く使用されています。

鍵の所属先プロジェクトを確認するには、鍵を JSON ファイルとしてダウンロードし、そのファイルの内容を確認します。

作成していない鍵が一覧表示されることがあります。これらは Google が作成したキーであり、Service Account Credentials API で使用されます。詳細については、Google Cloud-powered key ペアをご覧ください。

コンソール

  1. Trusted Cloud コンソールで、[サービス アカウント] ページに移動します。
  2. プロジェクトを選択します。
  3. [サービス アカウント] ページで、キーを一覧表示するサービス アカウントのメールアドレスをクリックします。
  4. [] をクリックします。 Trusted Cloud コンソールに、サービス アカウント キーのリストが表示されます。

gcloud

gcloud iam service-accounts keys list コマンドを実行して、サービス アカウント キーの一覧を取得します。

次の値を置き換えます。

  • SA_NAME: 鍵を一覧表示するサービス アカウントの名前。
  • PROJECT_ID: 実際の Trusted Cloud プロジェクト ID。
gcloud iam service-accounts keys list \
    --iam-account=SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com

出力:

KEY_ID CREATED_AT EXPIRES_AT DISABLED DISABLE_REASON EXTENDED_STATUS
8e6e3936d7024646f8ceb39792006c07f4a9760c 2021-01-01T21:01:42Z 9999-12-31T23:59:59Z      
937c98f870f5c8db970af527aa3c12fd88b1c20a 2021-01-01T20:55:40Z 9999-12-31T23:59:59Z True USER INITIATED  
937c98f870f5c8db970af527aa3c12fd88b1c20a 2021-01-01T20:55:40Z 9999-12-31T23:59:59Z True EXPOSED ['key':'SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED' 'value':'{exposure URL}']

C++

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C++ API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& service_account_name,
   std::vector<std::string> const& key_type_labels) {
  iam::IAMClient client(iam::MakeIAMConnection());
  std::vector<google::iam::admin::v1::ListServiceAccountKeysRequest::KeyType>
      key_types;
  for (auto const& type : key_type_labels) {
    if (type == "USER_MANAGED") {
      key_types.push_back(google::iam::admin::v1::
                              ListServiceAccountKeysRequest::USER_MANAGED);
    } else if (type == "SYSTEM_MANAGED") {
      key_types.push_back(google::iam::admin::v1::
                              ListServiceAccountKeysRequest::SYSTEM_MANAGED);
    }
  }
  auto response =
      client.ListServiceAccountKeys(service_account_name, key_types);
  if (!response) throw std::move(response).status();
  std::cout << "ServiceAccountKeys successfully retrieved: "
            << response->DebugString() << "\n";
}

C#

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。


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 ServiceAccountKeys
{
    public static IList<ServiceAccountKey> ListKeys(string serviceAccountEmail)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.ServiceAccounts.Keys
            .List($"projects/-/serviceAccounts/{serviceAccountEmail}")
            .Execute();
        foreach (ServiceAccountKey key in response.Keys)
        {
            Console.WriteLine("Key: " + key.Name);
        }
        return response.Keys;
    }
}

Go

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

import (
	"context"
	"fmt"
	"io"

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

// listKey lists a service account's keys.
func listKeys(w io.Writer, serviceAccountEmail string) ([]*iam.ServiceAccountKey, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/-/serviceAccounts/" + serviceAccountEmail
	response, err := service.Projects.ServiceAccounts.Keys.List(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.List: %w", err)
	}
	for _, key := range response.Keys {
		fmt.Fprintf(w, "Listing key: %v", key.Name)
	}
	return response.Keys, nil
}

Java

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ListServiceAccountKeysRequest;
import com.google.iam.admin.v1.ServiceAccountKey;
import java.io.IOException;
import java.util.List;

public class ListServiceAccountKeys {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Replace the below variables before running.
    String projectId = "your-project-id";
    String serviceAccountName = "your-service-account-name";

    List<ServiceAccountKey> keys = listKeys(projectId, serviceAccountName);
    keys.forEach(key -> System.out.println("Key: " + key.getName()));
  }

  // Lists all keys for a service account.
  public static List<ServiceAccountKey> listKeys(String projectId, String accountName)
          throws IOException {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
    try (IAMClient iamClient = IAMClient.create()) {
      ListServiceAccountKeysRequest req = ListServiceAccountKeysRequest.newBuilder()
              .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
              .build();

      return iamClient.listServiceAccountKeys(req).getKeysList();
    }
  }
}

Python

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

from typing import List

from google.cloud import iam_admin_v1
from google.cloud.iam_admin_v1 import types


def list_keys(project_id: str, account: str) -> List[iam_admin_v1.ServiceAccountKey]:
    """Creates a key for a service account.

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    """

    iam_admin_client = iam_admin_v1.IAMClient()
    request = types.ListServiceAccountKeysRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}"

    response = iam_admin_client.list_service_account_keys(request=request)
    return response.keys

REST

projects.serviceAccounts.keys.list メソッドは、サービス アカウントのすべてのサービス アカウント キーを一覧表示します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Trusted Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_NAME: キーを一覧表示するサービス アカウントの名前。
  • KEY_TYPES: 省略可。レスポンスに含めるキータイプのカンマ区切りのリスト。キータイプは、キーがユーザー管理(USER_MANAGED)かシステム管理(SYSTEM_MANAGED)かを示します。空白のままにすると、すべてのキーが返されます。

HTTP メソッドと URL:

GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "keys": [
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
      "validAfterTime": "2020-03-04T17:39:47Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED"
    },
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
      "validAfterTime": "2020-03-31T23:50:09Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED"
    },
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
      "validAfterTime": "2020-05-17T18:58:13Z",
      "validBeforeTime": "9999-12-31T23:59:59Z",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "GOOGLE_PROVIDED",
      "keyType": "USER_MANAGED",
      "disabled": true
      "disable_reason": "SERVICE_ACCOUNT_KEY_DISABLE_REASON_EXPOSED"
      "extended_status": "SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED"
      "extended_status_message": "exposed at: https://www.github.com/SomePublicRepo"
    }
  ]
}

サービス アカウント キーを取得する

gcloud CLI または REST API を使用して、サービス アカウント キーの公開鍵データを取得できます。さらに、 Trusted Cloud コンソール、gcloud CLI、または REST API を使用して、鍵のメタデータ(鍵が使用しているアルゴリズムや、鍵がユーザー管理か Google 管理かなど)を取得できます。

一部のアプリケーションやツールでは、監査や外部システムとの相互運用性などのために、サービス アカウント キーの公開鍵データまたはメタデータへのアクセスが必要になる場合があります。たとえば、Terraform では、 Trusted Cloud by S3NSのサービス アカウント キーの状態が Terraform 構成ファイルで定義されているものと一致する必要がある場合があります。

コンソール

サービス アカウント キーの公開鍵データを取得するには:

代わりに gcloud CLI または REST API を使用してください。このデータはTrusted Cloud コンソールでは使用できません。

サービス アカウント キーのメタデータを取得するには:

  1. Trusted Cloud コンソールで、[サービス アカウント] ページに移動します。
  2. プロジェクトを選択します。
  3. [サービス アカウント] ページで、キーを一覧表示するサービス アカウントのメールアドレスをクリックします。
  4. [] をクリックします。 Trusted Cloud コンソールに、サービス アカウント キーのリストと各キーのメタデータが表示されます。

gcloud

サービス アカウント キーの公開鍵データを取得するには:

gcloud beta iam service-accounts keys get-public-key コマンドを実行します。

gcloud beta iam service-accounts keys get-public-key KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
    --output-file=FILENAME

次の値を指定します。

  • KEY_ID: 取得する公開鍵の ID。鍵の ID を確認するには、サービス アカウントのすべての鍵を一覧表示し、取得する鍵を特定してその ID をコピーします。
  • SA_NAME: 公開鍵を取得するサービス アカウントの名前。
  • PROJECT_ID: 実際の Trusted Cloud プロジェクト ID。
  • FILENAME: 公開鍵データを保存するファイル。

デフォルトでは、公開鍵データは X.509 PEM 形式で保存されます。未加工の公開鍵を取得するには、追加のフラグ --type=raw を指定してコマンドを実行します。

たとえば、次のコマンドは、サービス アカウント my-service-account@my-project.s3ns-system.iam.gserviceaccount.com に属しているキー c97cc34494c07c9b483701f28368f20145b9ef97 の公開鍵データを取得して、公開鍵データをファイル public_key.pem に保存します。

gcloud beta iam service-accounts keys get-public-key \
    c97cc34494c07c9b483701f28368f20145b9ef97 \
    --iam-account=my-service-account@my-project.s3ns-system.iam.gserviceaccount.com \
    --output-file=public_key.pem

サービス アカウント キーのメタデータを取得するには:

gcloud iam service-accounts keys list コマンドを実行します。

gcloud iam service-accounts keys list --iam-account=SA_NAME \
    --filter="name~KEY_ID" --format=json

次の値を指定します。

  • SA_NAME: 鍵のメタデータが必要なサービス アカウントの名前。
  • KEY_ID: メタデータを取得する鍵の ID。

たとえば、次のコマンドは、サービス アカウント my-service-account@my-project.s3ns-system.iam.gserviceaccount.com に属する鍵 c97cc34494c07c9b483701f28368f20145b9ef97 のメタデータを取得します。

gcloud iam service-accounts keys list \
    --iam-account=my-service-account@my-project.s3ns-system.iam.gserviceaccount.com \
    --filter="name~c97cc34494c07c9b483701f28368f20145b9ef97" --format=json

REST

projects.serviceAccounts.keys.get メソッドは、サービス アカウントの公開鍵に関する情報を返します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Trusted Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_NAME: 公開鍵を取得するサービス アカウントの名前。
  • KEY_ID: 取得する公開鍵の ID。鍵の ID を確認するには、サービス アカウントのすべての鍵を一覧表示して、取得する鍵を特定し、name の最後からその ID をコピーします。keys/ より後のすべての部分が鍵の一意の ID になります。
  • KEY_TYPE: 公開鍵を返す形式。X.509 PEM 形式の場合は TYPE_X509_PEM_FILE を使用し、未加工の公開鍵の場合は TYPE_RAW_PUBLIC_KEY を使用します。このクエリ パラメータを省略すると、メソッドは鍵のメタデータを返しますが、公開鍵データは返しません。

HTTP メソッドと URL:

GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com/keys/KEY_ID?publicKeyType=KEY_TYPE

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns-system.iam.gserviceaccount.com/keys/f4a83933ac07cf52bb74e0e66d99662a09f51a36",
  "validAfterTime": "2021-12-10T17:32:06Z",
  "validBeforeTime": "9999-12-31T23:59:59Z",
  "publicKeyData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvRENDQWVTZ0F3SUJBZ0lJT2lCdm9hR09nV0F3RFFZSktvWklodmNOQVFFRkJRQXdJREVlTUJ3R0ExVUUKQXhNVk1UQXhNVGsxTlRFMk5UWXlPRGszTmpFek1qQXpNQ0FYRFRJeE1USXhNREUzTXpJd05sb1lEems1T1RreApNak14TWpNMU9UVTVXakFnTVI0d0hBWURWUVFERXhVeE1ERXhPVFUxTVRZMU5qSTRPVGMyTVRNeU1ETXdnZ0VpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzdzeDBFcXVUMGNwSXhlczl1SW0yRy9DS3EKdnc4YTl2a2JkaWZZbDZHSDh1ZUxEWDhGNHVUeEVQMkNzU3JLTHZtOFo2My9IVUxnWjBtQXByb0JlM08vaVR1ZwpmYVZ0NVNtakhvWm9YQ1lpbjR0MS93SkpvdDhrRFdPeDZhOEdieUdqZ215ak8yYk1XdEtaQ2dqeGZ3cUV0MmN3CklnajA5VzJKYTlHTWRsdVA0VGVubTRKSkJoaFpFbTJ1bVAwYVZZdkRnUWF5d0RCYnJuNG8yY0EzSWplRDZGM1gKK0VHRDNKU0s4VW02Sk5sM21adGp6VWNZSHBrYkF0U1A2ZDI5d1RmZkdIRFY0THJRWlM3bG15d3hsb3p5WnpaawpCOFpHckMzSkF1MVNVRTdQOTN6bWtFb1B6MlRUNWhaYXZMWFQ5TGM2SExiRklRVHFnVEJVWHlNMkpIcGZBZ01CCkFBR2pPREEyTUF3R0ExVWRFd0VCL3dRQ01BQXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CWUdBMVVkSlFFQi93UU0KTUFvR0NDc0dBUVVGQndNQ01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQkhPNXlpUDY3NkE4UEN2RjdRSzdFMApYZVljbzdsSStFZkowaGJrWVlmdUtnSENPcXcvd3FBbCtOSithanljT2FPWDFPMlRZN3ZOc05pR2t3eWc2QXdqCklhL1NHVjd3NkxpS2JldFRuSVp4UlhRY25lcnVvZEwycUR5eWphMDJJSXJVTmVKY1o0MVJBNXRTL3NkcTFGNm4KM0NjSXFoZTI1OTA4TUNna3cwaFB1K0VLbFF6R1B5T3pVRHBLdXg0cnRBaHJTYTBUVW1wbEMxdTJnUk1YRkF6aApWUjU0V2dNa2tabURyalBNeWdBS3JmNkd0bHo2VHRTYTVLb1BWdGpsWExUQkxaSnlhdk4zc1F2dFlBK1NFQWpWCnA1N1ZabFBYZmR0dWN4ekJaOC9zS25SOHNyYU5hVWFjamg1NEE1Nm1URTE3b0IyUWkrTHBJUTYvNnVqVnNXaUYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "keyOrigin": "GOOGLE_PROVIDED",
  "keyType": "USER_MANAGED"
}

次のステップ