서비스 계정 키 생성 및 관리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 페이지에서는 Google Cloud Console, Google Cloud CLI, Identity and Access Management API 또는 Google Cloud 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정 키를 만들고 관리하는 방법을 설명합니다.

시작하기 전에

필요한 역할

서비스 계정 키를 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 서비스 계정 키 관리자(roles/iam.serviceAccountKeyAdmin) IAM 역할, 또는 키를 관리할 서비스 계정을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

자세한 내용은 서비스 계정 역할을 참조하세요.

IAM 기본 역할에는 서비스 계정 키를 관리할 수 있는 권한도 포함되어 있습니다. 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경이나 테스트 환경에서는 부여해도 됩니다.

서비스 계정 키 만들기

다른 플랫폼이나 온프레미스와 같이 Google Cloud 외부에서 서비스 계정을 사용하려면 먼저 서비스 계정의 ID를 설정해야 합니다. 공개 키/비공개 키 쌍을 통해 안전하게 제공할 수 있습니다. 서비스 계정 키를 만들면 공개 부분은 Google Cloud에 저장되지만 비공개 부분은 자신만 사용할 수 있습니다. 공개 키/비공개 키 쌍에 대한 자세한 내용은 서비스 계정 키를 참조하세요.

Google Cloud Console, gcloud CLI, serviceAccounts.keys.create() 메서드를 사용하거나 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정 키를 만들 수 있습니다. 서비스 계정은 최대 10개의 키를 가질 수 있습니다.

기본적으로 서비스 계정 키는 만료되지 않습니다. 리소스 설정을 사용하여 서비스 계정 키가 유효한 기간을 지정할 수 있습니다. 자세한 내용은 사용자 관리 키의 만료 시간 지정을 참조하세요.

아래 예시에서 SA_NAME은 서비스 계정의 이름이고, PROJECT_ID는 Google Cloud 프로젝트의 ID입니다. Google Cloud Console의 서비스 계정 페이지에서 SA_NAME@PROJECT_ID.iam.gserviceaccount.com 문자열을 검색할 수 있습니다.

Console

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.
  3. 서비스 계정 페이지에서 키를 만들 서비스 계정의 이메일 주소를 클릭합니다.
  4. 탭을 클릭합니다.
  5. 키 추가 드롭다운 메뉴를 클릭한 후 새 키 만들기를 선택합니다.
  6. 키 유형으로 JSON을 선택하고 만들기를 클릭합니다.

만들기를 클릭하면 서비스 계정 키 파일이 다운로드됩니다. 키 파일을 다운로드한 후에는 다시 다운로드할 수 없습니다.

다운로드한 키의 형식은 다음과 같습니다. 여기서 PRIVATE_KEY는 공개 키/비공개 키 쌍의 비공개 부분입니다.

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}

키 파일은 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다. 원하는 경우 이 파일을 이동하고 이름을 바꿀 수 있습니다.

서비스 계정 키 파일을 사용하여 애플리케이션을 서비스 계정으로 인증할 수 있습니다.

gcloud

gcloud iam service-accounts keys create 명령어를 실행하여 서비스 계정 키를 만듭니다.

다음 값을 바꿉니다.

  • KEY_FILE: 비공개 키의 새 출력 파일 경로입니다(예: ~/sa-private-key.json).
  • SA_NAME: 키를 만들 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys create KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력:

created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as
[/usr/home/username/KEY_FILE] for
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

이제 서비스 계정 키 파일이 머신에 다운로드됩니다. 키 파일을 다운로드한 후에는 다시 다운로드할 수 없습니다.

다운로드한 키의 형식은 다음과 같습니다. 여기서 PRIVATE_KEY는 공개 키/비공개 키 쌍의 비공개 부분입니다.

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}

키 파일은 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다. 원하는 경우 이 파일을 이동하고 이름을 바꿀 수 있습니다.

서비스 계정 키 파일을 사용하여 애플리케이션을 서비스 계정으로 인증할 수 있습니다.

REST

projects.serviceAccounts.keys.create 메서드는 서비스 계정의 키를 만듭니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 키를 만들려는 서비스 계정의 이름입니다.
  • KEY_ALGORITHM: 선택사항. 키에 사용할 키 알고리즘입니다. 변경될 수 있는 기본값은 2,048비트 RSA 키입니다. 가능한 모든 값의 목록은 ServiceAccountKeyAlgorithm 참조를 확인하세요.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys

