Membuat kunci

Halaman ini menunjukkan cara membuat kunci di Cloud KMS. Kunci dapat berupa kunci enkripsi simetris atau asimetris, kunci penandatanganan asimetris, atau kunci penandatanganan MAC.

Saat membuat kunci, Anda menambahkannya ke key ring di lokasi Cloud KMS tertentu. Anda dapat membuat ring kunci baru atau menggunakan ring kunci yang sudah ada. Di halaman ini, Anda akan membuat kunci Cloud KMS atau Cloud HSM baru dan menambahkannya ke key ring yang ada. Untuk membuat kunci Cloud EKM, lihat Membuat kunci eksternal. Untuk mengimpor kunci Cloud KMS atau Cloud HSM, lihat Mengimpor kunci.

Sebelum memulai

Sebelum menyelesaikan tugas di halaman ini, Anda memerlukan hal berikut:

  1. Resource project Google Cloud untuk memuat resource Cloud KMS Anda. Sebaiknya gunakan project terpisah untuk resource Cloud KMS Anda yang tidak berisi resource Google Cloud lainnya.
  2. Nama dan lokasi key ring tempat Anda ingin membuat kunci. Pilih gantungan kunci di lokasi yang dekat dengan resource Anda yang lain dan yang mendukung tingkat perlindungan yang Anda pilih. Untuk melihat lokasi yang tersedia dan tingkat perlindungan yang didukungnya, lihat Lokasi Cloud KMS. Untuk membuat key ring, lihat Membuat key ring.
  3. Opsional: Untuk menggunakan gcloud CLI, siapkan lingkungan Anda.

    Di konsol Google Cloud , aktifkan Cloud Shell.

    Aktifkan Cloud Shell

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna membuat kunci, minta administrator untuk memberi Anda peran IAM berikut pada project atau resource induk:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk membuat kunci. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat kunci:

  • cloudkms.cryptoKeys.create
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.list
  • cloudkms.cryptoKeyVersions.create
  • cloudkms.cryptoKeyVersions.get
  • cloudkms.cryptoKeyVersions.list
  • cloudkms.keyRings.get
  • cloudkms.keyRings.list
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • Untuk mengambil kunci publik: cloudkms.cryptoKeyVersions.viewPublicKey
  • Untuk membuat kunci HSM tenant tunggal:
    • cloudkms.singleTenantHsmInstances.get
    • cloudkms.singleTenantHsmInstances.use

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Membuat kunci enkripsi simetris

Konsol

  1. Di konsol Google Cloud , buka halaman Key Management.

    Buka Key Management

  2. Klik nama key ring yang akan Anda buat kunci.

  3. Klik Create key.

  4. Untuk Key name, masukkan nama untuk kunci Anda.

  5. Untuk Protection level, pilih Software, HSM, atau Single-tenant HSM.

  6. Jika Anda memilih HSM tenant tunggal, pilih instance HSM tenant tunggal tempat Anda ingin membuat kunci.

  7. Untuk Key material, pilih Generated key.

  8. Untuk Purpose, pilih Symmetric encrypt/decrypt.

  9. Setujui nilai default untuk Rotation period dan Starting on.

  10. Klik Create.

gcloud

Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.

Untuk membuat kunci software atau Multi-tenant Cloud HSM, gunakan perintah kms keys create:

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --protection-level "PROTECTION_LEVEL"

Ganti kode berikut:

  • KEY_NAME: nama kunci.
  • KEY_RING: nama key ring yang berisi kunci.
  • LOCATION: lokasi Cloud KMS key ring.
  • PROTECTION_LEVEL: tingkat perlindungan yang akan digunakan untuk kunci—misalnya, software atau hsm. Anda dapat menghilangkan flag --protection-level untuk kunci software.

Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan flag --help.

Untuk membuat kunci Single-tenant Cloud HSM, tambahkan flag --crypto-key-backend ke perintah kms keys create:

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --protection-level "hsm-single-tenant" \
    --crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"

