Menghapus dan membatalkan penghapusan akun layanan

Halaman ini menjelaskan cara menghapus dan membatalkan penghapusan akun layanan menggunakan API Identity and Access Management (IAM), Konsol Google Cloud, dan gcloud alat- command line.

Sebelum memulai

  • Aktifkan IAM API.

    Mengaktifkan API

  • Siapkan autentikasi.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    Anda dapat menggunakan sampel gcloud CLI di halaman ini dari salah satu lingkungan pengembangan berikut:

    • Cloud Shell: Untuk menggunakan terminal online dengan gcloud CLI yang sudah disiapkan, aktifkan Cloud Shell.

      Di bagian bawah halaman ini, sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi dimulai.

    • Shell lokal: Untuk menggunakan gcloud CLI di lingkungan pengembangan lokal, instal dan initialize gcloud CLI.

    C++

    Untuk menggunakan contoh C++ di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    C#

    Untuk menggunakan contoh .NET di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    Go

    Untuk menggunakan contoh Go di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    Java

    Untuk menggunakan contoh Java di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    Python

    Untuk menggunakan contoh Python di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

  • Memahami akun layanan IAM

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menghapus dan membatalkan penghapusan akun layanan, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Untuk mempelajari lebih lanjut tentang peran ini, lihat Peran Akun Layanan.

Peran dasar IAM juga berisi izin untuk mengelola akun layanan. Anda tidak boleh memberikan peran dasar dalam lingkungan produksi, tetapi Anda dapat memberikannya dalam lingkungan pengembangan atau pengujian.

Menghapus akun layanan

Saat Anda menghapus akun layanan, aplikasi tidak akan lagi memiliki akses ke resource Google Cloud melalui akun layanan tersebut. Jika Anda menghapus akun layanan App Engine dan Compute Engine default, aplikasi App Engine dan instance VM Compute Engine yang menggunakan akun layanan tersebut tidak akan lagi memiliki akses ke resource dalam project.

Hapus akun layanan dengan hati-hati. Sebelum menghapusnya, pastikan aplikasi penting Anda tidak lagi menggunakan akun layanan. Jika Anda tidak yakin apakah akun layanan sedang digunakan, sebaiknya nonaktifkan akun layanan, bukan menghapusnya. Akun layanan yang dinonaktifkan dapat diaktifkan kembali jika masih diperlukan.

Jika ingin memulihkan akun layanan yang telah dihapus, Anda dapat undelete akun tersebut, jika sudah 30 hari atau kurang sejak akun layanan dihapus. Setelah 30 hari, IAM akan menghapus akun layanan secara permanen. Google Cloud tidak dapat memulihkan akun layanan setelah dihapus secara permanen, meskipun Anda mengajukan permintaan dukungan.

Untuk mengurangi lebih lanjut risiko penghapusan akun layanan yang diperlukan, Anda juga dapat mengaktifkan rekomendasi risiko perubahan. Rekomendasi perubahan akan menampilkan peringatan saat Anda mencoba menghapus akun layanan yang diidentifikasi oleh Google Cloud sebagai penting.

Jika Anda menghapus akun layanan, lalu membuat akun layanan baru dengan nama yang sama, akun layanan baru tersebut akan diperlakukan sebagai identitas terpisah; akun ini tidak mewarisi peran yang diberikan ke akun layanan yang dihapus. Sebaliknya, jika Anda menghapus akun layanan, lalu membatalkan penghapusannya, identitas akun layanan tidak akan berubah, dan akun layanan tetap memiliki perannya.

Saat akun layanan dihapus, binding perannya tidak segera dihapus; mereka secara otomatis dihapus permanen dari sistem setelah maksimum 60 hari. Sampai saat itu, akun layanan muncul dalam binding peran dengan imbuhan deleted: dan akhiran ?uid=NUMERIC_ID, dengan NUMERIC_ID adalah ID numerik unik untuk akun layanan.

Akun layanan yang dihapus tidak mengurangi kuota akun layanan Anda.

Konsol

  1. Di Konsol Google Cloud, buka halaman Service accounts.

    Buka halaman Service accounts

  2. Pilih project.

  3. Pilih akun layanan yang ingin Anda hapus, lalu klik Hapus .

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Jalankan perintah gcloud iam service-accounts delete untuk menghapus akun layanan.

    Perintah:

    gcloud iam service-accounts delete \
        SA_NAME@PROJECT_ID.iam.gserviceaccount.com

    Output:

    Deleted service account SA_NAME@PROJECT_ID.iam.gserviceaccount.com