JSON 요청 본문:

{
  "keyAlgorithm": "KEY_ALGORITHM"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에는 서비스 계정의 키가 포함됩니다. 반환된 키 형식은 다음과 같습니다. 여기서 ENCODED_PRIVATE_KEY는 공개 키/비공개 키 쌍에서 비공개 부분으로, base64로 인코딩됩니다.

{
  "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID",
  "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
  "privateKeyData": "ENCODED_PRIVATE_KEY",
  "validAfterTime": "DATE",
  "validBeforeTime": "DATE",
  "keyAlgorithm": "KEY_ALG_RSA_2048"
}

서비스 계정으로 인증하는 데 사용할 수 있는 키 파일을 만들려면 비공개 키 데이터를 디코딩하여 파일에 저장합니다.

Linux

다음 명령어를 실행합니다.

echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH

PATH를 키를 저장할 파일의 경로로 바꿉니다. 파일 확장자는 .json을 사용합니다.

macOS

다음 명령어를 실행합니다.

echo 'ENCODED_PRIVATE_KEY' | base64 --decode > PATH

PATH를 키를 저장할 파일의 경로로 바꿉니다. 파일 확장자는 .json을 사용합니다.

PowerShell

  1. 인코딩된 비공개 키 데이터(ENCODED_PRIVATE_KEY)를 파일에 저장합니다.

  2. certutil을 사용하여 파일을 디코딩합니다.

    certutil -decode ENCODED_FILE DECODED_FILE
    

    다음 값을 바꿉니다.

    • ENCODED_FILE: 인코딩된 비공개 키 데이터가 포함된 파일의 경로입니다.
    • DECODED_FILE: 키를 저장할 파일의 경로입니다. 파일 확장자는 .json을 사용합니다.

키 데이터는 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다.

서비스 계정 키 파일을 사용하여 애플리케이션을 서비스 계정으로 인증할 수 있습니다.

C++

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C++ API 참조 문서를 확인하세요.

namespace iam = ::google::cloud::iam;
return [](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.CreateServiceAccountKey(
      name,
      google::iam::admin::v1::ServiceAccountPrivateKeyType::
          TYPE_GOOGLE_CREDENTIALS_FILE,
      google::iam::admin::v1::ServiceAccountKeyAlgorithm::KEY_ALG_RSA_2048);
  if (!response) throw std::runtime_error(response.status().message());
  std::cout << "ServiceAccountKey successfully created: "
            << response->DebugString() << "\n"
            << "Please save the key in a secure location, as they cannot "
               "be downloaded later\n";
  return response->name();
}

C#

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.


using System;
using System.Text;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class ServiceAccountKeys
{
    public static ServiceAccountKey CreateKey(string serviceAccountEmail)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var key = service.Projects.ServiceAccounts.Keys.Create(
            new CreateServiceAccountKeyRequest(),
            "projects/-/serviceAccounts/" + serviceAccountEmail)
            .Execute();

        // The PrivateKeyData field contains the base64-encoded service account key
        // in JSON format.
        // TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
        //  You cannot download it later.
        byte[] valueBytes = System.Convert.FromBase64String(key.PrivateKeyData);
        string jsonKeyContent = Encoding.UTF8.GetString(valueBytes);

        Console.WriteLine("Key created successfully");
        return key;
    }
}

Go

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.

import (
	"context"
	// "encoding/base64"
	"fmt"
	"io"

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

// createKey creates a service account key.
func createKey(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: %v", err)
	}

	resource := "projects/-/serviceAccounts/" + serviceAccountEmail
	request := &iam.CreateServiceAccountKeyRequest{}
	key, err := service.Projects.ServiceAccounts.Keys.Create(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.Create: %v", err)
	}
	// The PrivateKeyData field contains the base64-encoded service account key
	// in JSON format.
	// TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
	// You cannot download it later.
	// jsonKeyFile, _ := base64.StdEncoding.DecodeString(key.PrivateKeyData)
	fmt.Fprintf(w, "Key created successfully")
	return key, nil
}

자바

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM 자바 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.CreateServiceAccountKeyRequest;
import com.google.api.services.iam.v1.model.ServiceAccountKey;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Base64;
import java.util.Collections;

