Mengelola akses ke akun layanan

Halaman ini menjelaskan cara memberikan, mengubah, dan mencabut akses akun utama ke satu akun layanan. Untuk mengelola akses akun utama ke semua akun layanan dalam project, folder, atau organisasi, kelola aksesnya di tingkat project, folder, atau organisasi.

Dalam Identity and Access Management (IAM), akses dikelola melalui kebijakan izin, yang juga dikenal sebagai kebijakan IAM. Kebijakan izinkan dilampirkan ke resource Google Cloud. Setiap kebijakan izinkan berisi kumpulan binding peran yang mengaitkan satu atau beberapa akun utama, seperti pengguna atau akun layanan, dengan peran IAM. Binding peran ini memberikan peran yang ditentukan kepada akun utama, baik pada resource yang dilampirkan oleh kebijakan yang diizinkan dan pada semua turunan resource tersebut. Untuk informasi selengkapnya tentang kebijakan perizinan, lihat Memahami kebijakan izin.

Akun layanan adalah resource yang dapat diakses oleh akun utama lain, dan akun utama yang dapat diberi akses ke resource lainnya. Halaman ini memperlakukan akun layanan sebagai resource dan menjelaskan cara memberikan akses kepada akun utama lain. Untuk mempelajari cara memberi akun layanan akses ke resource lain, lihat panduan berikut:

Halaman ini menjelaskan cara mengelola akses ke akun layanan menggunakan Google Cloud Console, Google Cloud CLI, dan REST API. Anda juga dapat mengelola akses menggunakan library klien IAM.

Sebelum memulai

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengelola akses ke akun layanan, minta administrator untuk memberi Anda Admin Akun Layanan (roles/iam.serviceAccountAdmin) peran IAM pada akun layanan atau project yang memiliki akun layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk mengelola akses ke akun layanan. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola akses ke akun layanan:

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Lihat akses saat ini

Bagian berikut menunjukkan cara menggunakan Google Cloud Console, gcloud CLI, dan REST API untuk melihat siapa saja yang memiliki akses ke akun layanan. Anda juga dapat melihat akses menggunakan library klien IAM untuk mendapatkan kebijakan izinkan akun layanan.

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan.

  4. Buka tab Izin. Bagian Principals dengan akses ke akun layanan ini mencantumkan semua akun utama yang telah diberi peran di akun layanan.

    Daftar ini mencakup akun utama yang aksesnya berasal dari peran yang diberikan pada resource induk. Untuk informasi selengkapnya mengenai pewarisan kebijakan, lihat Pewarisan kebijakan dan hierarki resource.

  5. Opsional: Untuk melihat pemberian peran bagi agen layanan, pilih kotak centang Sertakan pemberian peran yang disediakan Google.

gcloud

Untuk melihat siapa yang memiliki akses ke akun layanan Anda dapatkan kebijakan izinkan untuk akun layanan. Untuk mempelajari cara menafsirkan kebijakan izinkan, lihat Memahami kebijakan izinkan.

Untuk mendapatkan kebijakan izinkan akun layanan, jalankan get-iam-policy perintah untuk akun layanan:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Berikan nilai berikut:

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

  • FORMAT: Format untuk kebijakan. Gunakan json atau yaml.

  • PATH: Jalur ke file output baru untuk kebijakan.

Contohnya, perintah berikut mendapatkan kebijakan untuk akun layanan my-service-account dan menyimpannya ke direktori beranda Anda dalam format JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

Untuk melihat siapa yang memiliki akses ke akun layanan Anda dapatkan kebijakan izinkan untuk akun layanan. Untuk mempelajari cara menafsirkan kebijakan izinkan, lihat Memahami kebijakan izinkan.

Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin 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.

  • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izinkan akun layanan. Contoh:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

Memberikan atau mencabut satu peran

Anda dapat menggunakan Google Cloud Console dan gcloud CLI untuk memberikan atau mencabut satu peran dengan cepat untuk satu akun utama, tanpa mengedit kebijakan izinkan akun layanan secara langsung. Jenis akun utama yang umum meliputi Akun Google, akun layanan, grup Google, dan domain. Untuk daftar semua jenis akun utama, lihat Konsep yang terkait dengan identitas.

