Policy

Kebijakan Identity and Access Management (IAM), yang menentukan kontrol akses untuk resource Google Cloud.

Policy adalah kumpulan bindings. binding mengikat satu atau beberapa members, atau akun utama, ke role tunggal. Akun utama dapat berupa akun pengguna, akun layanan, grup Google, dan domain (seperti G Suite). role adalah daftar izin yang diberi nama; setiap role dapat berupa peran bawaan IAM atau peran khusus yang dibuat pengguna.

Untuk beberapa jenis resource Google Cloud, binding juga dapat menentukan condition, yang merupakan ekspresi logis yang mengizinkan akses ke resource hanya jika ekspresi dievaluasi menjadi true. Kondisi dapat menambahkan batasan berdasarkan atribut permintaan, resource, atau keduanya. Untuk mempelajari resource mana yang mendukung kondisi dalam kebijakan IAM-nya, lihat dokumentasi IAM.

Contoh JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

Contoh YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

Untuk mengetahui deskripsi IAM dan fitur-fiturnya, lihat dokumentasi IAM.

Representasi JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Kolom
version

integer

Menentukan format kebijakan.

Nilai yang valid adalah 0, 1, dan 3. Permintaan yang menentukan nilai yang tidak valid akan ditolak.

Setiap operasi yang memengaruhi binding peran bersyarat harus menentukan versi 3. Persyaratan ini berlaku untuk operasi berikut:

  • Mendapatkan kebijakan yang mencakup binding peran bersyarat
  • Menambahkan binding peran bersyarat ke kebijakan
  • Mengubah binding peran bersyarat dalam kebijakan
  • Menghapus binding peran apa pun, dengan atau tanpa kondisi, dari kebijakan yang menyertakan kondisi

Penting: Jika Anda menggunakan IAM Conditions, Anda harus menyertakan kolom etag setiap kali Anda memanggil setIamPolicy. Jika Anda menghapus kolom ini, IAM memungkinkan Anda menimpa kebijakan versi 3 dengan kebijakan versi 1, dan semua kondisi dalam kebijakan versi 3 akan hilang.

Jika kebijakan tidak menyertakan kondisi apa pun, operasi pada kebijakan tersebut dapat menentukan versi yang valid atau membiarkan kolom tidak disetel.

Untuk mempelajari resource mana yang mendukung kondisi dalam kebijakan IAM-nya, lihat dokumentasi IAM.

bindings[]

object (Binding)

Mengaitkan daftar members, atau akun utama, dengan role. Secara opsional, dapat menentukan condition yang menentukan cara dan waktu penerapan bindings. Setiap bindings harus berisi setidaknya satu prinsipal.

bindings dalam Policy dapat merujuk hingga 1.500 akun utama; hingga 250 akun utama ini dapat berupa grup Google. Setiap kemunculan akun utama dihitung dalam batas ini. Misalnya, jika bindings memberikan 50 peran berbeda kepada user:alice@example.com, dan bukan kepada akun utama lain, Anda dapat menambahkan 1.450 akun utama lain ke bindings di Policy.

auditConfigs[]

object (AuditConfig)

Menentukan konfigurasi logging audit cloud untuk kebijakan ini.

etag

string (bytes format)

etag digunakan untuk kontrol konkurensi optimis sebagai cara untuk membantu mencegah pembaruan kebijakan secara bersamaan agar tidak menimpa satu sama lain. Sangat disarankan agar sistem menggunakan etag dalam siklus baca-ubah-tulis untuk melakukan pembaruan kebijakan guna menghindari kondisi persaingan: etag ditampilkan dalam respons terhadap getIamPolicy, dan sistem diharapkan untuk memasukkan etag tersebut dalam permintaan ke setIamPolicy untuk memastikan bahwa perubahan akan diterapkan pada kebijakan versi yang sama.

Penting: Jika Anda menggunakan IAM Conditions, Anda harus menyertakan kolom etag setiap kali Anda memanggil setIamPolicy. Jika Anda menghapus kolom ini, IAM memungkinkan Anda menimpa kebijakan versi 3 dengan kebijakan versi 1, dan semua kondisi dalam kebijakan versi 3 akan hilang.

String berenkode base64.

Binding

Mengaitkan members, atau akun utama, dengan role.

Representasi JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Kolom
role

string

Peran yang ditetapkan ke daftar members, atau akun utama. Misalnya, roles/viewer, roles/editor, atau roles/owner.

Untuk mengetahui ringkasan peran dan izin IAM, lihat dokumentasi IAM. Untuk mengetahui daftar peran bawaan yang tersedia, lihat di sini.

members[]

string