public class CreateServiceAccountKey {

  // Creates a key for a service account.
  public static String createKey(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);
      return null;
    }

    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";
    try {
      ServiceAccountKey key =
          service
              .projects()
              .serviceAccounts()
              .keys()
              .create(
                  "projects/-/serviceAccounts/" + serviceAccountEmail,
                  new CreateServiceAccountKeyRequest())
              .execute();

      // The privateKeyData field contains the base64-encoded service account key
      // in JSON format.
      // TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
      //  You cannot download it later.
      String jsonKeyFile = new String(Base64.getDecoder().decode(key.getPrivateKeyData()));

      System.out.println("Key created successfully");
      String keyName = key.getName();
      return keyName.substring(keyName.lastIndexOf("/") + 1).trim();
    } catch (IOException e) {
      System.out.println("Unable to create service account key: \n" + e);
      return null;
    }
  }

  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-account-keys")
            .build();
    return service;
  }
}

Python

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def create_key(service_account_email):
    """Creates a key for 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)

    key = service.projects().serviceAccounts().keys().create(
        name='projects/-/serviceAccounts/' + service_account_email, body={}
        ).execute()

    # The privateKeyData field contains the base64-encoded service account key
    # in JSON format.
    # TODO(Developer): Save the below key {json_key_file} to a secure location.
    #  You cannot download it again later.
    # import base64
    # json_key_file = base64.b64decode(key['privateKeyData']).decode('utf-8')

    if not key['disabled']:
        print('Created json key')

서비스 계정 키 나열

Google Cloud Console, gcloud CLI, serviceAccount.keys.list() 메서드를 사용하거나 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정의 서비스 계정 키를 나열할 수 있습니다.

serviceAccount.keys.list() 메서드는 일반적으로 서비스 계정과 키를 감사하거나 서비스 계정을 관리하는 커스텀 도구를 빌드하는 데 사용됩니다.

키가 속한 프로젝트를 찾으려면 키를 JSON 파일로 다운로드하고 이 파일을 조사하면 됩니다.

직접 만들지 않은 키가 나열될 수 있습니다. 이 키는 Google에서 생성되고 Service Account Credentials API에서 사용됩니다. 자세한 내용은 Google 관리 키 쌍을 참조하세요.

Console

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.
  3. 서비스 계정 페이지에서 키를 나열할 서비스 계정의 이메일 주소를 클릭합니다.
  4. 를 클릭합니다. Google Cloud 콘솔에 서비스 계정의 키 목록이 표시됩니다.

gcloud

gcloud iam service-accounts keys list 명령어를 실행하여 서비스 계정 키를 나열합니다.

다음 값을 바꿉니다.

  • SA_NAME: 키를 나열할 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys list \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력:

KEY_ID CREATED_AT EXPIRES_AT DISABLED
8e6e3936d7024646f8ceb39792006c07f4a9760c 2021-01-01T21:01:42Z 9999-12-31T23:59:59Z  
937c98f870f5c8db970af527aa3c12fd88b1c20a 2021-01-01T20:55:40Z 9999-12-31T23:59:59Z True

REST

projects.serviceAccounts.keys.list 메서드는 서비스 계정의 모든 서비스 계정 키를 나열합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google 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.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "keys": [
    {
      "name": "projects/my-project/serviceAccounts/my-service-account@my-project.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.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.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
    }
  ]
}

C++

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C++ API 참조 문서를 확인하세요.

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

C#

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 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 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 참조 문서를 확인하세요.

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: %v", 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: %v", err)
	}
	for _, key := range response.Keys {
		fmt.Fprintf(w, "Listing key: %v", key.Name)
	}
	return response.Keys, nil
}

자바

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM 자바 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.ServiceAccountKey;
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 ListServiceAccountKeys {

  // Lists all keys for a service account.
  public static void listKeys(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 {
      List<ServiceAccountKey> keys =
          service
              .projects()
              .serviceAccounts()
              .keys()
              .list("projects/-/serviceAccounts/" + serviceAccountEmail)
              .execute()
              .getKeys();

      for (ServiceAccountKey key : keys) {
        System.out.println("Key: " + key.getName());
      }
    } catch (IOException e) {
      System.out.println("Unable to list service account keys: \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-account-keys")
            .build();
    return service;
  }
}

Python

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def list_keys(service_account_email):
    """Lists all keys for 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)

    keys = service.projects().serviceAccounts().keys().list(
        name='projects/-/serviceAccounts/' + service_account_email).execute()

    for key in keys['keys']:
        print('Key: ' + key['name'])

