Izin dan peran

Di Cloud KMS, resource diatur ke dalam hierarki. Hierarki ini membantu Anda mengelola dan memberikan akses ke resource di berbagai tingkat detail. Kunci terdapat dalam key ring, dan key ring berada dalam project. Koneksi EKM juga ada di dalam project. Project dapat diatur lebih lanjut ke dalam folder atau organisasi.

Topik ini memberikan detail lebih lanjut tentang hierarki resource dalam Cloud KMS. Untuk mempelajari lebih lanjut resource Google Cloud secara umum, lihat Hierarki resource.

Hierarki resource

Cakupan peran IAM berubah bergantung pada level hierarki resource tempat peran diberikan. Tabel ini menunjukkan kemampuan efektif yang diberikan oleh peran Cloud KMS Bigtable Encrypter (roles/cloudkms.cryptoKeyEncrypter) di berbagai level hierarki.

Anda dapat mengelola akses ke kunci atau key ring, tetapi tidak ke versi kunci individual.

Hierarki resource Kemampuan
Organisasi Mengenkripsi menggunakan semua kunci di semua project dalam organisasi
Folder Enkripsi menggunakan semua kunci di semua project dalam folder
Project Mengenkripsi menggunakan semua kunci dalam project
Key ring Enkripsi menggunakan semua kunci pada key ring
Kunci Enkripsi hanya menggunakan kunci tersebut

Prinsip keamanan

IAM membantu menerapkan prinsip keamanan yang saling terkait, seperti pemisahan tugas dan hak istimewa terendah:

  • Saat Anda menerapkan prinsip pemisahan tugas, tidak ada anggota tunggal yang memiliki semua akses yang diperlukan untuk menyelesaikan fungsi bisnis penting. Misalnya, kasir bank hanya dapat menarik dana dari sebuah rekening ketika pemegang rekening tersebut datang secara fisik dan memulai transaksi.

  • Saat Anda menerapkan prinsip hak istimewa terendah, anggota hanya memiliki tingkat akses minimum yang diperlukan untuk menyelesaikan fungsi bisnis tertentu milik anggota tersebut. Misalnya, kasir bank tidak secara otomatis diberi kemampuan untuk menyetujui pinjaman pelanggan.

Peran yang telah ditetapkan

IAM menyediakan peran standar yang memberikan akses ke setiap jenis resource Google Cloud. Jika tidak ada peran yang telah ditetapkan yang sesuai dengan kebutuhan Anda, Anda dapat membuat peran khusus.

IAM menawarkan peran bawaan berikut untuk Cloud KMS:

Role Permissions

(roles/cloudkms.admin)

Provides access to Cloud KMS resources, except for access to restricted resource types and cryptographic operations.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.autokeyConfigs.*

  • cloudkms.autokeyConfigs.get
  • cloudkms.autokeyConfigs.update

cloudkms.cryptoKeyVersions.create

cloudkms.cryptoKeyVersions.destroy

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeyVersions.restore

cloudkms.cryptoKeyVersions.update

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.cryptoKeys.*

  • cloudkms.cryptoKeys.create
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.getIamPolicy
  • cloudkms.cryptoKeys.list
  • cloudkms.cryptoKeys.setIamPolicy
  • cloudkms.cryptoKeys.update

cloudkms.ekmConfigs.*

  • cloudkms.ekmConfigs.get
  • cloudkms.ekmConfigs.getIamPolicy
  • cloudkms.ekmConfigs.setIamPolicy
  • cloudkms.ekmConfigs.update

cloudkms.ekmConnections.*

  • cloudkms.ekmConnections.create
  • cloudkms.ekmConnections.get
  • cloudkms.ekmConnections.getIamPolicy
  • cloudkms.ekmConnections.list
  • cloudkms.ekmConnections.setIamPolicy
  • cloudkms.ekmConnections.update
  • cloudkms.ekmConnections.use
  • cloudkms.ekmConnections.verifyConnectivity