Menentukan akun utama yang meminta akses untuk resource Google Cloud. members dapat memiliki nilai berikut:

  • allUsers: ID khusus yang mewakili siapa saja yang ada di internet; dengan atau tanpa Akun Google.

  • allAuthenticatedUsers: ID khusus yang mewakili siapa saja yang diautentikasi dengan Akun Google atau akun layanan. Tidak mencakup identitas yang berasal dari penyedia identitas (IdP) eksternal melalui penggabungan identitas.

  • user:{emailid}: Alamat email yang mewakili Akun Google tertentu. Misalnya, alice@example.com .

  • serviceAccount:{emailid}: Alamat email yang mewakili akun layanan Google. Contoh, my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: ID untuk akun layanan Kubernetes. Misalnya, my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: Alamat email yang mewakili grup Google. Contoh, admins@example.com.

  • domain:{domain}: Domain G Suite (primer) yang mewakili semua pengguna domain tersebut. Misalnya google.com atau example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: Satu identitas dalam workforce identity pool.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: Semua identitas tenaga kerja dalam grup.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Semua identitas tenaga kerja dengan nilai atribut tertentu.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: Semua identitas dalam workforce identity pool.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: Satu identitas dalam workload identity pool.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: Grup workload identity pool.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Semua identitas dalam workload identity pool dengan atribut tertentu.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: Semua identitas dalam workload identity pool.

  • deleted:user:{emailid}?uid={uniqueid}: Alamat email (plus ID unik) yang mewakili pengguna yang baru saja dihapus. Misalnya, alice@example.com?uid=123456789012345678901. Jika pengguna dipulihkan, nilai ini akan kembali ke user:{emailid} dan pengguna yang dipulihkan akan mempertahankan peran dalam binding.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: Alamat email (plus ID unik) yang mewakili akun layanan yang baru saja dihapus. Contoh, my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Jika akun layanan dibatalkan penghapusannya, nilai ini akan kembali ke serviceAccount:{emailid} dan akun layanan yang dibatalkan penghapusannya akan mempertahankan peran dalam binding.

  • deleted:group:{emailid}?uid={uniqueid}: Alamat email (plus ID unik) yang mewakili grup Google yang baru saja dihapus. Contoh, admins@example.com?uid=123456789012345678901. Jika grup dipulihkan, nilai ini akan kembali ke group:{emailid} dan grup yang dipulihkan akan mempertahankan peran dalam binding.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: Menghapus identitas tunggal dalam workforce identity pool. Contoh, deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

Kondisi yang terkait dengan binding ini.

Jika kondisi bernilai true, maka binding ini berlaku untuk permintaan saat ini.

Jika kondisi bernilai false, maka binding ini tidak berlaku untuk permintaan saat ini. Namun, binding peran yang berbeda dapat memberikan peran yang sama kepada satu atau beberapa akun utama dalam binding ini.

Untuk mempelajari resource mana yang mendukung kondisi dalam kebijakan IAM-nya, lihat dokumentasi IAM.

Expr

Menampilkan ekspresi tekstual dalam sintaksis Common Expression Language (CEL). CEL adalah bahasa ekspresi seperti C. Sintaksis dan semantik CEL didokumentasikan di https://github.com/google/cel-spec.

Contoh (Perbandingan):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Contoh (Kesamaan):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Contoh (Logika):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Contoh (Manipulasi Data):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

Variabel dan fungsi persis yang dapat dirujuk dalam ekspresi ditentukan oleh layanan yang mengevaluasinya. Lihat dokumentasi layanan untuk mengetahui informasi tambahan.

Representasi JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Kolom
expression

string

Representasi tekstual ekspresi dalam sintaksis Common Expression Language.

title

string

Opsional. Judul untuk ekspresi, yaitu string pendek yang menjelaskan tujuannya. Ini dapat digunakan misalnya di UI yang memungkinkan untuk memasukkan ekspresi.

description

string

Opsional. Deskripsi ekspresi. Ini adalah teks yang lebih panjang yang menjelaskan ekspresi, misalnya saat kursor diarahkan ke teks tersebut di UI.

location

string

Opsional. String yang menunjukkan lokasi ekspresi untuk pelaporan error, misalnya nama file dan posisi dalam file.

AuditConfig

Menentukan konfigurasi audit untuk layanan. Konfigurasi menentukan jenis izin mana yang dicatat, dan identitas apa, jika ada, yang dikecualikan dari pencatatan. AuditConfig harus memiliki satu atau beberapa AuditLogConfigs.

Jika ada AuditConfig untuk allServices dan layanan tertentu, gabungan kedua AuditConfig tersebut digunakan untuk layanan tersebut: log_types yang ditentukan di setiap AuditConfig diaktifkan, dan exemptedMembers di setiap AuditLogConfig dikecualikan.

Contoh Kebijakan dengan beberapa AuditConfig:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

Untuk sampleservice, kebijakan ini mengaktifkan logging DATA_READ, DATA_WRITE, dan ADMIN_READ. Hal ini juga mengecualikan jose@example.com dari logging DATA_READ, dan aliya@example.com dari logging DATA_WRITE.

Representasi JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Kolom
service

string

Menentukan layanan yang akan diaktifkan untuk logging audit. Misalnya, storage.googleapis.com, cloudsql.googleapis.com. allServices adalah nilai khusus yang mencakup semua layanan.

auditLogConfigs[]

object (AuditLogConfig)

Konfigurasi untuk mencatat log setiap jenis izin.

AuditLogConfig

Memberikan konfigurasi untuk mencatat izin jenis tertentu. Contoh:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

Hal ini memungkinkan logging 'DATA_READ' dan 'DATA_WRITE', sekaligus mengecualikan jose@example.com dari logging DATA_READ.

Representasi JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Kolom
logType

enum (LogType)

Jenis log yang diaktifkan oleh konfigurasi ini.

exemptedMembers[]

string

Menentukan identitas yang tidak menyebabkan logging untuk jenis izin ini. Mengikuti format yang sama dengan Binding.members.

LogType

Daftar jenis izin yang valid yang dapat dikonfigurasi pencatatannya. Penulisan admin selalu dicatat dalam log, dan tidak dapat dikonfigurasi.

Enum
LOG_TYPE_UNSPECIFIED Kasus default. Seharusnya tidak seperti ini.
ADMIN_READ Bacaan admin. Contoh: CloudIAM getIamPolicy
DATA_WRITE Penulisan data. Contoh: Pembuatan Pengguna CloudSQL
DATA_READ Pembacaan data. Contoh: Daftar Pengguna CloudSQL