Keamanan dan otorisasi

Setiap permintaan ke Multi-party Compute API melewati dua pemeriksaan terpisah: pemeriksaan Identity and Access Management pada metode API, dan pemeriksaan pada Pengguna Multi-party Compute dan perannya. Halaman ini menjelaskan kedua pemeriksaan, izin IAM, dan cara Admin menyetujui perubahan pada Peran pengguna.

Cara permintaan diizinkan

  1. Pemeriksaan IAM. Sebelum permintaan mencapai instance Anda, IAM akan memeriksa apakah akun utama yang memanggil memiliki izin yang diperlukan metode pada resource dalam permintaan. Jika tidak, permintaan akan gagal dengan 403 PERMISSION_DENIED dan tidak akan pernah mencapai instance. Permintaan tersebut dicatat di Cloud Audit Logs. Untuk mengetahui izin yang diperlukan setiap metode, lihat Izin IAM.
  2. Pemeriksaan pengguna dan peran. Untuk metode yang bertindak atas nama Pengguna, instance akan mencari Pengguna yang principal-nya cocok dengan identitas penelepon yang diautentikasi, dan memeriksa peran Pengguna tersebut. Misalnya, pemanggil CreateTransaction harus merupakan Pengguna dengan peran SIGNER. Untuk pemeriksaan yang dilakukan setiap metode, lihat Peran pengguna.

Kedua pemeriksaan harus lulus. Peran IAM dan Peran pengguna saling melengkapi, misalnya:

  • Akun utama yang memiliki roles/mpc.editor, tetapi tidak memiliki Pengguna dengan peran POLICY_AUTHOR dapat memanggil CreateTransactionPolicy, tetapi instance akan menolak permintaan tersebut.
  • Pengguna dengan peran SIGNER yang akun utamanya tidak memiliki mpc.googleapis.com/transactions.create tidak dapat membuat transaksi, karena IAM menolak permintaan terlebih dahulu.

Persetujuan juga menyertakan tanda tangan. Penanda Tangan, Penulis Kebijakan, dan Admin menandatangani setiap persetujuan dengan kunci otorisasi yang terdaftar di Pengguna mereka. Hal ini memastikan bahwa Kebijakan dan Transaksi tidak dapat diubah dan meninggalkan jejak audit yang tahan lama.

Trusted Execution Environment (TEE) peserta memverifikasi tanda tangan ini sebelum menandatangani transaksi atau menyetujui kebijakan transaksi, sehingga permintaan yang lulus kedua pemeriksaan tersebut tetap tidak dapat menghasilkan tanda tangan tanpa persetujuan yang valid. Untuk mengetahui informasi selengkapnya, lihat model keamanan.

Peran pengguna

Setiap Pengguna memiliki salah satu peran berikut, yang ditetapkan di User.roles. Peran ini adalah peran dalam instance Anda, bukan peran IAM.

Peran pengguna Yang dapat dilakukan Pengguna Dicentang saat
SIGNER Menyimpan bagian kunci dan menyetujui transaksi. Merupakan bagian dari satu Tim. CreateTransaction: Pengguna pemanggil harus memiliki peran SIGNER.
RecordSignerDecision: Pengguna pemanggil harus memiliki bagian kunci dari kunci transaksi.
ListTransactions: jika Pengguna pemanggil hanya memiliki peran SIGNER, hanya transaksi pada kunci tempat Pengguna memiliki bagian kunci yang akan ditampilkan.
POLICY_AUTHOR Mengusulkan, menyetujui, dan menonaktifkan kebijakan transaksi. CreateTransactionPolicy, ApproveTransactionPolicy, DisableTransactionPolicy: Pengguna pemanggil harus merupakan Penulis Kebijakan aktif dengan kunci otorisasi terdaftar.
ADMIN Mengelola Pengguna, Tim, KeyRing, kunci, dan KeyList. Menyetujui perubahan pada peran ADMIN dan POLICY_AUTHOR. EnableUserRole, DisableUserRole, DisableUser, ApproveUser untuk perubahan ADMIN dan POLICY_AUTHOR: permintaan harus menyertakan tanda tangan Admin yang memanggil. Lihat Persetujuan admin atas perubahan peran.