Ganti kode berikut:

  • INSTANCE_PROJECT: ID project tempat instance Single-tenant Cloud HSM Anda berada.
  • INSTANCE_NAME: nama instance Single-tenant Cloud HSM tempat Anda ingin membuat kunci. Untuk mengetahui informasi selengkapnya tentang instance Cloud HSM tenant tunggal, lihat Membuat dan mengelola instance Cloud HSM tenant tunggal.

Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan flag --help.

C#

Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu dan instal SDK C# Cloud KMS.


using Google.Cloud.Kms.V1;

public class CreateKeySymmetricEncryptDecryptSample
{
    public CryptoKey CreateKeySymmetricEncryptDecrypt(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring",
      string id = "my-symmetric-encryption-key")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the parent key ring name.
        KeyRingName keyRingName = new KeyRingName(projectId, locationId, keyRingId);

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            Purpose = CryptoKey.Types.CryptoKeyPurpose.EncryptDecrypt,
            VersionTemplate = new CryptoKeyVersionTemplate
            {
                Algorithm = CryptoKeyVersion.Types.CryptoKeyVersionAlgorithm.GoogleSymmetricEncryption,
            }
        };

        // Call the API.
        CryptoKey result = client.CreateCryptoKey(keyRingName, id, key);

        // Return the result.
        return result;
    }
}

Go

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Cloud KMS Go SDK.

import (
	"context"
	"fmt"
	"io"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
)

// createKeySymmetricEncryptDecrypt creates a new symmetric encrypt/decrypt key
// on Cloud KMS.
func createKeySymmetricEncryptDecrypt(w io.Writer, parent, id string) error {
	// parent := "projects/my-project/locations/us-east1/keyRings/my-key-ring"
	// id := "my-symmetric-encryption-key"

	// Create the client.
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("failed to create kms client: %w", err)
	}
	defer client.Close()

	// Build the request.
	req := &kmspb.CreateCryptoKeyRequest{
		Parent:      parent,
		CryptoKeyId: id,
		CryptoKey: &kmspb.CryptoKey{
			Purpose: kmspb.CryptoKey_ENCRYPT_DECRYPT,
			VersionTemplate: &kmspb.CryptoKeyVersionTemplate{
				Algorithm: kmspb.CryptoKeyVersion_GOOGLE_SYMMETRIC_ENCRYPTION,
			},
		},
	}

	// Call the API.
	result, err := client.CreateCryptoKey(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to create key: %w", err)
	}
	fmt.Fprintf(w, "Created key: %s\n", result.Name)
	return nil
}

Java

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Cloud KMS Java SDK.

import com.google.cloud.kms.v1.CryptoKey;
import com.google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose;
import com.google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm;
import com.google.cloud.kms.v1.CryptoKeyVersionTemplate;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import com.google.cloud.kms.v1.KeyRingName;
import java.io.IOException;

public class CreateKeySymmetricEncryptDecrypt {

  public void createKeySymmetricEncryptDecrypt() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String id = "my-key";
    createKeySymmetricEncryptDecrypt(projectId, locationId, keyRingId, id);
  }

  // Create a new key that is used for symmetric encryption and decryption.
  public void createKeySymmetricEncryptDecrypt(
      String projectId, String locationId, String keyRingId, String id) throws IOException {
    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
      // Build the parent name from the project, location, and key ring.
      KeyRingName keyRingName = KeyRingName.of(projectId, locationId, keyRingId);

      // Build the symmetric key to create.
      CryptoKey key =
          CryptoKey.newBuilder()
              .setPurpose(CryptoKeyPurpose.ENCRYPT_DECRYPT)
              .setVersionTemplate(
                  CryptoKeyVersionTemplate.newBuilder()
                      .setAlgorithm(CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION))
              .build();

      // Create the key.
      CryptoKey createdKey = client.createCryptoKey(keyRingName, id, key);
      System.out.printf("Created symmetric key %s%n", createdKey.getName());
    }
  }
}

Node.js

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu dan instal Cloud KMS Node.js SDK.

//
// TODO(developer): Uncomment these variables before running the sample.
//
// const projectId = 'my-project';
// const locationId = 'us-east1';
// const keyRingId = 'my-key-ring';
// const id = 'my-symmetric-encryption-key';

// Imports the Cloud KMS library
const {KeyManagementServiceClient}