Oracle ZFS Storage Appliance 为池、项目和单个共享资源(文件系统和 LUN)提供透明数据加密。该设备包括内置本地密钥库,还支持 Oracle Key Manager (OKM) 和密钥管理互操作性协议 (Key Management Interoperability Protocol, KMIP) 加密。每个加密的项目或共享资源都需要一个来自本地、OKM 或 KMIP 密钥库的包装密钥。数据加密密钥由存储设备管理,并使用包装密钥永久加密存储。
必须先创建加密密钥,然后才能创建加密池、项目或共享资源。
由于必须先配置密钥库,然后再创建池,因此不能在进行初始系统配置时或在恢复出厂设置后创建加密池。
在为加密池中的共享资源或项目设置复制之前,请确保在源上使用的加密密钥在目标上也可用。
下表介绍了可用于管理加密密钥的 RESTful API 请求。在该表中,keystore 的值为 local、okm 或 kmip。key 的值为 keyname 属性的值。列出加密密钥中介绍了密钥属性。
|
要配置本地密钥库,请设置主密码短语。对于本地密钥库,master_passphrase 是唯一可以列出或修改的属性。
检查是否设置了 master_passphrase:
GET /api/storage/v2/encryption/local HTTP/1.1
输出:
HTTP/1.1 200 OK
Content-Type: application/json
{
"keystore": {
"href": "/api/storage/v2/encryption/local",
"master_passphrase": false,
"keys": []
}
}
为 master_passphrase 指定值:
PUT /api/storage/v2/encryption/local HTTP/1.1
Host: zfs-storage.example.com:215
Content-Type: application/json
Accept: application/json
{
"master_passphrase": "passphrase"
}
确认是否设置了 master_passphrase:
GET /api/storage/v2/encryption/local HTTP/1.1
输出:
HTTP/1.1 200 OK
Content-Type: application/json
{
"keystore": {
"href": "/api/storage/v2/encryption/local",
"master_passphrase": true,
"keys": []
}
}
下表介绍了配置 OKM 密钥库时必须设置的属性。
|
检查是否设置了上面的属性:
GET /api/storage/v2/encryption/okm HTTP/1.1
输出:
HTTP/1.1 200 OK
Content-Type: application/json
{
"keystore": {
"href": "/api/storage/v2/encryption/okm",
"agent_id": "",
"registration_pin": false,
"server_addr": "",
"keys": []
}
}
为 agent_id、registration_pin 和 server_addr 指定值:
PUT /api/storage/v2/encryption/okm HTTP/1.1
Host: zfs-storage.example.com:215
Content-Type: application/json
Accept: application/json
{
"agent_id": "agent-id",
"registration_pin": "reg-pin",
"server_addr": "ipaddr"
}
KMIP 密钥库与符合 KMIP 的服务器(包括 Oracle Key Vault)结合使用。Oracle Key Vault 是一个安装在专用服务器上的软件设备,支持 OASIS KMIP 标准。
要使用 KMIP 配置加密,请上载从 KMIP 管理员收到的密钥和证书,如上载密钥或证书中所述。
上载密钥和证书后,指定 KMIP 服务器、客户机证书和密钥名称。
下表介绍了配置 KMIP 密钥库时要设置的属性。
|
有关 host_match 和 destroy_key_on_remove 的更多信息,请参见Oracle ZFS Storage Appliance 管理指南,发行版 OS8.8.x中的“密钥管理互操作性协议 (Key Management Interoperability Protocol, KMIP) 密钥库”。
检查是否设置了上面的属性:
GET /api/storage/v2/encryption/kmip HTTP/1.1
输出:
HTTP/1.1 200 OK
Content-Type: application/json
{
"keystore": {
"href": "/api/storage/v2/encryption/kmip",
"server_list": [
"ipaddr-or-hostname"
],
"client_cert": "134a9138-29a0-4720-80bb-ec2b13457c39",
"host_match": false,
"destroy_key_on_remove": true,
"keys": [],
... detailed information about the private key, certificate, and certificate authority ...
}
}
配置密钥库后,要创建密钥,只需设置密钥名称。以下示例创建一个新的 KMIP 密钥。有关示例结果,请参见列出加密密钥。
请求示例:
POST /api/storage/v2/encryption/kmip/keys HTTP/1.1
Host: zfs-storage.example.com:215
Authorization: Basic Tm8gcGVla2luZyE=
Content-Type: application/json
Accept: application/json
{
"keyname": "atz-1-27-2021"
}
此命令列出所有加密密钥的属性。命令成功执行后,将返回 HTTP 状态 200 (OK)。HTTP 正文包含 JSON 格式的密钥数组。下表介绍了加密密钥属性。
|
以下示例列出所有本地、OKM 和 KMIP 密钥。
请求示例:
GET /api/storage/v2/encryption/local/keys /api/storage/v2/encryption/okm/keys /api/storage/v2/encryption/kmip/keys HTTP/1.1
结果示例:
此结果表明此设备上不存在本地或 OKM 密钥,存在一个 KMIP 密钥。
{
"keys": {
}
}
{
"keys": {
}
}
{
"keys": [{
"cipher": "AES",
"keyname": "atz-1-27-2021",
"href": "/api/storage/v2/encryption/kmip/keys/key-000"
}]
}
dependents 查询列出使用指定密钥加密的任何共享资源、项目或池。
以下示例显示,仅默认池中的文件系统 fs-enc 使用 atz-1-27-2021 KMIP 密钥进行了加密。
请求示例:
GET /api/storage/v2/encryption/kmip/keys/atz-1-27-2021/dependents HTTP/1.1
结果示例:
{
"dependents": [
"pool-0/local/default/fs-enc"
]
}
要删除密钥,请使用密钥的 href 属性值(而非密钥名称)。成功删除后将返回 HTTP 状态 204 (No Content)。
删除密钥后,使用该密钥的所有池和共享资源中的所有数据都将变得无法访问。这相当于永久性安全销毁数据且此操作不可撤消,除非已经准备通过备份密钥来执行密钥恢复。
请求示例:
DELETE /api/storage/v2/encryption/kmip/keys/key-000 HTTP/1.1 Host: zfs-storage.example.com:215 Accept: application/json