Aturan berikut berlaku untuk Pengguna:

  • Satu akun utama per Pengguna. User.principal ditetapkan saat Anda membuat Pengguna dan tidak dapat diubah. Akun Google atau akun utama Workforce Identity Federation. Untuk mengubah akun utama Pengguna, nonaktifkan Pengguna dan buat akun baru.
  • Satu Tim per Penanda Tangan. Pengguna dengan peran SIGNER harus menetapkan Team. Hanya pengguna dengan peran SIGNER yang dapat menyimpan bagian kunci, sehingga hanya Penanda Tangan yang termasuk dalam Tim. Memindahkan Penanda Tangan ke Tim lain menggunakan UpdateTeamAssignment, yang memerlukan pembagian ulang yang direncanakan untuk rilis mendatang.
  • Kunci otorisasi. Penanda Tangan dan Penulis Kebijakan memerlukan kunci otorisasi untuk menandatangani persetujuan. Admin memerlukan tanda tangan untuk meminta atau menyetujui perubahan pada peran ADMIN dan POLICY_AUTHOR; mengelola Penanda Tangan dan Tim tidak memerlukan tanda tangan Admin.

Status setiap peran

Status Arti Dapatkah Pengguna menggunakan peran tersebut?
PENDING_ACTIVE Peran telah diberikan dan menunggu persetujuan Admin. Tidak
ACTIVE Peran tersebut berlaku. Ya
PENDING_DISABLED Peran sedang dihapus dan menunggu persetujuan Admin. Ya, hingga penghapusan disetujui
DISABLED Peran telah dihapus. Game akan tetap tercantum sehingga persetujuannya tetap terlihat. Tidak

Persetujuan admin untuk perubahan peran

Admin mengelola semua Peran pengguna. Pemberian atau penghapusan peran ADMIN atau POLICY_AUTHOR memerlukan persetujuan dari beberapa Admin. Pemberian atau penghapusan peran SIGNER akan langsung berlaku dari satu Admin, tanpa tanda tangan Admin. Peran SIGNER saja tidak memberikan akses ke kunci; Penanda Tangan hanya menerima bagian kunci jika Admin menyertakan Penanda Tangan atau Timnya dalam kebijakan kunci KeyRing dan membuat kunci.

Metode Dampak terhadap Peran pengguna
CreateUser Setiap peran ADMIN atau POLICY_AUTHOR yang diminta dimulai di PENDING_ACTIVE. SIGNER adalah ACTIVE segera.
EnableUserRole Memberikan satu peran. ADMIN dan POLICY_AUTHOR dimulai dalam PENDING_ACTIVE; SIGNER adalah ACTIVE segera.
DisableUserRole Menghapus satu peran. Untuk ADMIN dan POLICY_AUTHOR, peran ACTIVE akan menjadi PENDING_DISABLED, dan peran PENDING_ACTIVE akan langsung dibatalkan, tanpa persetujuan. SIGNER akan langsung menjadi DISABLED.
DisableUser Menghapus semua peran Pengguna dalam satu permintaan, dengan satu tanda tangan untuk semua perubahan ADMIN dan POLICY_AUTHOR.
ApproveUser Mencatat persetujuan satu Admin atas perubahan Pengguna yang tertunda.
EnableUser Menyetel kembali Pengguna yang dinonaktifkan ke ACTIVE. Tindakan ini tidak memulihkan peran apa pun dan tidak memerlukan persetujuan.

Persetujuan berfungsi sebagai berikut:

  1. Admin meminta perubahan dan menyertakan authorizationInfo: tanda tangannya, yang dibuat dengan kunci otorisasi, atas perubahan peran. Permintaan ini dihitung sebagai persetujuan pertama.
  2. Admin lain memanggil ApproveUser pada Pengguna, masing-masing dengan tanda tangannya sendiri. Satu persetujuan mencakup setiap perubahan peran yang tertunda dari Pengguna tersebut.
  3. Jika jumlah persetujuan mencapai batas persetujuan Admin instance, semua perubahan peran yang tertunda dari Pengguna akan berlaku bersamaan. Persetujuan disimpan di Pengguna di role_statuses.approval_info, dan TEE peserta memverifikasinya.

