创建客户主密钥
Overview
在本指南中,您将了解如何在所选密钥管理系统中生成客户主密钥。 在创建启用了 Queryable Encryption 的应用程序之前,生成客户主密钥。
开始之前
请先完成上述任务,然后再继续:
步骤
选择下面与您的密钥提供程序对应的标签页。
创建客户主密钥
登录您的 AWS 管理控制台 。
导航到 AWS KMS 控制台 。
创建客户主密钥
按照有关 创建对称 KMS 密钥的 AWS 官方文档创建新的对称密钥 。您创建的密钥是客户主密钥。选择有助于识别的名称和描述;这些字段不会影响 CMK 的功能或配置。
在密钥生成过程的 Usage Permissions步骤中,应用以下默认密钥策略,该策略使身份和访问管理 ( IAM ) 策略能够授予对您的客户主密钥的访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "<ARN of your AWS account principal>" }, "Action": "kms:*", "Resource": "*" } ] }
重要
记录您的客户主密钥的 Amazon 资源名称 (ARN) 和区域。您将在本指南的后续步骤中用到它们。
创建 AWS IAM 用户
导航到 AWS IAM 控制台 。
创建 IAM 用户
按照有关 添加用户 的 官方文档,在 管理控制台中创建新的编程 IAM 用户Amazon Web ServicesAmazon Web Services 。您将使用此IAM用户作为启用了 Queryable Encryption 的应用程序的服务帐户。 Amazon Web ServicesKMS您的应用程序使用 IAM 用户通过 进行身份验证,通过客户主密钥 (CMK) 对数据加密密钥 (DEK) 进行加密和解密。
重要
记录凭证
确保在创建 IAM 用户的最后一步记录以下 IAM 凭证:
访问密钥 ID
秘密访问密钥
您有一次机会记录这些凭证。如果在该步骤中没有记录这些凭证,则必须创建另一个 IAM 用户。
授予权限
向该 IAM 用户授予远程主密钥的 kms:Encrypt
和 kms:Decrypt
权限。
重要
新的客户端IAM用户不应具有主密钥的管理权限。 为了确保数据安全,请遵循 最小权限原则。
以下内联策略允许 IAM 用户按照最小权限原则使用客户主密钥进行加密和解密:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:Decrypt", "kms:Encrypt"], "Resource": "<the Amazon Resource Name (ARN) of your remote master key>" } ] }
要将上述政策应用于 IAM 用户,请遵守 AWS 文档中的添加 IAM 身份权限指南。
重要
在生产环境中使用 IAM 角色进行身份验证
将启用了 Queryable Encryption 的应用程序部署到生产环境时,请使用IAM角色而不是IAM用户对应用程序进行身份验证。
要了解有关 IAM 角色的更多信息,请参阅官方 AWS 文档中的以下页面:
向 Azure 注册您的应用程序
登录Azure
向 Azure Active Directory 注册您的应用程序
要在 Azure Active Directory 上注册应用程序,请按照 Microsoft 官方文档 注册应用程序到 Microsoft 身份平台 快速入门。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
在本教程的后面内容中,您将需要它们来构造kmsProviders
对象。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
在本教程的后面内容中,您将需要它们来构造kmsProviders
对象。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
在本教程的后面内容中,您将需要它们来构造kmsProviders
对象。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
除非您在 Azure 虚拟机中运行客户端,否则您将需要这些档案来构造本教程后面的kmsProviders
对象。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
在本教程的后面内容中,您将需要它们来构造kmsProviders
对象。
重要
记录凭证
确保记录以下凭证:
租户 ID
客户 ID
客户端密钥
在本教程的后面内容中,您将需要它们来构造kmsProviders
对象。
创建客户主密钥
创建 Azure Key Vault 和客户主密钥
要创建新的 Azure Key Vault 实例和客户主密钥,请遵循 Microsoft 官方文档 使用 Azure 门户从 Azure Key Vault 设置和检索密钥 快速入门。
重要
记录凭证
确保记录以下凭证:
密钥名称
密钥标识符(本指南后面称为
keyVaultEndpoint
)keyVersion
在本教程的后面内容中,您将需要它们来构造dataKeyOpts
对象。
注册 GCP 服务帐号
注册或登录您在 Google Cloud 上的现有帐号 。
为项目创建服务帐户
要在GCP 上创建服务帐号,请按照 创建服务帐号 Google 官方文档中的指南。
添加服务帐户密钥
要在 上添加服务帐户密钥,请按照GCP 管理服务帐户密钥 Google 官方文档中的指南。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。除非您使用附加的服务帐户,否则请确保以 PKCS 12或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
指定您的证书
客户端必须通过 TLS 连接到KMIP兼容密钥提供商,并提供KMIP兼容密钥提供商接受的客户端证书:
const tlsOptions = { kmip: { tlsCAFile: process.env["KMIP_TLS_CA_FILE"], // Path to your TLS CA file tlsCertificateKeyFile: process.env["KMIP_TLS_CERT_FILE"], // Path to your TLS certificate key file }, };
var tlsOptions = new Dictionary<string, SslSettings>(); var sslSettings = new SslSettings(); var clientCertificate = new X509Certificate2(_appSettings["Kmip:TlsCertP12"]!); // Full path to your client certificate p12 file sslSettings.ClientCertificates = new[] { clientCertificate }; tlsOptions.Add("kmip", sslSettings);
重要
客户端证书必须采用 pks12 格式。您可以使用 OpenSSL 将证书转换为 使用以下命令:
openssl pcks12 -export -out "<new pcks12 certificate>" -in "<certificate to convert>" \ -name "<new certificate name>" -password "<new certificate password>"
tlsOpts := map[string]interface{}{ "tlsCertificateKeyFile": os.Getenv("KMIP_TLS_CERT_ECDSA_FILE"), // Path to your client certificate file "tlsCAFile": os.Getenv("KMIP_TLS_CA_ECDSA_FILE"), // Path to your KMIP certificate authority file } kmipConfig, err := options.BuildTLSConfig(tlsOpts) if err != nil { panic(fmt.Sprintf("Unable to retrieve certificates from your environment: %s\n", err)) } tlsConfig := map[string]*tls.Config{ "kmip": kmipConfig, }
重要
您必须使用带有 ECDSA 密钥 的证书 将 Go 驱动程序与 PyKMIP 结合使用时。
配置以下虚拟机选项,指定包含 KMIP TLS 证书的密钥库和信任库,并将它们添加到用于启动 Java 应用程序的命令中:
-Djavax.net.ssl.enabled=true -Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.keyStore=REPLACE-WITH-PATH-TO-PKC-KEYSTORE -Djavax.net.ssl.keyStorePassword=REPLACE-WITH-KEYSTORE-PASSWORD -Djavax.net.ssl.trustStoreType=jks -Djavax.net.ssl.trustStore=REPLACE-WITH-PATH-TO-TRUSTSTORE -Djavax.net.ssl.trustStorePassword=REPLACE-WITH-TRUSTSTORE-PASSWORD
const tlsOptions = { kmip: { tlsCAFile: process.env.KMIP_TLS_CA_FILE, // Path to your TLS CA file tlsCertificateKeyFile: process.env.KMIP_TLS_CERT_FILE, // Path to your TLS certificate key file }, };
tls_options = { "kmip": { "tlsCAFile": os.environ['KMIP_TLS_CA_FILE'], # Path to your TLS CA file "tlsCertificateKeyFile": os.environ['KMIP_TLS_CERT_FILE'] # Path to your TLS certificate key file } }
后续步骤
安装驱动程序和依赖项并创建客户主密钥后,您可以创建启用了 Queryable Encryption 的应用程序。