Izin dan peran

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

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

Hierarki resource

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

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

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

Prinsip keamanan

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

  • Saat Anda menerapkan prinsip pemisahan tugas, tidak ada satu anggota pun yang memiliki semua akses yang diperlukan untuk menyelesaikan fungsi bisnis yang penting. Misalnya, teller bank hanya dapat menarik dana dari rekening jika pemegang rekening secara fisik hadir dan memulai transaksi.

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

Peran yang telah ditetapkan

IAM menyediakan peran bawaan yang memberikan akses untuk setiap jenis resource Google Cloud. Jika tidak ada peran bawaan yang memenuhi 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 bawaan, Anda dapat membuat peran khusus. Peran kustom memungkinkan Anda menerapkan prinsip hak istimewa terendah dengan memberikan izin minimum yang diperlukan untuk melakukan tugas tertentu.

Peran kustom mencakup satu atau beberapa izin yang tercantum dalam referensi IAM. Izin yang terkait dengan Cloud Key Management Service API dimulai dengan string cloudkms. Untuk mengetahui 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 lingkup project seperti owner, editor, dan viewer. Peran ini tidak memisahkan kemampuan untuk mengelola kunci dari kemampuan untuk menggunakan kunci untuk operasi kriptografi, dan tidak direkomendasikan untuk lingkungan produksi. Sebagai gantinya, gunakan peran bawaan atau buat peran khusus yang mencerminkan persyaratan bisnis Anda.

Contoh berikut membantu mengilustrasikan beberapa panduan 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 semua project. Jika anggota tim yang berbeda menangani aspek siklus proses kunci yang berbeda, Anda dapat memberikan peran yang lebih terperinci kepada anggota tim tersebut, seperti peran Cloud KMS Importer (roles/cloudkms.importer).
    • Berikan peran Pengenkripsi / Pendekripsi Cloud KMS (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 kunci yang digunakan untuk enkripsi asimetris.
    • Buat peran bawaan yang sesuai 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 untuk menggunakan pendekatan yang lebih sederhana dengan memberikan peran yang luas seperti Admin Organisasi (roles/resourcemanager.organizationAdmin). Namun, pendekatan ini mungkin tidak sesuai dengan persyaratan berkelanjutan Anda.

  • Pertimbangkan untuk menghosting kunci Anda di project Google Cloud terpisah dari data yang dilindungi oleh kunci tersebut. Pengguna dengan peran dasar atau dengan hak istimewa tinggi di satu project, seperti editor, tidak dapat menggunakan peran ini untuk mendapatkan akses tanpa izin ke kunci di 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 penandatanganan, 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 kustom terperinci untuk memenuhi persyaratan bisnis Anda.

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 kepada 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 contoh pemanggilan metode testIamPermissions, lihat dokumentasi untuk menguji izin dalam dokumentasi IAM.

Langkah selanjutnya

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