서비스 계정 키 생성 및 삭제

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

시작하기 전에

  • Enable the IAM API.

    Enable the API

  • 인증을 설정합니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    C#

    로컬 개발 환경에서 이 페이지의 .NET 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경용 ADC 설정을 참고하세요.

    C++

    로컬 개발 환경에서 이 페이지의 C++ 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경용 ADC 설정을 참고하세요.

    Go

    로컬 개발 환경에서 이 페이지의 Go 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경용 ADC 설정을 참고하세요.

    Java

    로컬 개발 환경에서 이 페이지의 Java 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경용 ADC 설정을 참고하세요.

    Python

    로컬 개발 환경에서 이 페이지의 Python 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경용 ADC 설정을 참고하세요.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참고하세요.

  • 서비스 계정 사용자 인증 정보에 대해 이해해야 합니다.

필요한 역할

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

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

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

조직 정책 구성에 따라 키를 만들기 전에 프로젝트에서 서비스 계정 키 생성을 허용해야 할 수도 있습니다.

프로젝트에서 서비스 계정 키 생성을 허용하는 데 필요한 권한을 얻으려면 관리자에게 조직에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 프로젝트에서 서비스 계정 키 생성을 허용하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

프로젝트에서 서비스 계정 키 생성을 허용하려면 다음 권한이 필요합니다.

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • resourcemanager.organizations.get
  • resourcemanager.projects.listTagBindings
  • resourcemanager.projects.listEffectiveTags
  • resourcemanager.tagKeys.get
  • resourcemanager.tagKeys.list
  • resourcemanager.tagValues.list
  • resourcemanager.tagValues.get

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

서비스 계정 키 생성 허용

서비스 계정 키를 만들기 전에 프로젝트에 iam.disableServiceAccountKeyCreation 조직 정책 제약 조건이 적용되지 않았는지 확인합니다. 프로젝트에 이 제약 조건이 적용되면 해당 프로젝트에서 서비스 계정 키를 만들 수 없습니다.

서비스 계정 키가 실제로 필요한 프로젝트만 제외하고 대부분의 프로젝트에 이 제약 조건을 적용하는 것이 좋습니다. 대체 인증 방법에 관한 자세한 내용은 사용 사례에 적합한 인증 방법 선택을 참고하세요.

프로젝트를 iam.disableServiceAccountKeyCreation 조직 정책 제약 조건에서 제외하려면 조직 정책 관리자에게 다음을 요청하세요.

  1. 조직 수준에서 리소스를 조직 정책에서 제외할지 여부를 정의하는 데 사용할 태그 키와 태그 값을 만듭니다. disableServiceAccountKeyCreation 키와 enforcednot_enforced 값으로 태그를 만드는 것이 좋습니다.

    태그 키와 태그 값을 만드는 방법은 새 태그 만들기 및 정의를 참조하세요.

  2. disableServiceAccountKeyCreation 태그를 조직에 연결하고 값을 enforced로 설정합니다. 다른 태그 값으로 덮어쓰지 않는 한 조직의 모든 리소스에서 이 태그 값을 상속합니다.

    태그를 리소스에 연결하는 방법은 리소스에 태그 연결을 참조하세요.

  3. 조직 정책에서 제외하려는 프로젝트나 폴더마다 disableServiceAccountKeyCreation 태그를 연결하고 값을 not_enforced로 설정합니다. 이러한 방식으로 프로젝트나 폴더의 태그 값을 설정하면 조직에서 상속된 태그 값이 재정의됩니다.
  4. 예외 리소스에 대한 제약 조건을 적용하지 않도록 서비스 계정 키 생성을 방지하는 조직 정책을 만들거나 업데이트합니다. 이 정책에는 다음 규칙이 있어야 합니다.

    • disableServiceAccountKeyCreation: not_enforced 태그가 있는 리소스에 적용되지 않도록 iam.disableServiceAccountKeyCreation 제약 조건을 구성합니다. 이 규칙의 조건은 다음과 같이 표시됩니다.

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
      
    • 다른 모든 리소스에 적용되도록 iam.disableServiceAccountKeyCreation 제약 조건을 구성합니다.

