Thales CipherTrust Manager(前身为 Gemalto KeySecure)
本教程展示如何设置一个使用KES服务器Thales CipherTrust Manager实例(前身为 Gemalto KeySecure)作为持久且安全的密钥存储。
本指南假设您已有一个正在运行的CipherTrust Manager实例。
该指南已通过CipherTrust Manager测试验证。k170v版本2.0.0和 Gemalto KeySecurek170v版本1.9.1和1.10.0.
CipherTrust Manager 设置
要连接到您的 CipherTrust Manager 实例,请通过ksctlCLI 你需要一个config.yaml类似于文件:
KSCTL_URL: <your-keysecure-endpoint>
KSCTL_USERNAME: <your-user/admin-name>
KSCTL_PASSWORD: <your-user/admin-password>
KSCTL_VERBOSITY: false
KSCTL_RESP: json
KSCTL_NOSSLVERIFY: true
KSCTL_TIMEOUT: 30
KSCTL_URL, KSCTL_USERNAME和KSCTL_PASSWORD如果您的 CipherTrust Manager 实例已配置了受您机器信任的 TLS 证书,那么您也可以设置KSCTL_NOSSLVERIFY: false.
-
为 KES 创建一个新群组
ksctl groups create --name KES-Service -
为群组创建新用户
这会打印一个包含 a 的 JSON 对象user_id后续步骤所需。 如果您已有现有用户想要分配给KES-Servicegroup,跳过此步骤并继续执行 3。ksctl users create --name <username> --pword '<password>' -
将用户分配到
KES-Service在步骤1中创建的组ksctl groups adduser --name KES-Service --userid "<user-ID>"用户ID在创建用户时显示。 否则,请通过以下方式获取ID:
ksctl users list命令。用户ID类似于:
local|8791ce13-2766-4948-a828-71bac67131c9. -
制定一项关于
KES-Servicegroup创建一个名为的文本文件
kes-policy.json授予成员KES-Servicegroup创建, 读取和删除权限。 文件内容应类似于以下内容:{ "allow": true, "name": "kes-policy", "actions":[ "CreateKey", "ExportKey", "ReadKey", "DeleteKey" ], "resources": [ "kylo:kylo:vault:secrets:*" ] }This policy allows KES to create, fetch and delete master keys. If you want to prevent KES from e.g. deleting master keys omit the删除键动作。
同样,您可以通过以下方式限制 KES 可以访问的主密钥:
resources定义。使用以下命令通过上面创建的文件来创建策略。
ksctl policy create --jsonfile kes-policy.json -
将策略附加到
KES-Servicegroup创建一个名为
kes-attachment.json根据策略附件规范:{ "cust": { "groups": ["KES-Service"] } }使用以下命令来附加
kes-policy到KES-Servicegroup:ksctl polattach create -p kes-policy -g kes-attachment.json -
为 KES 服务器创建一个刷新令牌,用于获取短期身份验证令牌。
以下命令返回一个新的刷新令牌:
ksctl tokens create --user <username> --password '<password>' --issue-rt | jq -r .refresh_token替换
<username>和<password>使用属于该组成员的用户的凭据KES-Servicegroup.该命令输出一个类似于以下内容的刷新令牌:
CEvk5cdHLG7si05LReIeDbXE3PKD082YdUFAnxX75md3jzV0BnyHyAmPPJiA0
KES Server Setup
KES服务器需要一个TLS私钥和证书。
KES服务器是默认安全并且只能通过 TLS 运行。 本教程为简化起见使用自签名证书。
-
为 KES 服务器生成 TLS 私钥和证书
以下命令生成一个新的TLS私钥
server.key以及一个自签名的 X.509 证书server.cert这是为该IP地址签发的127.0.0.1和 DNS 名称localhost(作为 SAN)。 根据您的设置自定义命令。kes identity new --server --key server.key --cert server.cert --ip "127.0.0.1" --dns localhost任何其他用于 X.509 证书生成的工具也同样适用。 例如,您可以使用
openssl:openssl ecparam -genkey -name prime256v1 | openssl ec -out server.key openssl req -new -x509 -days 30 -key server.key -out server.cert \ -subj "/C=/ST=/L=/O=/CN=localhost" -addext "subjectAltName = IP:127.0.0.1" -
为应用程序创建私钥和证书
kes identity new --key=app.key --cert=app.cert app你可以计算
app随时更改身份。kes identity of app.cert -
创建配置文件
server-config.ymladdress: 0.0.0.0:7373 root: disabled # We disable the root identity since we don't need it in this guide tls: key: server.key cert: server.cert policy: my-app: allow: - /v1/key/create/my-app* - /v1/key/generate/my-app* - /v1/key/decrypt/my-app* identities: - ${APP_IDENTITY} keystore: gemalto: keysecure: endpoint: "" # The REST API endpoint of your KeySecure instance - e.g. https://127.0.0.1 credentials: token: "" # Your refresh token domain: "" # Your domain. If empty, defaults to root domain. retry: 15s tls: ca: "" # Optionally, specify the certificate of the CA that issued the KeySecure TLS certificate.使用您已刷新的令牌。
-
在新窗口/标签页中启动 KES 服务器:
export APP_IDENTITY=$(kes identity of app.cert) kes server --config=server-config.yml --auth=off该命令使用--auth=off因为我们的root.cert和app.cert证书是自签名的。如果启动服务器失败并出现类似错误信息:
x509: certificate is not valid for any names, but wanted to match <your-endpoint>那么您的 CipherTrust Manager 实例将提供一个既没有通用名称(主题)也没有主题备用名称(SAN)的 TLS 证书。 此类证书是无效的。 请更新您的 CipherTrust Manager 实例的 TLS 证书。
您可以通过以下方式分析证书:
openssl x509 -text -noout <certificate> -
在另一个窗口或标签页中,连接到服务器
export KES_CLIENT_CERT=app.cert export KES_CLIENT_KEY=app.key kes key create -k my-app-keyexport APP_IDENTITY=$(kes identity of app.cert) kes server --config=server-config.yml --auth=off该命令使用--auth=off因为我们的root.cert和app.cert证书是自签名的。 -
从先前创建的密钥派生并解密数据密钥
my-app-keykes key derive -k my-app-key { plaintext : ... ciphertext: ... }kes key decrypt -k my-app-key <base64-ciphertext>
使用 KES 与 MinIO 服务器
MinIO Server 需要 KES 来启用服务器端数据加密。
查看MinIO KES 操作指南有关将新的 KES 服务器与 MinIO 服务器配合使用所需的额外步骤。
配置参考
以下部分介绍了使用泰雷兹 CipherTrust Manager(前身为 Gemalto KeySecure)作为根 KMS 存储外部密钥的 Key Encryption Service (KES) 配置设置,例如用于 MinIO 服务器端加密的密钥。