C++

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API C++ IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

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#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API C# IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Go IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Java IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.iam.v1.Iam;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class DeleteServiceAccount {

  // Deletes a service account.
  public static void deleteServiceAccount(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 {
      service
          .projects()
          .serviceAccounts()
          .delete("projects/-/serviceAccounts/" + serviceAccountEmail)
          .execute();

      System.out.println("Deleted service account: " + serviceAccountEmail);
    } catch (IOException e) {
      System.out.println("Unable to delete service account: \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(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk IAM, lihat library klien IAM. Untuk informasi selengkapnya, lihat dokumentasi referensi API Python IAM.

Untuk melakukan autentikasi ke IAM, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

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

Metode serviceAccounts.delete menghapus akun layanan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.
  • SA_ID: ID akun layanan Anda. Ini dapat berupa alamat email akun layanan dalam format SA_NAME@PROJECT_ID.iam.gserviceaccount.com, atau ID numerik unik akun layanan.

Metode HTTP dan URL:

DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Jika berhasil, isi respons akan kosong.

Membatalkan penghapusan akun layanan

Dalam beberapa kasus, Anda dapat menggunakan perintah undelete untuk membatalkan penghapusan akun layanan yang dihapus. Anda biasanya dapat membatalkan penghapusan akun layanan yang dihapus jika memenuhi kriteria berikut:

  • Akun layanan dihapus kurang dari 30 hari yang lalu.

    Setelah 30 hari, IAM akan menghapus akun layanan secara permanen. Google Cloud tidak dapat memulihkan akun layanan setelah dihapus secara permanen, meskipun Anda mengajukan permintaan dukungan.

  • Tidak ada akun layanan dengan nama yang sama seperti akun layanan yang dihapus.

    Misalnya, Anda tidak sengaja menghapus akun layanan my-service-account@project-id.iam.gserviceaccount.com. Anda masih memerlukan akun layanan dengan nama tersebut, jadi Anda membuat akun layanan baru dengan nama yang sama, my-service-account@project-id.iam.gserviceaccount.com.

    Akun layanan baru tidak mewarisi izin dari akun layanan yang dihapus. Akibatnya, akun layanan ini sepenuhnya terpisah dari akun layanan yang dihapus. Namun, Anda tidak dapat membatalkan penghapusan akun layanan asli karena akun layanan yang baru memiliki nama yang sama.

    Untuk mengatasi masalah ini, hapus akun layanan baru, lalu coba batalkan penghapusan akun layanan asli.

Jika tidak dapat membatalkan penghapusan akun layanan, Anda dapat membuat akun layanan baru dengan nama yang sama; mencabut semua peran dari akun layanan yang dihapus; dan memberikan peran yang sama ke akun layanan yang baru. Untuk mengetahui detailnya, lihat Kebijakan dengan akun utama yang dihapus.

Menemukan ID numerik akun layanan yang dihapus

Saat membatalkan penghapusan akun layanan, Anda harus memberikan ID numeriknya. ID numerik adalah angka 21 digit, seperti 123456789012345678901, yang mengidentifikasi akun layanan secara unik. Misalnya, jika Anda menghapus akun layanan, lalu membuat akun layanan baru dengan nama yang sama, akun layanan asli dan akun layanan baru akan memiliki ID numerik yang berbeda.

Jika mengetahui bahwa binding dalam kebijakan izinkan mencakup akun layanan yang dihapus, Anda bisa mendapatkan kebijakan izinkan, lalu menemukan ID numerik di kebijakan izinkan. ID numerik ditambahkan ke nama akun layanan yang dihapus. Misalnya, dalam kebijakan izin ini, ID numerik untuk akun layanan yang dihapus adalah 123456789012345678901:

{
  "version": 1,
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "members": [
        "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901"
      ],
      "role": "roles/iam.serviceAccountUser"
    },
  ]
}

ID numerik hanya ditambahkan ke nama akun utama yang dihapus.

Atau, Anda dapat menelusuri operasi DeleteServiceAccount yang menghapus akun layanan di log audit:

  1. Di Konsol Google Cloud, buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Di editor kueri, masukkan kueri berikut, dengan mengganti SERVICE_ACCOUNT_EMAIL dengan alamat email akun layanan Anda (misalnya, my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Jika akun layanan dihapus lebih dari satu jam yang lalu, klik schedule 1 jam terakhir, pilih jangka waktu yang lebih lama dari menu drop-down, lalu klik Terapkan.

  4. Klik Jalankan kueri. Logs Explorer menampilkan operasi DeleteServiceAccount yang memengaruhi akun layanan dengan nama yang Anda tentukan.

  5. Temukan dan catat ID numerik akun layanan yang dihapus dengan melakukan salah satu hal berikut:

    • Jika hasil penelusuran hanya menyertakan satu operasi DeleteServiceAccount, cari ID numerik di kolom ID unik pada panel Kolom log.

    • Jika hasil penelusuran menampilkan lebih dari satu log, lakukan hal berikut:

      1. Temukan entri log yang benar. Untuk menemukan entri log yang benar, klik panah peluas di samping entri log. Tinjau detail entri log dan tentukan apakah entri log menunjukkan operasi yang ingin Anda urungkan. Ulangi proses ini sampai Anda menemukan entri log yang benar.

      2. Di entri log yang benar, temukan ID numerik akun layanan. Untuk menemukan ID numerik, luaskan kolom protoPayload entri log, lalu cari kolom resourceName.

        ID numerik adalah semuanya setelah serviceAccounts di kolom resourceName.

Membatalkan penghapusan akun layanan berdasarkan ID numerik

Setelah menemukan ID numerik untuk akun layanan yang dihapus, Anda dapat mencoba membatalkan penghapusan akun layanan.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Jalankan perintah gcloud beta iam service-accounts undelete untuk membatalkan penghapusan akun layanan.

    Perintah:

    gcloud beta iam service-accounts undelete ACCOUNT_ID

    Output:

    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

Metode serviceAccounts.undelete memulihkan akun layanan yang dihapus.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.
  • SA_NUMERIC_ID: ID numerik unik akun layanan.

Metode HTTP dan URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NUMERIC_ID:undelete

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Jika penghapusan akun dapat dibatalkan, Anda akan menerima kode respons 200 OK beserta detail tentang akun layanan yang dipulihkan, seperti berikut:

{
  "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"
  }
}

Langkah selanjutnya

Cobalah sendiri

Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.

Mulai secara gratis