서비스 계정 키 받기

gcloud CLI나 REST API를 사용하여 서비스 계정 키의 공개 키 데이터를 가져올 수 있습니다. 또한 Google Cloud Console, gcloud CLI 또는 REST API를 사용하여 키가 사용하는 알고리즘 및 키를 개발자나 Google에서 관리할지 여부와 같은 키의 메타데이터를 가져올 수 있습니다.

Console

서비스 계정 키의 공개 키 데이터를 가져오려면 다음 안내를 따르세요.

gcloud CLI 또는 REST API를 사용합니다. Google Cloud Console에서는 이 데이터를 사용할 수 없습니다.

서비스 계정 키의 메타데이터를 가져오려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.
  3. 서비스 계정 페이지에서 키를 나열할 서비스 계정의 이메일 주소를 클릭합니다.
  4. 를 클릭합니다. Google 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 --output-file=FILENAME

다음 값을 제공합니다.

  • KEY_ID: 가져오려는 공개 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 가져올 키를 확인한 다음 키의 ID를 복사하세요.
  • SA_NAME: 공개 키를 가져올 서비스 계정의 이름입니다.
  • FILENAME: 공개 키 데이터를 저장할 파일입니다.

기본적으로 공개 키 데이터는 X.509 PEM 형식으로 저장됩니다. 원시 공개 키를 가져오려면 추가 플래그 --type=raw로 명령어를 실행합니다.

예를 들어 다음 명령어는 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com에 속하는 키 c97cc34494c07c9b483701f28368f20145b9ef97의 공개 키 데이터를 가져온 후 파일 public_key.pem에 저장합니다.

gcloud beta iam service-accounts keys get-public-key \
    c97cc34494c07c9b483701f28368f20145b9ef97 \
    --iam-account=my-service-account@my-project.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.iam.gserviceaccount.com에 속하는 키 c97cc34494c07c9b483701f28368f20145b9ef97의 메타데이터를 가져옵니다.

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

REST

projects.serviceAccounts.keys.get 메서드는 서비스 계정의 공개 키에 대한 정보를 반환합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 공개 키를 가져올 서비스 계정의 이름입니다.
  • KEY_ID: 가져오려는 공개 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 가져올 키를 찾은 다음 name 필드의 끝에서 키 ID를 복사합니다. 키의 ID는 keys/ 이후의 모든 문자입니다.
  • 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.iam.gserviceaccount.com/keys/KEY_ID?publicKeyType=KEY_TYPE

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.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"
}

서비스 계정의 공개 키 업로드

사용자 관리형 키 쌍의 공개 키 부분을 업로드하여 서비스 계정과 연결할 수 있습니다. 공개 키를 업로드한 후 키 쌍의 비공개 키를 서비스 계정 키로 사용할 수 있습니다.

업로드하는 키는 X.509 v3 인증서로 래핑되고 base64로 인코딩된 RSA 공개 키여야 합니다. OpenSSL과 같은 도구를 사용하여 이 형식으로 키와 인증서를 생성할 수 있습니다.

예를 들어 다음 명령어는 2048비트 RSA 키 쌍을 생성하고 365일 동안 유효한 자체 서명 인증서로 공개 키를 래핑합니다.

openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
    -keyout /path/to/private_key.pem \
    -out /path/to/public_key.pem \
    -subj "/CN=unused"

그러면 public_key.pem 파일을 서비스 계정의 공개 키로 업로드할 수 있습니다.

프로젝트의 키를 업로드하는 기능을 중지하려면 서비스 계정 키 업로드 제한을 참조하세요.

Console

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.
  3. 서비스 계정 페이지에서 키를 업로드할 서비스 계정의 이메일 주소를 클릭합니다.
  4. 탭을 클릭합니다.
  5. 키 추가 드롭다운 메뉴를 클릭한 후 기존 키 업로드를 선택합니다.
  6. 찾아보기를 클릭한 후 공개 키 파일을 찾아 선택합니다. 또는 공개 키 파일 콘텐츠를 복사하여 기존 키 붙여넣기 상자에 붙여넣을 수 있습니다.
  7. 업로드를 클릭합니다.