cloudkms.importJobs.*

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.getIamPolicy
  • cloudkms.importJobs.list
  • cloudkms.importJobs.setIamPolicy
  • cloudkms.importJobs.useToImport

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.keyRings.*

  • cloudkms.keyRings.create
  • cloudkms.keyRings.createTagBinding
  • cloudkms.keyRings.deleteTagBinding
  • cloudkms.keyRings.get
  • cloudkms.keyRings.getIamPolicy
  • cloudkms.keyRings.list
  • cloudkms.keyRings.listEffectiveTags
  • cloudkms.keyRings.listTagBindings
  • cloudkms.keyRings.setIamPolicy

cloudkms.locations.get

cloudkms.locations.list

cloudkms.locations.optOutKeyDeletionMsa

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

resourcemanager.projects.get

(roles/cloudkms.autokeyAdmin)

Enables management of AutokeyConfig.

cloudkms.autokeyConfigs.*

  • cloudkms.autokeyConfigs.get
  • cloudkms.autokeyConfigs.update

cloudkms.projects.showEffectiveAutokeyConfig

(roles/cloudkms.autokeyUser)

Grants ability to use KeyHandle resources.

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

(roles/cloudkms.cryptoKeyDecrypter)

Provides ability to use Cloud KMS resources for decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyDecrypterViaDelegation)

Enables Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypter)

Provides ability to use Cloud KMS resources for encrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypter)

Provides ability to use Cloud KMS resources for encrypt and decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation)

Enables Encrypt and Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypterViaDelegation)

Enables Encrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoOperator)

Enables all Crypto Operations.

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.generateRandomBytes

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.ekmConnectionsAdmin)

Enables management of EkmConnections.

cloudkms.ekmConfigs.get

cloudkms.ekmConfigs.update

cloudkms.ekmConnections.create

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.ekmConnections.update

cloudkms.ekmConnections.verifyConnectivity

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCbc)

Enables raw AES-CBC keys management.

cloudkms.cryptoKeyVersions.manageRawAesCbcKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCtr)

Enables raw AES-CTR keys management.

cloudkms.cryptoKeyVersions.manageRawAesCtrKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawPKCS1)

Enables raw PKCS#1 keys management.

cloudkms.cryptoKeyVersions.manageRawPKCS1Keys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.importer)

Enables ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, and GetImportJob operations

cloudkms.importJobs.create

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.importJobs.useToImport

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.protectedResourcesViewer)

Enables viewing protected resources.

cloudkms.protectedResources.search

(roles/cloudkms.publicKeyViewer)

Enables GetPublicKey operations

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signer)

Enables Sign operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signerVerifier)

Enables Sign, Verify, and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.verifier)

Enables Verify and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.viewer)

Enables Get and List operations.

cloudkms.autokeyConfigs.get

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeys.get

cloudkms.cryptoKeys.list

cloudkms.ekmConfigs.get

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.keyHandles.get

cloudkms.keyHandles.list

cloudkms.keyRings.get

cloudkms.keyRings.list

cloudkms.locations.get

cloudkms.locations.list

cloudkms.operations.get

resourcemanager.projects.get

Peran khusus

Selain peran standar, Anda dapat membuat peran khusus. Peran khusus memungkinkan Anda menerapkan prinsip hak istimewa terendah dengan memberi peran izin minimum yang diperlukan untuk melakukan tugas tertentu.

Peran khusus mencakup satu atau beberapa izin yang tercantum dalam referensi IAM. Izin yang terkait dengan Cloud Key Management Service API dimulai dengan string cloudkms. Untuk informasi selengkapnya, lihat Tingkat dukungan untuk izin dalam peran khusus.

Untuk mengetahui informasi tentang izin yang diperlukan untuk memanggil metode Cloud Key Management Service API tertentu, lihat referensi API metode tersebut.

Panduan umum untuk mengelola akses di Cloud KMS

