서비스 계정 삭제 및 삭제 취소

이 페이지에서는 Identity and Access Management(IAM) API, Google Cloud 콘솔, gcloud 명령줄 도구를 사용하여 서비스 계정을 삭제하고 삭제 취소하는 방법을 설명합니다.

시작하기 전에

  • 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++

    이 페이지의 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 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    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 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    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 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    자바

    이 페이지의 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 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    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 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    REST

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

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

      gcloud init

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

  • IAM 서비스 계정 이해

필요한 역할

서비스 계정을 삭제하고 삭제 취소하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

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

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

IAM 기본 역할도 서비스 계정을 관리하는 권한을 포함하지만, 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경 또는 테스트 환경에서는 부여해도 됩니다.

서비스 계정 삭제

서비스 계정을 삭제하면 애플리케이션에서 해당 서비스 계정을 통해 Google Cloud 리소스에 더 이상 액세스할 수 없습니다. 기본 App Engine 및 Compute Engine 서비스 계정을 삭제하면 해당 서비스 계정을 사용하는 App Engine 앱 및 Compute Engine VM 인스턴스가 더 이상 프로젝트의 리소스에 액세스할 수 없습니다.

서비스 계정은 신중하게 삭제합니다. 서비스 계정을 삭제하기 전에 중요한 애플리케이션이 해당 계정을 더 이상 사용하지 않는지 확인합니다. 서비스 계정이 사용 중인지 확실하지 않으면 삭제하는 대신 서비스 계정을 사용 중지하는 것이 좋습니다. 사용 중지된 서비스 계정은 필요한 경우 다시 사용할 수 있습니다.

삭제된 서비스 계정을 복원하려면 서비스 계정을 삭제한 후 30일이 지나지 않은 경우 삭제 취소할 수 있습니다. 30일이 지나면 IAM에서 서비스 계정을 영구적으로 삭제합니다. 영구 삭제되면 지원 요청을 제출해도 Google Cloud에서 서비스 계정을 복원하지 못합니다.

또한 필수 서비스 계정을 삭제할 위험을 더 줄이기 위해서는 변경 위험 권장사항을 사용 설정하면 됩니다. 변경 위험 권장사항은 Google Cloud에서 중요하다고 판단한 서비스 계정을 삭제하려고 시도할 때 경고를 생성합니다.

서비스 계정을 삭제하고 동일한 이름으로 새로운 서비스 계정을 만들면 새 서비스 계정이 개별 ID로 취급되고, 삭제된 서비스 계정에 부여되었던 역할을 상속하지 않습니다. 반면에 서비스 계정을 삭제하고, 이를 삭제 취소하면 서비스 계정의 ID가 변경되지 않고 서비스 계정이 해당 역할을 그대로 갖고 있습니다.

서비스 계정을 삭제할 때 역할 바인딩은 바로 삭제되지 않으며 최대 60일 후에 시스템에서 자동으로 삭제됩니다. 그 때까지는 서비스 계정이 deleted: 프리픽스와 ?uid=NUMERIC_ID 서픽스가 있는 역할 바인딩에 표시됩니다. 여기서 NUMERIC_ID는 서비스 계정의 고유 숫자 ID입니다.

삭제된 서비스 계정은 서비스 계정 할당량에 포함되지 않습니다.

콘솔

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

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.

  3. 삭제할 서비스 계정을 선택하고 삭제를 클릭합니다.

gcloud

  1. 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.

  2. 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

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.DeleteServiceAccount(name);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully deleted.\n";
}

C#

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

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


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

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

        string resource = "projects/-/serviceAccounts/" + email;
        service.Projects.ServiceAccounts.Delete(resource).Execute();
        Console.WriteLine("Deleted service account: " + email);
    }
}

Go

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

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

import (
	"context"
	"fmt"
	"io"

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

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

	_, err = service.Projects.ServiceAccounts.Delete("projects/-/serviceAccounts/" + email).Do()
	if err != nil {
		return fmt.Errorf("Projects.ServiceAccounts.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted service account: %v", email)
	return nil
}

Java

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

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

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteServiceAccountRequest;
import com.google.iam.admin.v1.ServiceAccountName;
import java.io.IOException;

public class DeleteServiceAccount {

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

    deleteServiceAccount(projectId, serviceAccountName);
  }

  // Deletes a service account.
  public static void deleteServiceAccount(String projectId, String serviceAccountName)
          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 client = IAMClient.create()) {
      String accountName = ServiceAccountName.of(projectId, serviceAccountName).toString();
      String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
      DeleteServiceAccountRequest request = DeleteServiceAccountRequest.newBuilder()
              .setName(accountEmail)
              .build();
      client.deleteServiceAccount(request);

      System.out.println("Deleted service account: " + serviceAccountName);
    }
  }
}

Python

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

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

import os

from google.oauth2 import service_account  # type: ignore
import googleapiclient.discovery  # type: ignore

def delete_service_account(email: str) -> None:
    """Deletes 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)

    service.projects().serviceAccounts().delete(
        name="projects/-/serviceAccounts/" + email
    ).execute()

    print("Deleted service account: " + email)

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

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

성공한 경우 응답 본문은 비어 있습니다.

서비스 계정 삭제 취소

경우에 따라 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 작업의 감사 로그를 검색할 수 있습니다.

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리 편집기에서 다음 쿼리를 입력합니다. 여기서 SERVICE_ACCOUNT_EMAIL을 서비스 계정의 이메일 주소(예: my-service-account@project-id.iam.gserviceaccount.com)로 바꿉니다.

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. 서비스 계정이 삭제된 지 1시간이 초과되었으면 schedule 지난 1시간 드롭다운 목록에서 더 긴 기간을 선택한 다음 적용을 클릭합니다.

  4. 쿼리 실행을 클릭합니다. 로그 탐색기에는 지정한 이름의 서비스 계정에 영향을 준 DeleteServiceAccount 작업이 표시됩니다.

  5. 다음 중 하나를 수행하여 삭제된 서비스 계정의 숫자 ID를 찾아 기록합니다.

    • 검색 결과에 DeleteServiceAccount 작업이 한 개만 있으면 로그 필드 창의 고유 ID 필드에서 숫자 ID를 찾습니다.

    • 검색 결과에 로그가 두 개 이상 표시되면 다음을 수행합니다.

      1. 올바른 로그 항목을 찾습니다. 올바른 로그 항목을 찾으려면 로그 항목 옆에 있는 펼치기 화살표를 클릭합니다. 로그 항목의 세부정보를 검토하고 로그 항목에 실행취소할 작업을 표시할지 여부를 결정합니다. 올바른 로그 항목을 찾을 때까지 이 프로세스를 반복합니다.

      2. 올바른 로그 항목에서 서비스 계정의 숫자 ID를 찾습니다. 숫자 ID를 찾으려면 로그 항목의 protoPayload 필드를 펼친 후 resourceName 필드를 찾습니다.

        숫자 ID는 resourceName 필드에서 serviceAccounts 다음에 오는 모든 문자입니다.

숫자 ID로 서비스 계정 삭제 취소

삭제된 서비스 계정의 숫자 ID를 찾았으면 서비스 계정을 삭제 취소할 수 있습니다.

gcloud

  1. 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.

  2. 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"
  }
}

다음 단계

직접 사용해 보기

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

무료로 시작하기