Aturan berikut berlaku untuk setiap perubahan ADMIN dan POLICY_AUTHOR:

  • Minimal dua Admin aktif. Perubahan yang akan membuat instance memiliki Admin aktif yang lebih sedikit daripada nilai minimum persetujuan Admin akan gagal dengan FAILED_PRECONDITION. Instance tidak pernah memiliki kurang dari dua Admin aktif. Admin yang perannya adalah PENDING_DISABLED tidak dihitung sebagai aktif.
  • Tidak ada persetujuan mandiri. Pengguna yang diubah tidak dapat meminta atau menyetujui perubahannya sendiri. Permintaan tersebut akan gagal dengan PERMISSION_DENIED.
  • Satu persetujuan per Admin. Jika Admin menyetujui perubahan yang sama dua kali, permintaan kedua akan gagal dengan ALREADY_EXISTS.
  • Satu perubahan dalam proses per Pengguna. Saat perubahan tertunda, permintaan untuk mengaktifkan peran akan gagal dengan FAILED_PRECONDITION. Permintaan untuk menonaktifkan peran tidak pernah diblokir: penonaktifan akan membatalkan pengaktifan yang tertunda, dan digabungkan dengan penonaktifan yang tertunda menjadi satu perubahan baru yang persetujuannya dimulai dari awal.
  • Masa Berlaku. Perubahan yang tidak mendapatkan cukup persetujuan hingga approval_info.expire_time akan berakhir masa berlakunya, dan perannya akan kembali ke status sebelumnya.

Di API v1beta, Anda tidak dapat menonaktifkan peran SIGNER, atau menonaktifkan Pengguna, saat Pengguna memiliki bagian kunci. Mengganti bagian kunci Penanda Tangan memerlukan pembagian ulang, yang direncanakan untuk rilis mendatang.

Izin IAM

Tabel berikut mencantumkan setiap metode v1beta, izin IAM yang diperlukan, dan peran bawaan dengan izin paling sedikit yang menyertakannya. Setiap peran yang telah ditetapkan juga mencakup setiap izin peran sebelumnya: roles/mpc.editor mencakup roles/mpc.viewer, dan roles/mpc.admin mencakup roles/mpc.editor.

Resource Metode Izin Peran bawaan
Tim CreateTeam mpc.googleapis.com/teams.create roles/mpc.admin
DeleteTeam mpc.googleapis.com/teams.delete roles/mpc.admin
GetTeam mpc.googleapis.com/teams.get roles/mpc.viewer
ListTeams mpc.googleapis.com/teams.list roles/mpc.viewer
Pengguna CreateUser mpc.googleapis.com/users.create roles/mpc.admin
UpdateUser mpc.googleapis.com/users.update roles/mpc.admin
EnableUserRole mpc.googleapis.com/users.enableRole roles/mpc.admin
DisableUserRole mpc.googleapis.com/users.disableRole roles/mpc.admin
ApproveUser mpc.googleapis.com/users.approve roles/mpc.admin
DisableUser mpc.googleapis.com/users.disable roles/mpc.admin
EnableUser mpc.googleapis.com/users.enable roles/mpc.admin
UpdateTeamAssignment mpc.googleapis.com/users.updateTeamAssignment roles/mpc.admin
GetUser mpc.googleapis.com/users.get roles/mpc.viewer
ListUsers mpc.googleapis.com/users.list roles/mpc.viewer
KeyRing CreateKeyRing mpc.googleapis.com/keyRings.create roles/mpc.admin
DeleteKeyRing mpc.googleapis.com/keyRings.delete roles/mpc.admin
GetKeyRing mpc.googleapis.com/keyRings.get roles/mpc.viewer
ListKeyRings mpc.googleapis.com/keyRings.list roles/mpc.viewer
Kunci CreateKey mpc.googleapis.com/keys.create roles/mpc.admin
DisableKey mpc.googleapis.com/keys.update roles/mpc.editor
GetKey mpc.googleapis.com/keys.get roles/mpc.viewer
ListKeys mpc.googleapis.com/keys.list roles/mpc.viewer
KeyList CreateKeyList mpc.googleapis.com/keyLists.create roles/mpc.admin
DeleteKeyList mpc.googleapis.com/keyLists.delete roles/mpc.admin
AddKeyListEntries mpc.googleapis.com/keyLists.addEntries roles/mpc.admin
RemoveKeyListEntries mpc.googleapis.com/keyLists.removeEntries roles/mpc.admin
GetKeyList mpc.googleapis.com/keyLists.get roles/mpc.viewer
ListKeyLists mpc.googleapis.com/keyLists.list roles/mpc.viewer
TransactionPolicy CreateTransactionPolicy mpc.googleapis.com/transactionPolicies.create roles/mpc.editor
ApproveTransactionPolicy mpc.googleapis.com/transactionPolicies.approve roles/mpc.editor
DisableTransactionPolicy mpc.googleapis.com/transactionPolicies.disable roles/mpc.editor
GetTransactionPolicy mpc.googleapis.com/transactionPolicies.get roles/mpc.viewer
ListTransactionPolicies mpc.googleapis.com/transactionPolicies.list roles/mpc.viewer
Transaksi CreateTransaction mpc.googleapis.com/transactions.create roles/mpc.editor
RecordSignerDecision mpc.googleapis.com/transactions.recordSignerDecision roles/mpc.editor
GetTransaction mpc.googleapis.com/transactions.get roles/mpc.viewer
ListTransactions mpc.googleapis.com/transactions.list roles/mpc.viewer