Sebaiknya hindari penggunaan peran dasar tingkat project seperti owner, editor, dan viewer. Peran ini tidak memisahkan kemampuan untuk mengelola kunci dengan kemampuan untuk menggunakan kunci operasi kriptografi, dan tidak direkomendasikan untuk lingkungan produksi. Sebagai gantinya, gunakan peran yang telah ditetapkan atau buat peran khusus yang mencerminkan persyaratan bisnis Anda.

Contoh berikut ini membantu menggambarkan beberapa pedoman keamanan yang baik:

  • Untuk organisasi besar atau kompleks, Anda dapat memutuskan pendekatan seperti berikut:

    • Berikan peran Admin Cloud KMS (roles/cloudkms.admin) kepada anggota tim keamanan IT Anda di seluruh project. Jika anggota tim yang berbeda menangani aspek yang berbeda dari siklus proses kunci, Anda dapat memberikan peran yang lebih terperinci kepada anggota tim tersebut, seperti peran Pengimpor Cloud KMS (roles/cloudkms.importer).
    • Berikan peran Cloud KMS Encrypter / Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) kepada pengguna atau aplikasi yang membaca atau menulis data terenkripsi.
    • Berikan peran Cloud KMS Public Key Viewer (roles/cloudkms.publicKeyViewer) kepada pengguna atau aplikasi yang perlu melihat bagian publik dari kunci yang digunakan untuk enkripsi asimetris.
    • Buat peran standar yang cocok dengan persyaratan bisnis Anda. Misalnya, pengguna yang sama mungkin perlu memantau kuota project dan melihat data log.
  • Untuk organisasi kecil dengan persyaratan keamanan sederhana, Anda dapat memilih pendekatan yang lebih sederhana dengan memberikan peran yang luas seperti Admin Organisasi (roles/resourcemanager.organizationAdmin). Namun, pendekatan ini mungkin tidak diskalakan dengan persyaratan berkelanjutan Anda.

  • Pertimbangkan untuk menghosting kunci Anda di project Google Cloud yang terpisah dari data yang dilindungi oleh kunci tersebut. Pengguna dengan peran dasar atau dengan hak istimewa tinggi dalam satu project, seperti editor, tidak dapat menggunakan peran ini untuk mendapatkan akses tidak sah ke kunci dalam project lain.

  • Hindari memberikan peran owner kepada anggota mana pun. Tanpa peran owner, tidak ada anggota dalam project yang dapat membuat kunci dan menggunakannya untuk mendekripsi data atau untuk menandatangani, kecuali jika setiap izin ini diberikan kepada anggota tersebut. Untuk memberikan akses administratif yang luas tanpa memberikan kemampuan untuk mengenkripsi atau mendekripsi, berikan peran Admin Cloud KMS (roles/cloudkms.admin).

  • Untuk membatasi akses ke data terenkripsi, seperti data pelanggan, Anda dapat membatasi siapa yang dapat mengakses kunci dan siapa yang dapat menggunakan kunci untuk dekripsi. Jika perlu, Anda dapat membuat peran khusus yang terperinci untuk memenuhi persyaratan bisnis.

Memeriksa izin

Untuk setiap jenis objek Cloud KMS yang izin IAM terperincinya dapat Anda tetapkan, objek tersebut memiliki metode testIamPermissions. Metode testIamPermissions menampilkan kumpulan izin yang telah diberikan oleh pemanggil untuk objek tersebut.

Anda tidak dapat menetapkan izin IAM pada versi kunci, sehingga jenis objek CryptoKeyVersion tidak memiliki metode ini.

Metode testIamPermissions objek akan menampilkan TestIamPermissionsResponse.

Untuk mengetahui contoh pemanggilan metode testIamPermissions, lihat dokumentasi untuk izin pengujian dalam dokumentasi IAM.

Langkah selanjutnya

  • Pelajari cara IAM memusatkan pengelolaan izin dan cakupan akses untuk resource Google Cloud.
  • Pahami berbagai jenis objek Cloud KMS.