Menonaktifkan dan mengaktifkan kunci akun layanan

Halaman ini menjelaskan cara menonaktifkan dan mengaktifkan kunci akun layanan menggunakan konsol Google Cloud, Google Cloud CLI, Identity and Access Management API, atau salah satu Library Klien Google Cloud.

Sebelum memulai

  • Aktifkan IAM API.

    Mengaktifkan API

  • Siapkan autentikasi.

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

    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.

    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.

    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 kredensial akun layanan.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menonaktifkan dan mengaktifkan kunci akun layanan, minta administrator untuk memberikan Anda Admin Kunci Akun Layanan (roles/iam.serviceAccountKeyAdmin) peran IAM pada project, atau akun layanan yang kuncinya ingin Anda kelola. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.

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

Untuk mengetahui informasi selengkapnya, lihat peran Service Accounts.

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

Menonaktifkan kunci akun layanan

Jika kunci akun layanan dinonaktifkan, Anda tidak dapat menggunakan kunci tersebut untuk melakukan autentikasi dengan Google API. Anda dapat mengaktifkan kunci yang dinonaktifkan kapan saja.

Sebelum menghapus kunci akun layanan, sebaiknya Anda menonaktifkan kunci tersebut, lalu tunggu hingga Anda yakin bahwa kunci tersebut tidak lagi diperlukan. Kemudian, Anda dapat menghapus kunci tersebut.

Anda dapat melihat kunci yang dinonaktifkan di konsol Google Cloud, tetapi Anda tidak dapat menggunakan konsol Google Cloud untuk menonaktifkan kunci. Gunakan gcloud CLI atau REST API sebagai gantinya.

gcloud

Jalankan perintah gcloud iam service-accounts keys disable untuk menonaktifkan kunci akun layanan.

Ganti nilai berikut:

  • KEY_ID: ID kunci yang akan dinonaktifkan. Untuk menemukan ID kunci tersebut, cantumkan semua kunci untuk akun layanan, identifikasi kunci yang ingin dinonaktifkan, lalu salin ID-nya.
  • SA_NAME: Nama akun layanan yang memiliki kunci tersebut.
  • PROJECT_ID: ID project Google Cloud Anda.
gcloud iam service-accounts keys disable KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --project=PROJECT_ID

Output:

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

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.api.services.iam.v1.model.DisableServiceAccountKeyRequest;
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 DisableServiceAccountKey {

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

    disableServiceAccountKey(projectId, serviceAccountName, serviceAccountKeyName);
  }

  // Disables a service account key.
  public static void disableServiceAccountKey(String projectId, String serviceAccountName,
      String serviceAccountKeyName) {
    // Initialize the IAM service.
    Iam service = null;
    try {
      service = initService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e);
      return;
    }

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the service account name in which
    // you want to disable the key.
    // See, https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=en#disabling
    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";

    try {
      DisableServiceAccountKeyRequest
          disableServiceAccountKeyRequest = new DisableServiceAccountKeyRequest();
      // Use the IAM service to disable the service account key.
      service
          .projects()
          .serviceAccounts()
          .keys()
          .disable(String
              .format("projects/%s/serviceAccounts/%s/keys/%s", projectId, serviceAccountEmail,
                  serviceAccountKeyName), disableServiceAccountKeyRequest)
          .execute();

      System.out.println("Disabled service account key: " + serviceAccountKeyName);
    } catch (IOException e) {
      System.out.println("Failed to disable service account key: \n" + e);
    }
  }

  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.
    return new Iam.Builder(
        GoogleNetHttpTransport.newTrustedTransport(),
        GsonFactory.getDefaultInstance(),
        new HttpCredentialsAdapter(credential))
        .setApplicationName("service-accounts")
        .build();
  }
}

REST

Metode projects.serviceAccounts.keys.disable menonaktifkan kunci 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_NAME: Nama akun layanan yang kuncinya ingin Anda nonaktifkan.
  • KEY_ID: ID kunci yang ingin dinonaktifkan. Untuk menemukan ID kunci, cantumkan semua kunci untuk akun layanan, identifikasi kunci yang ingin dinonaktifkan, lalu salin ID-nya dari bagian akhir kolom name. ID kunci adalah semua yang ada setelah keys/.

Metode HTTP dan URL:

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

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
}

Aktifkan kunci akun layanan

Setelah menonaktifkan kunci akun layanan, Anda dapat mengaktifkan kunci tersebut kapan saja, lalu menggunakan kunci tersebut untuk mengautentikasi dengan Google API.

Anda tidak dapat menggunakan konsol Google Cloud untuk mengaktifkan kunci akun layanan. Gunakan gcloud CLI atau REST API sebagai gantinya.

gcloud

Jalankan perintah gcloud iam service-accounts keys enable untuk mengaktifkan kunci akun layanan.

Ganti nilai berikut:

  • KEY_ID: ID kunci yang akan diaktifkan. Untuk menemukan ID kunci tersebut, cantumkan semua kunci untuk akun layanan, identifikasi kunci yang ingin diaktifkan, lalu salin ID-nya.
  • SA_NAME: Nama akun layanan yang memiliki kunci tersebut.
  • PROJECT_ID: Project ID Google Cloud Anda
gcloud iam service-accounts keys enable KEY_ID \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com\
    --project=PROJECT_ID

Output:

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

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.api.services.iam.v1.model.EnableServiceAccountKeyRequest;
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 EnableServiceAccountKey {

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

    enableServiceAccountKey(projectId, serviceAccountName, serviceAccountKeyName);
  }

  // Enables a service account key.
  public static void enableServiceAccountKey(String projectId, String serviceAccountName,
      String serviceAccountKeyName) {
    // Initialize the IAM service.
    Iam service = null;
    try {
      service = initService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e);
      return;
    }

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the service account name in which
    // you want to enable the key.
    // See, https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=en#enabling
    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";

    try {
      EnableServiceAccountKeyRequest
          enableServiceAccountKeyRequest = new EnableServiceAccountKeyRequest();
      // Use the IAM service to enable the service account key.
      service
          .projects()
          .serviceAccounts()
          .keys()
          .enable(String
              .format("projects/%s/serviceAccounts/%s/keys/%s", projectId, serviceAccountEmail,
                  serviceAccountKeyName), enableServiceAccountKeyRequest)
          .execute();

      System.out.println("Enabled service account key: " + serviceAccountKeyName);
    } catch (IOException e) {
      System.out.println("Failed to enable service account key: \n" + e);
    }
  }

  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.
    return new Iam.Builder(
        GoogleNetHttpTransport.newTrustedTransport(),
        GsonFactory.getDefaultInstance(),
        new HttpCredentialsAdapter(credential))
        .setApplicationName("service-accounts")
        .build();
  }
}

REST

Metode projects.serviceAccounts.keys.enable akan mengaktifkan kunci 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_NAME: Nama akun layanan yang kuncinya ingin Anda aktifkan.
  • KEY_ID: ID kunci yang ingin Anda aktifkan. Untuk menemukan ID kunci, cantumkan semua kunci untuk akun layanan, identifikasi kunci yang ingin diaktifkan, lalu salin ID-nya dari bagian akhir kolom name. ID kunci adalah semua yang ada setelah keys/.

Metode HTTP dan URL:

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

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
}

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