gcloud

gcloud iam service-accounts keys upload 명령어를 실행하여 서비스 계정 키 서명용 공개 키를 업로드합니다.

다음 값을 바꿉니다.

  • KEY_FILE: 업로드할 키 데이터가 포함된 파일의 경로입니다(예: ./public_key.pem).
  • SA_NAME: 키를 업로드할 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys upload KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력에는 업로드된 키의 고유 식별자가 포함됩니다.

Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0

명령어가 성공했는지 확인하려면 gcloud iam service-accounts keys list 명령어를 실행합니다.

gcloud iam service-accounts keys list \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력에는 키가 생성된 후에 반환된 식별자와 동일한 고유 식별자가 포함됩니다.

KEY_ID CREATED_AT EXPIRES_AT DISABLED
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 2019-06-26T21:01:42Z 9999-12-31T23:59:59Z  

REST

projects.serviceAccounts.keys.upload 메서드는 사용자 관리 키 쌍에서 공개 키를 업로드하고 이 키를 서비스 계정에 추가합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 키를 연결할 서비스 계정의 이름입니다.
  • PUBLIC_KEY_DATA: 키 쌍의 공개 키 데이터입니다. X.509 v3 인증서로 래핑된 RSA 공개 키여야 합니다. base64에 첫 번째 줄 -----BEGIN CERTIFICATE----- 및 마지막 줄 -----END CERTIFICATE-----을 비롯한 공개 키 데이터를 인코딩합니다.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys:upload

JSON 요청 본문:

{
  "publicKeyData": "PUBLIC_KEY_DATA"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0",
  "validAfterTime": "2020-05-17T19:31:19Z",
  "validBeforeTime": "2021-05-17T19:31:19Z",
  "keyAlgorithm": "KEY_ALG_RSA_2048",
  "keyOrigin": "USER_PROVIDED",
  "keyType": "USER_MANAGED"
}

서비스 계정 키 사용 중지

서비스 계정 키를 사용 중지하면 해당 키를 사용하여 Google API에 인증할 수 없습니다. 언제든지 사용 중지된 키를 사용 설정할 수 있습니다.

키를 사용 중지한 후 키가 더 이상 필요하지 않은지 확인될 때까지 기다린 후에 서비스 계정 키를 삭제하는 것이 좋습니다. 그런 후 키를 삭제할 수 있습니다.

Google Cloud Console에서 사용 중지된 키를 볼 수 있지만 Google Cloud Console을 사용하여 키를 사용 중지할 수는 없습니다. 대신 gcloud CLI 또는 REST API를 사용합니다.

gcloud

gcloud iam service-accounts keys disable 명령어를 실행하여 사용하여 서비스 계정 키를 사용 중지합니다.

다음 값을 바꿉니다.

  • KEY_ID: 사용 중지할 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 사용 중지할 키를 확인한 다음 키의 ID를 복사하세요.
  • SA_NAME: 키가 속한 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys disable KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력:

Disabled key [KEY_ID] for service account
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

REST

projects.serviceAccounts.keys.disable 메서드는 서비스 계정 키를 사용 중지합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 사용 중지할 키가 포함된 서비스 계정의 이름입니다.
  • KEY_ID: 사용 중지할 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 사용 중지할 키를 찾은 다음 name 필드의 끝에서 키의 ID를 복사합니다. 키의 ID는 keys/ 이후의 모든 문자입니다.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID:disable

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
}

서비스 계정 키 사용 설정

서비스 계정 키를 사용 중지한 후 언제든지 키를 사용 설정할 수 있고, 키를 사용해서 Google API에 인증을 수행할 수 있습니다.

Google Cloud Console을 사용해서는 서비스 계정 키를 사용 설정할 수 없습니다. 대신 gcloud CLI 또는 REST API를 사용합니다.

gcloud

gcloud iam service-accounts keys enable 명령어를 실행하여 서비스 계정 키를 사용 설정합니다.

다음 값을 바꿉니다.

  • KEY_ID: 사용 설정할 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 사용 설정할 키를 확인한 다음 키의 ID를 복사하세요.
  • SA_NAME: 키가 속한 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys enable KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력:

Enabled key [KEY_ID] for service account
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

REST

