创建客户主密钥
Overview
在本指南中,您将了解如何在所选密钥管理系统中生成客户主密钥。 在创建启用了 Queryable Encryption 的应用程序之前,生成客户主密钥。
开始之前
请先完成上述任务,然后再继续:
步骤
选择下面与您的密钥提供程序对应的标签页。
创建客户主密钥
登录到 AWS 管理控制台。
导航到 AWS KMS控制台。
创建客户主密钥
按照有关 创建对称 密钥 的 官方文档创建新的对称密钥Amazon Web Services KMS。您创建的密钥是客户主密钥。 选择有助于识别的名称和描述;这些字段不会影响 集合扫描的功能或配置。
在密钥生成过程的 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 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
对象。授予权限
授予您的客户端应用程序对该密钥的
wrap
和unwrap
权限。
注册 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);
重要
客户端证书必须采用 pks 12格式。 您可以使用 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 的应用程序。