创建客户主密钥
概述
在本指南中,您将学习如何在您选择的密钥管理系统(KMS)中生成客户主密钥。在创建支持可查询加密的应用程序之前,请先生成客户主密钥。
开始之前
在继续之前,请完成前面的任务
步骤
以下选择您的密钥提供商标签页。
创建客户主密钥
登录到您的AWS管理控制台.
导航到AWS KMS控制台。
创建客户主密钥
根据AWS官方文档创建新的对称密钥,请参阅创建对称KMS密钥。您创建的密钥是您的客户主密钥。选择一个有助于您识别的名称和描述;这些字段不会影响您的CMK.
在使用权限步骤是密钥生成过程中的关键步骤,应用以下默认密钥策略,该策略启用身份和访问管理(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 用户
按照 AWS 官方文档在 AWS 管理控制台中创建一个新的程序性 IAM 用户。请参阅 添加用户。您将使用此 IAM 用户作为您的可查询加密应用程序的服务账户。您的应用程序使用 IAM 用户通过 AWS KMS 进行身份验证,以使用您的客户主密钥 (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 角色进行身份验证
当将启用查询加密的应用程序部署到生产环境时,请使用 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
)密钥版本
你将在本教程的后面需要它们来构建你的
dataKeyOpts
对象。授予权限
授予客户端应用程序对密钥的
wrap
和unwrap
权限。
注册一个GCP服务帐户
注册或登录到您的现有帐户,请访问 Google Cloud.
为您项目创建服务帐户
要在Google Cloud上创建服务帐户,请遵循Google官方文档中的创建服务帐户指南。
添加服务帐户密钥
要在Google Cloud上添加服务帐户密钥,请遵循Google官方文档中的管理服务帐户密钥指南。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。除非您使用附加服务帐户,否则请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
重要
创建服务帐户密钥时,您将一次性下载私钥信息。请确保以PKCS12或JSON格式下载此文件,以便在后续教程中使用。
创建一个 GCP 客户主密钥
创建一个新的客户主密钥
按照谷歌官方文档中的创建密钥指南创建一个密钥环和一个对称密钥。
这个密钥是您的客户主密钥 (CMK)。
请记录以下 CMK 的详细信息,以便在教程的下一步中使用。
字段必填描述key_name是CMK 的标识符。key_ring是密钥所属密钥组的标识符。key_version否指定密钥的版本。location是指定密钥的地理位置。endpoint否Google Cloud KMS的主机地址和可选端口号。默认值为cloudkms.googleapis.com
。
指定您的证书
您的客户端必须通过TLS连接到您的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驱动程序与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 } }
下一步
在安装驱动程序和依赖项并创建客户主密钥后,您可以创建启用了可查询加密的应用程序。