projects.serviceAccounts.keys.enable 메서드는 서비스 계정 키를 사용 설정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 사용 설정할 키가 포함된 서비스 계정의 이름입니다.
  • KEY_ID: 사용 설정할 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 사용 설정할 키를 찾은 다음 name 필드의 끝에서 키의 ID를 복사합니다. 키의 ID는 keys/ 이후의 모든 문자입니다.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID:enable

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
}

서비스 계정 키 삭제

서비스 계정 키를 삭제하면 이 키를 사용하여 Google API에 인증을 수행할 수 없습니다.

삭제된 키는 삭제 취소할 수 없습니다. 키를 사용 중지한 후 키가 더 이상 필요하지 않은지 확인될 때까지 기다린 후에 키를 삭제하는 것이 좋습니다. 그런 후 키를 삭제할 수 있습니다.

권장사항에 따라 서비스 계정 키를 정기적으로 순환하는 것이 좋습니다. 다음을 수행하여 키를 순환할 수 있습니다.

  1. 새 키를 만듭니다.
  2. 새 키를 사용하도록 애플리케이션을 업데이트합니다.
  3. 이전 키를 사용 중지합니다.
  4. 이전 키가 더 이상 사용되지 않는 것이 확인될 때까지 충분히 기다립니다.
  5. 이전 키를 삭제합니다.

Console

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.
  3. 서비스 계정 페이지에서 키를 삭제할 서비스 계정의 이메일 주소를 클릭합니다.
  4. 탭을 클릭합니다.
  5. 키 목록에서 삭제할 키마다 삭제 를 클릭합니다.

gcloud

gcloud iam service-accounts keys delete 명령어를 실행하여 서비스 계정 키를 삭제합니다.

다음 값을 바꿉니다.

  • KEY_ID: 삭제할 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 삭제할 키를 확인한 다음 키의 ID를 복사하세요.
  • SA_NAME: 키가 속한 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys delete KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

출력:

Deleted key [KEY_ID] for service account
[SA_NAME@PROJECT_ID.iam.gserviceaccount.com]

REST

projects.serviceAccounts.keys.delete 메서드는 서비스 계정 키를 삭제합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SA_NAME: 키를 삭제하려는 서비스 계정의 이름입니다.
  • KEY_ID: 삭제하려는 키의 ID입니다. 키의 ID를 찾으려면 서비스 계정의 모든 키를 나열하고 삭제할 키를 찾은 다음 name 필드의 끝에서 키의 ID를 복사합니다. 키의 ID는 keys/ 이후의 모든 문자입니다.

HTTP 메서드 및 URL:

DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/KEY_ID

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
}

C++

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C++ API 참조 문서를 확인하세요.

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

C#

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class ServiceAccountKeys
{
    public static void DeleteKey(string fullKeyName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Execute();
        Console.WriteLine("Deleted key: " + fullKeyName);
    }
}

Go

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.

import (
	"context"
	"fmt"
	"io"

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

// deleteKey deletes a service account key.
func deleteKey(w io.Writer, fullKeyName string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %v", err)
	}

	_, err = service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Do()
	if err != nil {
		return fmt.Errorf("Projects.ServiceAccounts.Keys.Delete: %v", err)
	}
	fmt.Fprintf(w, "Deleted key: %v", fullKeyName)
	return nil
}

자바

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM 자바 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.ServiceAccountKey;
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 DeleteServiceAccountKey {

  // Deletes a service account key.
  public static void deleteKey(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 the name of the key using List() or Get()
      List<ServiceAccountKey> keys =
          service
              .projects()
              .serviceAccounts()
              .keys()
              .list("projects/-/serviceAccounts/" + serviceAccountEmail)
              .execute()
              .getKeys();
      String keyToDelete = keys.get(0).getName();

      // Then you can delete the key
      service.projects().serviceAccounts().keys().delete(keyToDelete).execute();

      System.out.println("Deleted key: " + keyToDelete);
    } catch (IOException e) {
      System.out.println("Unable to delete service account key: \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-account-keys")
            .build();
    return service;
  }
}

Python

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def delete_key(full_key_name):
    """Deletes a service account key."""

    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().keys().delete(
        name=full_key_name).execute()

    print('Deleted key: ' + full_key_name)

다음 단계

직접 사용해 보기

Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

무료로 시작하기