Overview
在本指南中,您将了解如何在所选密钥管理系统中生成客户主密钥。 在创建启用了 Queryable Encryption 的应用程序之前,生成客户主密钥。
开始之前
请先完成上述任务,然后再继续:
步骤
选择下面与您的密钥提供程序对应的标签页。
创建客户主密钥
创建客户主密钥
按照有关创建对称KMS密钥的Amazon Web Services官方文档创建新的对称密钥。您创建的密钥是客户主密钥。选择有助于识别的名称和描述;这些字段不会影响 集合扫描 的功能或配置。
在密钥生成过程的 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 用户
创建 IAM 用户
按照有关 添加用户 的Amazon Web Services官方文档,在Amazon Web Services管理控制台中创建新的编程 IAM 用户。您将使用此 IAM 用户作为启用了Queryable Encryption的应用程序的服务帐户。您的应用程序使用IAM 用户通过Amazon Web Services KMS进行身份验证,通过客户主密钥(集合扫描) 对数据加密密钥 (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 Platform上创建服务帐户,请按照 Google 官方文档中的创建服务帐户指南 进行操作。
添加服务帐户密钥
要在Google Cloud Platform上添加服务帐户密钥,请遵循 Google 官方文档中的管理服务帐户密钥指南。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 除非您使用附加的服务帐户,否则请确保以 PKCS 12或JSON格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
重要
创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。
创建GCP客户主密钥
创建新的客户主密钥
按照 Google 官方文档中的创建密钥指南创建密钥环和对称密钥。
此密钥是您的客户主密钥 ( CMK )。
记录您的客户主密钥的以下详细信息,以便在本教程的后续步骤中使用。
字段必需说明key_name
是
客户主密钥的标识符。
key_ring
是
您的密钥所属的密钥群组的标识符。
key_version
No
已命名密钥的版本。
位置
是
为密钥指定的区域。
端点
No
Google Cloud Platform KMS 的主机和可选端口。默认值为
cloudkms.googleapis.com
。
指定您的证书
客户端必须通过 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);
重要
客户端证书必须采用 pcks12 格式。您可以通过以下命令使用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, }
重要
将Go驾驶员与 PyKMIP 结合使用时,必须使用带有 ECDSA 密钥 的证书。
配置以下虚拟机选项以指定包含 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 的应用程序。