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
- 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_DENIEDdan tidak akan pernah mencapai instance. Permintaan tersebut dicatat di Cloud Audit Logs. Untuk mengetahui izin yang diperlukan setiap metode, lihat Izin IAM. - 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, pemanggilCreateTransactionharus merupakan Pengguna dengan peranSIGNER. 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 peranPOLICY_AUTHORdapat memanggilCreateTransactionPolicy, tetapi instance akan menolak permintaan tersebut. - Pengguna dengan peran
SIGNERyang akun utamanya tidak memilikimpc.googleapis.com/transactions.createtidak 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.principalditetapkan 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
SIGNERharus menetapkanTeam. Hanya pengguna dengan peranSIGNERyang dapat menyimpan bagian kunci, sehingga hanya Penanda Tangan yang termasuk dalam Tim. Memindahkan Penanda Tangan ke Tim lain menggunakanUpdateTeamAssignment, 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
ADMINdanPOLICY_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:
- Admin meminta perubahan dan menyertakan
authorizationInfo: tanda tangannya, yang dibuat dengan kunci otorisasi, atas perubahan peran. Permintaan ini dihitung sebagai persetujuan pertama. - Admin lain memanggil
ApproveUserpada Pengguna, masing-masing dengan tanda tangannya sendiri. Satu persetujuan mencakup setiap perubahan peran yang tertunda dari Pengguna tersebut. - 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 adalahPENDING_DISABLEDtidak 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_timeakan 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 Viewerroles/mpc.viewer |
Izin roles/mpc.viewer dalam tabel sebelumnya: get dan list di setiap resource. |
Auditor dan alat pemantauan. |
Editor Komputasi Multi-pihakroles/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 Adminroles/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.