Secara umum, perubahan kebijakan akan berlaku dalam waktu 2 menit. Namun, dalam beberapa kasus, diperlukan 7 menit atau lebih untuk mengubah seluruh penerapan pada sistem.

Jika Anda memerlukan bantuan untuk mengidentifikasi peran bawaan yang paling sesuai, lihat Memilih peran bawaan.

Memberikan satu peran

Untuk memberikan satu peran ke akun utama, lakukan hal berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan.

  4. Buka tab Izin dan temukan bagian Akun utama yang memiliki akses ke akun layanan ini.

  5. Pilih akun utama yang akan diberi peran:

    • Untuk memberikan peran kepada akun utama yang sudah memiliki peran lain di akun layanan, temukan baris yang berisi akun utama, lalu klik Edit akun utama di baris, lalu klik Tambahkan peran lain.

      Untuk memberikan peran ke agen layanan, pilih kotak centang Sertakan pemberian peran yang disediakan Google untuk melihat alamat emailnya.

    • Untuk memberikan peran kepada akun utama yang tidak memiliki peran apa pun di akun layanan, klik Berikan akses, lalu masukkan ID untuk akun utama—misalnya, my-user@example.com.

  6. Pilih peran yang akan diberikan dari menu drop-down. Untuk praktik keamanan terbaik, pilih peran yang hanya menyertakan izin yang diperlukan oleh akun utama Anda.

  7. Opsional: Tambahkan kondisi ke peran.

  8. Klik Simpan. akun utama diberi peran pada akun layanan.

gcloud

Untuk memberikan peran kepada akun utama dengan cepat, jalankan perintah add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

Berikan nilai berikut:

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

  • PRINCIPAL: ID untuk akun utama, atau anggota, yang biasanya memiliki bentuk berikut: PRINCIPAL-TYPE:ID. Misalnya, user:my-user@example.com. Untuk daftar lengkap nilai yang dapat dimiliki PRINCIPAL, lihat ID utama.

    Untuk jenis akun utama user, nama domain dalam ID harus berupa domain Google Workspace atau domain Cloud Identity. Untuk mempelajari cara menyiapkan domain Cloud Identity, lihat ringkasan Cloud Identity.

  • ROLE_NAME: Nama peran yang ingin Anda berikan. Gunakan salah satu format berikut:

    • Peran bawaan: roles/SERVICE.IDENTIFIER
    • Peran khusus level project: projects/PROJECT_ID/roles/IDENTIFIER
    • Peran khusus tingkat organisasi: organizations/ORG_ID/roles/IDENTIFIER

    Untuk daftar peran yang telah ditetapkan, lihat Memahami peran.

  • CONDITION: Opsional. Kondisi yang akan ditambahkan ke binding peran. Untuk mengetahui informasi selengkapnya tentang kondisi, lihat ringkasan kondisi.

Misalnya, untuk memberikan peran Service Account User kepada pengguna my-user@example.com untuk akun layanan my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Mencabut satu peran

Untuk mencabut peran tunggal dari akun utama, lakukan hal berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan.

  4. Buka tab Izin dan temukan bagian Akun utama yang memiliki akses ke akun layanan ini.

  5. Cari baris yang berisi akun utama yang aksesnya ingin Anda cabut. Kemudian, klik Edit akun utama di baris tersebut.

  6. Klik tombol Delete untuk peran yang ingin Anda cabut, lalu klik Save.

gcloud

Untuk mencabut peran dari pengguna dengan cepat, jalankan perintah remove-iam-policy-binding:

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME

