대칭 키로 데이터 암호화 및 복호화

이 페이지에서는 Cloud Key Management Service(Cloud KMS)를 사용해서 다음 대칭 키 작업을 수행하는 방법을 보여줍니다.

  • Cloud KMS 키를 사용하여 텍스트 또는 바이너리 콘텐츠(일반 텍스트)를 암호화합니다.
  • Cloud KMS 키로 암호화된 암호문을 복호화합니다.

암호화에 비대칭 키를 사용하려면 비대칭 키를 사용하여 데이터 암호화 및 복호화를 참조하세요. 원시 대칭 암호화에 대한 자세한 내용은 원시 대칭 암호화를 참조하세요.

시작하기 전에

  1. 키링을 만들고 키를 만듭니다.

  2. 암호화 및 복호화 메서드를 호출하는 사용자에게 해당 키에 대한 cloudkms.cryptoKeyVersions.useToEncryptcloudkms.cryptoKeyVersions.useToDecrypt 권한이 있는지 확인합니다.

    사용자가 암호화하거나 복호화할 수 있도록 허용하는 한 가지 방법은 사용자를 키의 roles/cloudkms.cryptoKeyEncrypter, roles/cloudkms.cryptoKeyDecrypter 또는 roles/cloudkms.cryptoKeyEncrypterDecrypter IAM 역할에 추가하는 것입니다. roles/cloudkms.admin 역할은 이 두 권한을 제공하지 않습니다. 자세한 내용은 권한 및 역할을 참조하세요.

암호화

gcloud

명령줄에서 Cloud KMS를 사용하려면 먼저 최신 버전의 Google Cloud CLI로 설치 또는 업그레이드하세요.

gcloud kms encrypt \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION  \
    --plaintext-file FILE_TO_ENCRYPT \
    --ciphertext-file ENCRYPTED_OUTPUT

다음을 바꿉니다.

  • KEY_NAME: 암호화에 사용할 키의 이름입니다.
  • KEY_RING: 키가 포함된 키링의 이름입니다.
  • LOCATION: 키링이 포함된 Cloud KMS 위치입니다.
  • FILE_TO_ENCRYPT: 암호화하려는 파일의 경로입니다.
  • ENCRYPTED_OUTPUT: 암호화된 출력을 저장할 경로입니다.

모든 플래그 및 가능한 값에 대한 정보를 보려면 --help 플래그와 함께 명령어를 실행하세요.

C#

이 코드를 실행하려면 먼저 C# 개발 환경을 설정하고 Cloud KMS C# SDK를 설치합니다.


using Google.Cloud.Kms.V1;
using Google.Protobuf;
using System.Text;

public class EncryptSymmetricSample
{
    public byte[] EncryptSymmetric(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key",
      string message = "Sample message")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key name.
        CryptoKeyName keyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);

        // Convert the message into bytes. Cryptographic plaintexts and
        // ciphertexts are always byte arrays.
        byte[] plaintext = Encoding.UTF8.GetBytes(message);

        // Call the API.
        EncryptResponse result = client.Encrypt(keyName, ByteString.CopyFrom