Untuk mengetahui detail permintaan dan respons, lihat referensi REST Multi-party Compute API.

Peran yang telah ditetapkan

Peran Mencakup Ditujukan untuk
Multi-party Compute Viewer
roles/mpc.viewer
Izin roles/mpc.viewer dalam tabel sebelumnya: get dan list di setiap resource. Auditor dan alat pemantauan.
Editor Komputasi Multi-pihak
roles/mpc.editor
Semua izin roles/mpc.viewer, ditambah izin roles/mpc.editor dalam tabel sebelumnya. Prinsipal Penanda Tangan dan Penulis Kebijakan. Peran pengguna mereka menentukan metode mana yang diterima instance dari mereka.
Multi-party Compute Admin
roles/mpc.admin
Semua izin roles/mpc.editor, ditambah izin roles/mpc.admin dalam tabel sebelumnya. Prinsipal Admin.

Resource v1beta tidak memiliki kebijakan IAM sendiri. Berikan peran pada project yang berisi instance Anda, dan gunakan IAM Conditions untuk mempersempit peran ke KeyRing.

Peran yang direkomendasikan untuk setiap persona

Berikan setiap orang akun utama yang berbeda, Pengguna yang hanya memiliki peran yang mereka butuhkan, dan peran IAM yang cocok:

Persona Peran pengguna Peran IAM
Admin ADMIN roles/mpc.admin
Pembuat Kebijakan POLICY_AUTHOR roles/mpc.editor, atau peran khusus dengan izin transactionPolicies.*
Penanda Tangan SIGNER roles/mpc.editor, atau peran khusus dengan izin transactions.*
Auditor Tidak ada roles/mpc.viewer

Akun utama gabungan juga memerlukan peran Service Usage Consumer (roles/serviceusage.serviceUsageConsumer) di project konsumen. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Workforce Identity Federation (BYOID).

Peran khusus

Untuk memberikan akun utama hanya izin yang diperlukan, buat peran IAM khusus. Misalnya, peran berikut memungkinkan Penanda Tangan melihat transaksi dan menyetujui atau menolaknya, tetapi tidak dapat membuatnya:

gcloud iam roles create mpcTransactionApprover \
  --project=PROJECT_ID \
  --title="MPC transaction approver" \
  --description="View MPC transactions and record signer decisions" \
  --permissions="mpc.googleapis.com/transactions.get,mpc.googleapis.com/transactions.list,mpc.googleapis.com/transactions.recordSignerDecision"

Ganti PROJECT_ID dengan ID project yang berisi instance Anda.

Instance masih memeriksa Pengguna pemanggil: Pengguna harus memiliki pembagian kunci dari kunci transaksi untuk mencatat keputusan.

IAM Conditions

Anda dapat mempersempit binding peran ke resource dalam satu KeyRing dengan IAM Condition pada nama resource. Misalnya, jika dua unit bisnis berbagi instance dan masing-masing memiliki KeyRing sendiri, Anda dapat memberikan roles/mpc.editor Penanda Tangan setiap unit hanya pada KeyRing mereka sendiri:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/mpc.editor" \
  --condition="expression=resource.name.startsWith('projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/keyRings/KEYRING_ID'),title=keyring-scoped-editor"

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi instance Anda.
  • SA_NAME: nama akun layanan.
  • LOCATION: region instance Anda.
  • INSTANCE_ID: ID instance Anda.
  • KEYRING_ID: ID KeyRing.

Nama resource v1beta tidak berisi /mpc/. Kondisi yang disalin dari dokumentasi Pratinjau Pribadi (v1alpha1), seperti .../instances/INSTANCE_ID/mpc/keyRings/KEYRING_ID, tidak cocok dengan resource v1beta apa pun.

Pengguna, Tim, KeyList, dan kebijakan transaksi adalah milik instance, bukan KeyRing, sehingga binding cakupan KeyRing tidak memberikan akses ke sana.