Berikan nilai berikut:

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

  • PRINCIPAL: ID untuk akun utama, atau anggota, yang biasanya memiliki bentuk berikut: PRINCIPAL-TYPE:ID. Misalnya, user:my-user@example.com. Untuk daftar lengkap nilai yang dapat dimiliki PRINCIPAL, lihat ID utama.

    Untuk jenis akun utama user, nama domain dalam ID harus berupa domain Google Workspace atau domain Cloud Identity. Untuk mempelajari cara menyiapkan domain Cloud Identity, lihat ringkasan Cloud Identity.

  • ROLE_NAME: Nama peran yang ingin Anda cabut. Gunakan salah satu format berikut:

    • Peran bawaan: roles/SERVICE.IDENTIFIER
    • Peran khusus level project: projects/PROJECT_ID/roles/IDENTIFIER
    • Peran khusus tingkat organisasi: organizations/ORG_ID/roles/IDENTIFIER

    Untuk daftar peran yang telah ditetapkan, lihat Memahami peran.

Misalnya, untuk mencabut peran Pengguna Akun Layanan dari pengguna my-user@example.com untuk akun layanan my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Memberi atau mencabut beberapa peran menggunakan Google Cloud Console

Anda dapat menggunakan Konsol Google Cloud untuk memberikan dan mencabut beberapa peran untuk satu akun utama:

  1. Di konsol Google Cloud, buka halaman Akun Layanan.

    Buka Akun Layanan

  2. Pilih project.

  3. Klik alamat email akun layanan.

  4. Buka tab Izin dan temukan bagian Akun utama yang memiliki akses ke akun layanan ini.

  5. Pilih akun utama yang perannya ingin Anda ubah:

    • Untuk mengubah peran akun utama yang sudah memiliki peran di akun layanan, temukan baris yang berisi akun utama, lalu klik Edit akun utama di baris tersebut, lalu klik Tambahkan peran lain.

      Untuk mengubah peran agen layanan, pilih kotak centang Sertakan pemberian peran yang disediakan Google untuk melihat alamat emailnya.

    • Untuk memberikan beberapa peran kepada akun utama yang tidak memiliki peran apapun di akun layanan, klik Berikan akses, lalu masukkan alamat email akun utama atau ID lainnya.

  6. Mengubah peran akun utama:

    • Untuk memberikan peran kepada akun utama yang tidak memiliki peran yang ada pada resource, klik Pilih peran, lalu pilih peran yang akan diberikan dari menu drop-down.
    • Untuk memberikan peran tambahan kepada akun utama, klik Tambahkan peran lain, lalu pilih peran yang akan diberikan dari menu drop-down.
    • Untuk mengganti salah satu peran utama dengan peran lain, klik peran yang ada, lalu pilih peran lain yang akan diberikan dari menu drop-down.
    • Untuk mencabut salah satu peran akun utama, klik tombol Hapus untuk setiap peran yang ingin dicabut.

    Anda juga dapat menambahkan kondisi ke peran, mengubah kondisi peran, atau menghapus kondisi peran.

  7. Klik Simpan.

Memberikan atau mencabut beberapa peran secara terprogram

Untuk membuat perubahan akses berskala besar yang melibatkan pemberian dan pencabutan beberapa peran untuk beberapa akun utama, gunakan pola read-modify-write untuk memperbarui kebijakan izinkan akun layanan:

  1. Baca kebijakan izinkan saat ini dengan memanggil getIamPolicy().
  2. Edit kebijakan izin, baik dengan menggunakan editor teks atau secara terprogram, untuk menambahkan atau menghapus akun utama atau binding peran.
  3. Tulis kebijakan izinkan yang diperbarui dengan memanggil setIamPolicy().

Bagian ini menunjukkan cara menggunakan gcloud CLI dan REST API untuk memperbarui kebijakan izinkan. Anda juga dapat mengupdate kebijakan izinkan menggunakan library klien IAM.

Secara umum, perubahan kebijakan akan berlaku dalam waktu 2 menit. Namun, dalam beberapa kasus, diperlukan 7 menit atau lebih untuk mengubah seluruh penerapan pada sistem.

Mendapatkan kebijakan izinkan saat ini

gcloud

Untuk mendapatkan kebijakan izinkan akun layanan, jalankan get-iam-policy perintah untuk akun layanan:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Berikan nilai berikut:

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

  • FORMAT: Format untuk kebijakan izin. Gunakan json atau yaml.

  • PATH: Jalur ke file output baru untuk kebijakan izinkan.

