本页介绍了如何使用 Cloud Key Management Service (Cloud KMS) 执行以下对称密钥操作:
- 使用 Cloud KMS 密钥来加密文本或二进制内容(明文)。
- 解密使用 Cloud KMS 密钥进行加密的密文。
如果您想使用非对称密钥进行加密,请参阅使用非对称密钥对数据进行加密和解密。如需了解原始对称加密,请参阅原始对称加密。
准备工作
确保正在调用加密和解密方法的用户对密钥具有
cloudkms.cryptoKeyVersions.useToEncrypt
和cloudkms.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。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
使用 JSON 和 REST API 时,内容必须先进行 base64 编码,然后才能由 Cloud KMS 加密。
如需加密数据,请发出 POST
请求并提供相应的项目和密钥信息,并在请求正文的 plaintext
字段中指定要加密的 base64 编码文本。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
替换以下内容:
PROJECT_ID
:包含您要用于加密的密钥环和密钥的项目的 ID。LOCATION
:包含密钥环的 Cloud KMS 位置。KEY_RING
:包含您要用于加密的密钥的密钥环。KEY_NAME
:您要用于加密的密钥的名称。PLAINTEXT_TO_ENCRYPT
:您要加密的明文数据。您必须先对明文进行 base64 编码,然后才能调用encrypt
方法。
以下是包含 base64 编码数据的示例载荷:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
解密
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
替换以下内容:
KEY_NAME
:您要用于解密的密钥的名称。KEY_RING
:包含密钥的密钥环的名称。LOCATION
:包含密钥环的 Cloud KMS 位置。FILE_TO_DECRYPT
:您要解密的文件的路径。DECRYPTED_OUTPUT
:您要保存解密输出的路径。
如需了解所有标志和可能值,请使用 --help
标志运行命令。
C#
要运行此代码,请先设置 C# 开发环境并安装 Cloud KMS C# SDK。
Go
要运行此代码,请先设置 Go 开发环境并安装 Cloud KMS Go SDK。
Java
要运行此代码,请先设置 Java 开发环境并安装 Cloud KMS Java SDK。
Node.js
要运行此代码,请先设置 Node.js 开发环境并安装 Cloud KMS Node.js SDK。
PHP
要运行此代码,请先了解如何在 Google Cloud 上使用 PHP 并安装 Cloud KMS PHP SDK。
Python
要运行此代码,请先设置 Python 开发环境并安装 Cloud KMS Python SDK。
Ruby
要运行此代码,请先设置 Ruby 开发环境并安装 Cloud KMS Ruby SDK。
API
这些示例使用 curl 作为 HTTP 客户端来演示如何使用 API。如需详细了解访问权限控制,请参阅访问 Cloud KMS API。
从 Cloud KMS 中以 JSON 格式返回的解密后文本使用 base64 进行编码。
如需对加密数据进行解密,请发出 POST
请求并提供相应的项目和密钥信息,并在请求正文的 ciphertext
字段中指定要解密的加密文本(也称为ciphertext)。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
替换以下内容:
PROJECT_ID
:包含您要用于解密的密钥环和密钥的项目的 ID。LOCATION
:包含密钥环的 Cloud KMS 位置。KEY_RING
:包含您要用于解密的密钥的密钥环。KEY_NAME
:您要用于解密的密钥的名称。ENCRYPTED_DATA
:您要解密的加密数据。
以下是包含 base64 编码数据的示例载荷:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
后续步骤
- 详细了解原始对称加密。
- 详细了解信封加密。
- 尝试使用 Cloud KMS Codelab 加密和解密数据。