서비스 계정 키 만들기

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

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

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

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

콘솔

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

    서비스 계정으로 이동

    나머지 단계는 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://oauth2.googleapis.com/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"
}

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

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

C++

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

namespace iam = ::google::cloud::iam_admin_v1;
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::move(response).status();
  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 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.


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 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

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: %w", 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: %w", 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
}

Java

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.gson.Gson;
import com.google.iam.admin.v1.CreateServiceAccountKeyRequest;
import com.google.iam.admin.v1.ServiceAccountKey;
import java.io.IOException;

public class CreateServiceAccountKey {

  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";

    ServiceAccountKey key = createKey(projectId, serviceAccountName);
    Gson gson = new Gson();

    // System.out.println("Service account key: " + gson.toJson(key));
  }

  // Creates a key for a service account.
  public static ServiceAccountKey createKey(String projectId, String accountName)
          throws IOException {
    String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      CreateServiceAccountKeyRequest req = CreateServiceAccountKeyRequest.newBuilder()
              .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
              .build();
      ServiceAccountKey createdKey = iamClient.createServiceAccountKey(req);
      System.out.println("Key created successfully");

      return createdKey;
    }
  }
}

Python

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

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


def create_key(project_id: str, account: str) -> types.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.CreateServiceAccountKeyRequest()
    request.name = f"projects/{project_id}/serviceAccounts/{account}"

    key = iam_admin_client.create_service_account_key(request=request)

    # The private_key_data field contains the stringified service account key
    # in JSON format. You cannot download it again later.
    # If you want to get the value, you can do it in a following way:
    # import json
    # json_key_data = json.loads(key.private_key_data)
    # key_id = json_key_data["private_key_id"]

    return key

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을 사용합니다.

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

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

서비스 계정 키 삭제

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

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

권장사항에 따라 서비스 계정 키를 정기적으로 순환하는 것이 좋습니다. 서비스 계정 키 순환에 대해 자세히 알아보려면 서비스 계정 키 순환을 참조하세요.

콘솔

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

    서비스 계정으로 이동

    나머지 단계는 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]

C++

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

namespace iam = ::google::cloud::iam_admin_v1;
[](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 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.


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 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

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: %w", err)
	}

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

Java

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteServiceAccountKeyRequest;
import com.google.iam.admin.v1.KeyName;
import java.io.IOException;

public class DeleteServiceAccountKey {

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

    deleteKey(projectId, serviceAccountName, serviceAccountKeyId);
  }

  // Deletes a service account key.
  public static void deleteKey(String projectId, String accountName,
                               String serviceAccountKeyId) 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.
    try (IAMClient iamClient = IAMClient.create()) {

      //Construct the service account email.
      //You can modify the ".iam.gserviceaccount.com" to match the service account name in which
      //you want to delete the key.
      //See, https://cloud.google.com/iam/docs/creating-managing-service-account-keys#deleting

      String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);

      String name = KeyName.of(projectId, accountEmail, serviceAccountKeyId).toString();

      DeleteServiceAccountKeyRequest request = DeleteServiceAccountKeyRequest.newBuilder()
              .setName(name)
              .build();

      // Then you can delete the key
      iamClient.deleteServiceAccountKey(request);

      System.out.println("Deleted key: " + serviceAccountKeyId);
    }
  }
}

Python

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

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

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


def delete_key(project_id: str, account: str, key_id: str) -> None:
    """
    Deletes 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.
    key_id: unique ID of the key.
    """

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

    iam_admin_client.delete_service_account_key(request=request)
    print(f"Deleted key: {key_id}")

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 응답이 표시됩니다.

{
}

다음 단계

직접 사용해 보기

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

무료로 시작하기