Contohnya, perintah berikut mendapatkan kebijakan izinkan untuk akun layanan my-service-account dan menyimpannya ke direktori utama Anda dalam format JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

Metode serviceAccounts.getIamPolicy mendapatkan kebijakan izin 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.

  • POLICY_VERSION: Versi kebijakan yang akan ditampilkan. Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izinkan akun layanan. Contoh:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

Simpan respons dalam file dengan jenis yang sesuai (json atau yaml).

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 Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

public class GetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    getPolicy(projectId, serviceAccount);
  }

  // Gets a service account's IAM policy.
  public static Policy getPolicy(String projectId, String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to get.
    String serviceAccountEmail = serviceAccount + "@" + projectId + ".iam.gserviceaccount.com";

    // 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()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, serviceAccountEmail).toString())
              .build();
      Policy policy = iamClient.getIamPolicy(request);
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    }
  }
}

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 Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_service_account_iam_policy(project_id: str, account: str) -> policy_pb2.Policy:
    """
    Get policy for 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_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    policy = iam_client.get_iam_policy(request)
    return policy

Mengubah kebijakan izin

Secara terprogram atau menggunakan editor teks, ubah salinan lokal kebijakan izin akun layanan Anda untuk mencerminkan peran yang ingin diberikan atau dicabut kepada pengguna tertentu.

Untuk memastikan Anda tidak menimpa perubahan lain, jangan mengedit atau menghapus kolom etag kebijakan izin. Kolom etag mengidentifikasi status saat ini dari kebijakan izin. Saat Anda menetapkan kebijakan izinkan yang diperbarui, IAM akan membandingkan nilai etag dalam permintaan dengan etag yang sudah ada, dan hanya menulis kebijakan izinkan jika nilainya cocok.

Untuk mengedit peran yang diberikan oleh kebijakan izinkan, Anda perlu mengedit binding peran dalam kebijakan izinkan. Binding peran memiliki format berikut:

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

Placeholder memiliki nilai berikut:

  • ROLE_NAME: Nama peran yang ingin Anda berikan. Gunakan salah satu format berikut:

    • Peran bawaan: roles/SERVICE.IDENTIFIER
    • Peran khusus level project: projects/PROJECT_ID/roles/IDENTIFIER
    • Peran khusus tingkat organisasi: organizations/ORG_ID/roles/IDENTIFIER

    Untuk daftar peran bawaan, lihat Memahami peran.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: ID untuk akun utama yang ingin Anda berikan peran.

    ID utama biasanya memiliki bentuk berikut: PRINCIPAL-TYPE:ID. Contoh, user:my-user@example.com. Untuk daftar lengkap nilai yang dapat dimiliki PRINCIPAL, lihat ID utama.

    Untuk jenis akun utama user, nama domain dalam ID harus berupa domain Google Workspace atau domain Cloud Identity. Untuk mempelajari cara menyiapkan domain Cloud Identity, lihat ringkasan Cloud Identity.

  • CONDITIONS: Opsional. Semua kondisi yang menentukan kapan akses akan diberikan.

Memberikan peran

Untuk memberikan peran ke akun utama Anda, ubah binding peran dalam kebijakan perizinan. Untuk mempelajari peran yang dapat Anda berikan, lihat Memahami peran, atau melihat peran yang dapat diberikan untuk akun layanan. Jika Anda memerlukan bantuan untuk mengidentifikasi beberapa peran bawaan yang paling sesuai, lihat Memilih peran bawaan.

Secara opsional, Anda dapat menggunakan kondisi untuk memberikan peran hanya ketika persyaratan tertentu terpenuhi.

Untuk memberikan peran yang sudah disertakan dalam kebijakan izinkan, tambahkan akun utama ke binding peran yang ada:

gcloud

Edit kebijakan izin dengan menambahkan akun utama ke binding peran yang sudah ada. Perhatikan bahwa perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, anggap kebijakan izinkan berisi binding peran berikut, yang memberikan peran Service Account User (roles/iam.serviceAccountUser) ke Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Untuk memberikan peran yang sama kepada Raha, tambahkan Raha ke binding peran yang ada:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

Edit kebijakan izin dengan menambahkan akun utama ke binding peran yang sudah ada. Perhatikan bahwa perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, anggap kebijakan izinkan berisi binding peran berikut, yang memberikan peran Service Account User (roles/iam.serviceAccountUser) ke Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Untuk memberikan peran yang sama kepada Raha, tambahkan Raha ke binding peran yang ada:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Untuk memberikan peran yang belum disertakan dalam kebijakan izinkan, tambahkan binding peran baru:

gcloud

Edit kebijakan izinkan dengan menambahkan binding peran baru yang memberikan peran tersebut ke akun utama. Perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, untuk memberikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke Raha, tambahkan binding peran berikut ke array bindings untuk kebijakan izinkan:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

REST

Edit kebijakan izinkan dengan menambahkan binding peran baru yang memberikan peran tersebut ke akun utama. Perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, untuk memberikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke Raha, tambahkan binding peran berikut ke array bindings untuk kebijakan izinkan:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

Mencabut peran

Untuk mencabut peran, hapus akun utama dari binding peran. Jika tidak ada akun utama lain dalam binding peran, hapus seluruh binding peran dari kebijakan izinkan.

gcloud

Edit kebijakan izinkan dengan menghapus akun utama atau seluruh pengikatan peran. Perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, anggap kebijakan izinkan berisi binding peran berikut, yang memberikan peran Service Account User kepada Kai dan Raha (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Untuk mencabut peran dari Kai, hapus ID utama Kai dari binding peran:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

Untuk mencabut peran dari Kai dan Raha, hapus binding peran dari kebijakan izinkan.

REST

Edit kebijakan izinkan dengan menghapus akun utama atau seluruh pengikatan peran. Perubahan ini tidak akan diterapkan hingga Anda menetapkan kebijakan izinkan yang diperbarui.

Misalnya, anggap kebijakan izinkan berisi binding peran berikut, yang memberikan peran Service Account User kepada Kai dan Raha (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Untuk mencabut peran dari Kai, hapus ID utama Kai dari binding peran:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

Untuk mencabut peran dari Kai dan Raha, hapus binding peran dari kebijakan izinkan.

Menetapkan kebijakan izin

Setelah Anda mengubah kebijakan izinkan untuk memberikan dan mencabut peran, panggil setIamPolicy() untuk melakukan perubahan.

gcloud

Untuk menetapkan kebijakan izinkan resource, jalankan perintah set-iam-policy untuk akun layanan:

gcloud iam service-accounts set-iam-policy SA_ID PATH

Berikan nilai berikut:

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

  • PATH: Jalur ke file yang berisi kebijakan izin baru.

Respons berisi kebijakan izin yang diperbarui.

Misalnya, perintah berikut menetapkan kebijakan izinkan yang disimpan di policy.json sebagai kebijakan izinkan untuk akun layanan my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \
    ~/policy.json

REST

Metode serviceAccounts.setIamPolicy menetapkan kebijakan izin yang telah diperbarui untuk 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.

  • POLICY: Representasi JSON dari kebijakan yang ingin Anda tetapkan. Untuk informasi selengkapnya mengenai format kebijakan, lihat Referensi kebijakan.

    Misalnya, untuk menetapkan kebijakan izin yang ditunjukkan di langkah sebelumnya, ganti policy dengan kode berikut:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "group:my-group@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "policy": POLICY
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.

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 Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setServiceAccountPolicy(policy, projectId, serviceAccount);
  }

  // Sets a service account's policy.
  public static Policy setServiceAccountPolicy(Policy policy, String projectId,
                                               String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to set.
    String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", serviceAccount, 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()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, accountEmail).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return iamClient.setIamPolicy(request);
    }
  }
}

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 Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_service_account_iam_policy(
    project_id: str, account: str, policy: policy_pb2.Policy
) -> policy_pb2.Policy:
    """
    Set policy for service account. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    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.
    policy: Policy which has to be set.
    """

    # Same approach as for policies on project level, but client stub is different.
    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential reties approach
    # to be sure policy has been updated.
    request.policy.MergeFrom(policy)

    policy = iam_client.set_iam_policy(request)
    return policy

Langkah selanjutnya

Coba 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