你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Oracle Exadata Database@Azure与 Azure Key Vault 集成

本文中,您将学习如何为 Oracle 数据库@Azure 上的 Exadata 数据库服务存储和管理 Oracle 透明数据加密(TDE)主加密密钥(MEK)。 可以使用 Azure Key Vault(AKV)服务的所有三个层:

  • AKV 标准层
  • AKV 高级层
  • AKV 托管 HSM

这种集成使 Oracle Database@Azure客户能够满足各种 安全合规性密钥管理 需求-从基于软件的密钥存储到单租户、FIPS 140-3 级别 3 验证的硬件安全模块。

在 Azure 上使用 Azure Key Vault 的 Oracle 数据库架构图。

先决条件

在开始集成之前,请确保满足以下先决条件:

  • 已预配 Oracle Database@Azure:已在 Azure 虚拟网络中的委托子网中部署了 Exadata VM 群集,并且你有权访问 Oracle 云基础结构 (OCI) 控制台进行管理。

  • 已启用高级网络:如果尚未配置,请确保根据 Oracle Database@Azure 的网络规划 | Microsoft Learn指南启用高级网络功能,以启用托管 HSM 和 Azure Arc 所需的专用链接连接。

  • Azure Key Vault 专用连接:已配置并可通过 Exadata 访问 Azure Key Vault 的 DNS 配置的专用终结点。 有关详细信息,请参阅 将 Key Vault 与 Azure 专用链接集成 |Microsoft Learn

  • NAT 网关:标识连接器设置需要出站 Internet 连接才能访问 Microsoft Entra 公共终结点。 如果在与 Oracle 部署相同的 VNET 或共享中心中没有这些设备,则可以使用所选的 Azure NAT 网关、Azure 防火墙或网络虚拟设备(NVA)来实现此连接,如果使用中心/辐射拓扑。

  • Azure Arc 的专用链接范围和专用终结点配置(可选):如果使用专用链接进行 Azure Arc 代理安装,则必须配置 Azure Arc 专用链接范围和专用终结点,然后才能从 Exadata 访问。 还必须配置 DNS,并且必须能够从 Exadata 解析终结点。

  • Azure 订阅和权限:你有足够的 Azure 权限:

    • 在创建 Key Vault 的订阅或资源组上,需要“所有者/参与者”Azure 角色(用于资源创建和角色分配)。
    • 如果创建用于管理权限的安全组,则需要 Microsoft Entra ID 用户管理员(或同等角色)。
    • 不需要 Azure 全局管理员 ,但应该能够获取用于 Arc 注册的 Microsoft Entra ID 访问令牌(步骤 3 中所述)。
  • OCI 权限:在 Oracle 云基础结构(OCI)控制台中,确保你有权管理多云集成。 Oracle 建议在 OCI 租赁中使用 IAM 策略,例如:

    • 允许任何用户管理租户中的 oracle-db-azure-vaults
    • 其中 request.principal.type = "cloudvmcluster"

此 IAM 策略允许 Exadata VM 群集资源管理 Key Vault 关联。

注释

云管理员可能已设置此设置;否则,必须在将数据库配置为使用 Azure Key Vault 之前由 OCI 管理员添加它。

步骤 1:创建和准备 Azure 的 Key Vault

设置 Azure Key Vault 以保存 Oracle 数据库加密密钥。 如果已有合适的 Key Vault 和密钥,则可以使用它,但请确保它专用或适当保护,以便实现此目的。

  1. 创建 Azure Key Vault:可以使用 Microsoft Azure 门户或 Azure CLI。

    确保 Key Vault 的区域与部署 Oracle Exadata Database@Azure的区域匹配(出于性能和符合性)。 可以选择标准版本或高级版本(两者均支持集成)。 高级版受 HSM 支持。 如果需要专用 HSM 群集,请使用托管 HSM(在这种情况下,创建命令不同,如上所示,请记住,强烈建议使用 ManPrivate 终结点进行安全访问和增强的访问控制)。

  2. 在保管库中创建密钥:Oracle TDE 要求保管库中存在加密密钥(主加密密钥)。 现在至少创建一个密钥。 Oracle 为此支持 RSA 密钥(2048 位是典型的):

    或者,如果有特定的要求(BYOK),则可以导入密钥,但在大多数情况下,在 Azure 中生成新的 RSA 密钥非常简单。 确保密钥已启用并记下密钥名称。 (Oracle 稍后在链接数据库时按其 Azure 名称引用此密钥。

    为什么现在创建密钥? 在保管库注册期间,Oracle 控制平面检查保管库中是否存在至少一个密钥。 如果未找到,保管库注册将失败。 提前创建密钥可避免此问题。

  3. (对于托管 HSM):如果选择了托管 HSM,预配后,必须激活 HSM(如果尚未激活)并在其中创建密钥: az keyvault key create --hsm-name <HSM_Name> -n $KEY_NAME ...

    请注意,托管 HSM 使用不同的权限模型(本地 HSM 角色)。 我们将在下一步中介绍角色分配。

    此时,已准备好一个 Azure Key Vault(或 HSM),其中包含用于 Oracle TDE 的主密钥。 下一步是设置权限,以便 Oracle Exadata VM 群集可以安全地访问此保管库和密钥。

步骤 2:为 Key Vault 访问配置Microsoft Entra ID 权限

允许 Oracle Exadata VM 群集(特别是其 VM 的 Azure Arc 标识)访问 Key Vault 并执行密钥操作(例如解密密钥、创建新的密钥版本用于轮换等),而不会过度赋予权限。 这可以通过Microsoft Entra ID Role-Based 访问控制(RBAC)来实现。 一般方法如下所示:

  • 在 Microsoft Entra ID 中创建安全组。
  • 启用 Oracle VM 群集(下一步)后,将计算机的托管标识添加到此组。
  • 将 Key Vault 角色分配给用户组。

这样,如果有多个数据库 VM 或群集,可以通过组成员身份和角色管理其访问权限。

  1. 创建Microsoft Entra ID 安全组 (可选,建议):

    • 可以通过 Azure 门户(Microsoft Entra ID 边栏选项卡 >“组”>“新建组”)或 CLI 来创建一个组:

    记下 $GROUP_OBJECT_ID。 此组目前仍为空。 在设置 Arc 连接器后,在 [步骤 3](#Step 3:设置 Oracle 标识连接器)中添加成员;访问 Arc 连接器所需的标识是在该过程中创建的。

  2. 分配 Azure Key Vault 角色:我们将两个角色分配给 Key Vault 的安全主体(在本例中为组):

    • Key Vault 加密官 – 允许管理密钥(创建、删除、列出密钥版本)以及加密作的性能(解包/解密等)。
    • Key Vault 读取器 – 允许查看 Key Vault 属性
  3. 使用 Azure CLI 在 Key Vault 范围内分配这些角色:

注释

如果想要使用 Key Vault 访问策略而不是 RBAC,请使用 az keyvault set-policy 来允许 Entra ID 主体执行“nwrap key”和“et key”操作。 但是,RBAC 方法是现代方法,与 Oracle 文档中的角色保持一致。

  1. 对于托管 HSM:
    • Azure RBAC 使用不同的角色集。 根据 Oracle 的指导,对于托管 HSM,应为 HSM 资源分配 Azure RBAC 读者角色。 然后,使用 HSM 本地 RBAC 将“托管 HSM 加密主管”和“托管 HSM 加密用户”分配给主体。 这可以在 Azure 门户的托管 HSM 访问控制页中完成。 安全组也可以用作这些任务的分配。 确保主体已至少添加为 HSM 加密主管。 Crypto Officer 可以生成用于轮换的新密钥版本,Crypto User 可以使用密钥。

步骤 3:设置 Oracle 标识连接器

设置 Oracle 标识连接器。 这会自动配置 Azure Arc 代理,以允许使用 Azure 标识与 Azure 服务(Key Vault)通信。

通过 OCI 控制台创建标识连接器时,群集中的每个 VM 在 Azure 订阅中注册为已启用 Azure Arc 的服务器。 使用此方法可在 Microsoft Entra ID 中为虚拟机授予一个身份(托管身份),从而用于 Key Vault 访问。

下面介绍如何创建连接器:

  1. 获取 Azure 访问令牌:OCI 控制台要求 Azure 访问令牌来授权 Arc 安装。 应使用有权在指定的订阅/资源组中注册 Azure Arc 计算机的 Azure 帐户获取此令牌。 通常,资源组中的所有者或贡献者足以满足需求。

    使用 Azure CLI(以适当的用户身份登录):

    保存AZURE_TOKEN输出(它是一个长 JSON Web 令牌字符串)。 请同时注意 Azure 租户 ID (GUID)- OCI 控制台需要此信息。 订阅 ID 会根据 Exadata VM 集群信息自动检测,但请务必留意以备不时之需。

    安全提示:访问令牌敏感且有效期有限。 将其视为密码。 它仅用于建立连接一次。

  2. 在 OCI 控制台中创建标识连接器:

    • 登录到 Oracle Database@Azure的 OCI 控制台。 访问你的 Exadata VM 群集资源。 (菜单:Oracle Database > 专用基础结构上的 Oracle Exadata Database Service > Exadata VM 群集 >,单击你的群集名称。)

    • 在 VM 群集详细信息页上,找到“多云信息”部分。 应会看到“标识连接器”字段,如果尚未设置,则可能会显示“无”。

      选择“创建”或“设置连接器”。 这会显示一个窗体。

    显示标识连接器创建选项位置的屏幕截图。

    • 会自动填充连接器名称、Exadata VM 群集、Azure 订阅 ID 和 Azure 资源组名称字段。 这些信息来自 Exadata 部署时,Oracle 知道您使用的 Azure 订阅和资源组。
    • 输入 Azure 租户 ID。 从上面的 TENANT_ID 值复制。
    • 输入访问令牌,这是你获得的AZURE_TOKEN字符串。

    显示在何处查找标识连接器信息的屏幕截图。

    • 如果打算使用 Arc 的专用连接,在“高级选项”下:

      • 输入在为 Arc 设置专用链接时从 Azure 门户创建的 Azure Arc 专用链接范围名称。例如, Microsoft.HybridCompute/privateLinkScopes 类型的资源名称。
      • 请确保根据 Microsoft 的文档设置所需的专用链接的 DNS 或网络。如果使用的是更简单的 NAT 方法,则可以将此留空。

      显示在何处查找标识连接器信息的高级选项的屏幕截图。

    • 单击“创建”以创建标识连接器。

    Oracle 平台使用令牌注册 Arc 代理:

    • 它会在群集中的每个数据库 VM 上安装 Azure Arc 代理。
    • VM 在 Azure Arc 中注册。在 Azure 门户中,您应很快看到两个新的 Azure Arc 资源,这些资源位于指定的资源组下的 Azure Arc > 服务器中(如果是 RAC 中的两个 DB 节点)。 每个都有一个类似于 VM 名称的名称。
    • Oracle 控制台显示标识连接器状态。 导航至数据库多云集成>身份连接器以确认连接器是否存在。 在“VM 群集”页上,“标识连接器”字段现在应显示连接器名称,而不是“无”。

    故障排除提示

    如果创建连接器失败,请仔细检查令牌(令牌可能已过期 - 生成一个新的令牌)和租户 ID。 此外,请验证显示的 Azure 订阅 ID 和资源组是否正确。 生成令牌的用户必须有权创建 Arc 资源。 Azure 会自动为 Arc 代理创建服务主体。 请确保订阅中注册了 Azure 资源提供程序 Microsoft.HybridCompute。

  3. 将 Arc Machine Identities 添加到 Microsoft Entra ID 组:连接器启动后,Exadata VM 现在每个 VM 在 Microsoft Entra ID 中都有托管标识。 我们需要向这些标识授予 Key Vault 访问权限(在 [步骤 2] 中设置)(步骤 2:为 Key Vault 访问配置 Microsoft Entra ID 权限)。 如果使用了安全组:

    • 查找新 Arc 服务器标识的对象 ID。 在 Azure 门户中,转到 Microsoft Entra ID 边栏选项卡 >“实体”>“企业应用程序”或 Azure Arc 资源 - 主体对象 ID 可能已列出。 更简单的方法:使用 Azure CLI 列出已连接的 Azure Arc 计算机并获取其主体 ID:

    每台 Arc 计算机都有一个具有 principalId 的身份标识。 另一方面:

    对于系统分配的标识,你应该会看到带有 principalId(对象 ID)的 JSON。

    • 将每个 Arc 计算机的 principalId 添加为在步骤 2 中创建的 Microsoft Entra ID 组的成员。 可以在 Microsoft Entra ID 门户(组 > 成员 > 添加)或 CLI 中执行此操作。

    如果没有使用组,可转而使用 az role assignment create 将 Key Vault 角色直接分配给 VM 托管标识的每个 principalId(类似上文),但指定 assignee-principal-type 为 ServicePrincipal 并指定 principalId。 使用组来管理多个节点更加简洁。

    此时,Oracle VM 群集已启用 Arc,其 Azure 标识现在通过组成员身份或直接分配对 Key Vault 具有权限。 “管道”已到位:数据库 VM 可以通过 NAT 或专用链接访问 Azure Key Vault 服务终结点,并且具有 Azure 识别和授权进行密钥访问的凭据(托管标识)。

步骤 4:在 VM 群集上启用 Azure Key Vault 密钥管理

在 Exadata VM 群集级别激活 Key Vault 集成。 这会在群集 VM 上安装所需的 Oracle 库/插件,使数据库能够将 Azure Key Vault 用作密钥存储。

在 OCI 控制台中:

  • 转到创建连接器的 Exadata VM 群集详细信息页。
  • 在“多云信息”部分中,找到 Azure 密钥存储或 Azure 密钥管理状态。 它当前应显示“已禁用”。
  • 选择 Azure 密钥存储旁边的“启用”。
  • 确认在出现的对话框中执行的操作(选择“启用”)。

显示在 OCI 控制台中启用 Azure 密钥管理的位置的屏幕截图。

此作会触发在群集 VM 上安装 Oracle 软件库。 这很可能是 Oracle 的 TDE 钱包软件的扩展,它知道如何与 Azure Key Vault 进行交互。 只需一两分钟。 完成后,OCI 控制台会显示 Azure 密钥存储:在 VM 群集上启用。

现在,群集配置为支持 Azure Key Vault。 重要的是:

  • 此设置是群集范围的,但它不会自动切换任何数据库以使用 AKV。 它使该选项可用。 此群集上的数据库可以并行使用传统的 Oracle 电子钱包或 Azure Key Vault。 例如,可以启用 AKV,然后一次迁移一个数据库。
  • 如果出于某种原因需要禁用它,可以单击“禁用”,这会卸载库。 但是,如果数据库主动使用 AKV,请不要禁用,因为它们将失去对其密钥的访问权限,因此必须重新启用这些密钥才能使其再次正常运行。

在此阶段,你已完成核心设置:Azure 端已就绪,Oracle 端(群集)已准备就绪。 其余步骤涉及将实际的 Oracle 数据库连接到 Key Vault 密钥。

步骤 5:在 OCI 中注册 Azure Key Vault(根据需要可选)

目标:告知 Oracle 系统您的 Azure Key Vault 的存在,并为使用它做好准备。 在许多情况下,在创建或切换数据库的密钥存储时会自动执行此作,但了解如何显式执行此作非常有用,尤其是在计划跨多个群集使用相同的保管库时。

Oracle 允许在 OCI 控制台中注册 Azure Key Vault:

  • 导航到数据库多云集成>Microsoft Azure 集成

  • 单击 Azure Key Vault

显示在 OCI 控制台中注册 Azure 密钥保管库的位置的屏幕截图。

  • 单击“注册 Azure 密钥保管库”。 在对话框中:
    • 选择隔离舱,即 Exadata VM 群集所在的隔离舱。
    • 选择要用于识别的标识连接器。 选择在步骤 3 中创建的连接器。
    • 单击“发现”。 系统使用 Arc 连接器来查询 Azure,并且应该列出该连接器能够访问的订阅/资源组中的所有 Key Vault。 应该会显示步骤 1 中创建的保管库,以名称标识。
    • 从列表中选择存储库,然后点击“注册”。

注册后:

  • 该保管库在 OCI 中列出,其状态可能为“可用”,并包含详细信息,比如类型(如 AKV、托管 HSM 或 Azure 资源组)。
  • 在此保管库与用于发现的标识连接器之间,会自动创建默认关联。 可通过单击保管库名称,并勾选“标识连接器关联”选项卡来查看此内容。
  • 如果您有多个不同连接器的 Exadata VM 群集需要使用相同的 Key Vault,那么您必须手动创建更多关联:点击“创建关联”,并将此保管库链接到另一个标识连接器。 此方案属于高级配置(例如,不同区域中的主群集和备用群集都使用一个集中式保管库 - 确保网络连接合适)。

现在,Oracle OCI 已经了解了 Azure Key Vault,并将其与集群的连接器关联起来,这表明数据库可以无障碍地使用它。

步骤 6:将 Oracle 数据库配置为使用 Azure Key Vault

最后,需要在 Exadata VM 群集上配置一个或多个 Oracle 数据库,以便将 Azure Key Vault 用于 TDE 密钥存储。 可以在为新数据库创建数据库期间执行此作,也可以通过将现有数据库从使用 Oracle 钱包迁移到 Azure Key Vault 来执行此作。

方案 A:使用 Azure Key Vault 创建新数据库

通过 OCI 控制台在 Exadata VM 群集上预配新的 Oracle 数据库时:

  • 启动“创建数据库”向导。 这假设群集上至少有一个数据库主目录用于存放数据库。
  • 你将在窗体中看到密钥管理或加密的选项。 从下拉列表中选择 Azure Key Vault,而不是 Oracle 管理的电子钱包。
  • 然后选择保管库和密钥:
    • 选择注册保管库的隔离舱。
    • 选择保管库名称。
    • 选择密钥。 在步骤 1 中创建的密钥应按名称显示。
  • 使用其他数据库创建参数(DB 名称、PDB 名称、字符集等)继续操作,然后提交。

预配过程从 Azure Key Vault 提取所选密钥,并使用该密钥为新数据库设置 TDE。 数据库创建完成后,可以转到 OCI 中的“数据库详细信息”页,并滚动到“加密”部分。 它应显示密钥管理:Azure Key Vault,并显示密钥名称或其 Azure 标识符以及密钥的 OCI 内部标识符。 这确认新数据库的 TDE 主加密密钥存储在 Azure Key Vault 中,而不是存储在本地钱包中。

方案 B:将现有数据库迁移到 Azure Key Vault

对于在当前使用默认 Oracle Wallet 作为 TDE 密钥的 VM 群集上运行的 Oracle 数据库,您可以将其切换为使用 Azure Key Vault。

使用 OCI 控制台:

  • 导航到 VM 群集数据库列表下的特定数据库资源页。
  • 在“数据库信息”选项卡上,找到“加密/密钥管理”部分。 它应该表明,它当前正在使用 Oracle 电子钱包(如果尚未更改)。
  • 单击“密钥管理”字段旁边的“更改”链接。

显示在 OCI 控制台中更改密钥管理的位置的屏幕截图。

  • 此时会显示一个对话框或窗体,用于更改密钥管理。 提供:
    • 新建密钥管理:选择 Azure Key Vault
    • 保管库隔离舱,然后选择保管库。
    • 密钥隔离舱(可能与保管库的相同),然后从下拉列表中选择密钥。
  • 单击“保存更改”或“确定”以确认。

Oracle 执行密钥迁移:

  • 它将所选的 Azure Key Vault 密钥与数据库相关联。
  • 在后台,数据库使用 Arc 连接器和设置的权限检索 Azure 密钥,并重新加密其 TDE 钱包。 本质上,它采用当前 TDE 主密钥,该密钥位于钱包中,并安全地将其传输到 Azure Key Vault。 或者,如果选择了全新的密钥,则会将该密钥设置为新的主密钥,并使用该密钥重新加密数据加密密钥。
  • 此作通常需要几秒钟时间。 它不需要关闭数据库。 TDE 主密钥操作可以联机完成。 但是,在切换期间,新的加密/解密作业可能会短暂暂停。

完成后,刷新“数据库”页并验证密钥管理现在是否显示 Azure Key Vault,并将密钥名称/OCID 与新创建的数据库一样列出。

重要

不支持通过 OCI 控制台或 API 从 Azure Key Vault 切换回 Oracle 电子钱包。 Oracle 将移动到外部 KMS 视为单向,但从技术上而言,可以根据需要手动导出密钥并重新导入到钱包。 控制台明确不允许从 AKV 更改回本地钱包。

可插入数据库(PDB):如果 CDB 包含启用了 TDE 的多个 PDB,则默认使用 CDB 的主密钥。 在 Oracle 19c 中,每个 CDB 都有一个 TDE 主密钥。 从 Oracle 21c 开始,支持每个 PDB 单独的密钥。 但是,通常只需在 CDB 级别执行密钥管理,因为所有 PDB 都继承了该设置。

如果碰巧对单个 PDB 使用单独的密钥,则需要为每个 PDB 资源重复密钥管理过程。 Oracle 的接口列出了每个 PDB 密钥(如果适用)。

现在,Oracle 数据库将使用 Azure Key Vault 中的密钥执行所有加密作。 接下来,让我们验证一切是否正常工作。

步骤 7:验证集成和安全性

将数据库配置为使用 Azure Key Vault 时,验证一切是否正常运行且安全至关重要:

  • 数据库状态:连接到 Oracle 数据库,并确保可以读取和写入加密的数据。 通常,如果 TDE 配置正确,则对用户而言是透明的。 但是,如果数据库无法访问密钥,则尝试打开数据库时会出现错误,例如 ORA-28374、“未找到主密钥保护”或类似项。 假设遵循了上述步骤,数据库应使用 AKV 密钥无缝打开。

  • OCI 控制台确认:在 OCI 的数据库详细信息页上,确认它显示“Azure Key Vault”为密钥存储,并列出密钥名称/OCID。 这表示 Oracle 的控制平面知道数据库与该外部键相关联。

  • Azure Key Vault 监视:在 Azure 中,导航到你的 Key Vault:

    • 在“密钥”下,应会看到该密钥。 例如,OracleTDEMasterKey。 简单关联可能无法看到明显更改,但你可以检查 Key Vault 日志。 如果尚未启用,请启用 Azure Key Vault 的诊断日志记录,并检查与数据库打开或设置密钥时对应的“获取密钥”或“解密/解包密钥”事件。 这确认 Oracle 数据库在 Azure 中访问了密钥。 Azure 的日志记录显示访问密钥的主体 - 它应该是 Azure Arc 计算机的托管标识,可由 GUID 标识,该标识应与 Arc principalId 匹配。
    • 如果在下一步中执行轮换,则在此列表中会看到新的密钥版本。
  • 请勿删除密钥 – 这值得重申: 永远不要删除数据库正在使用的 Key Vault 密钥。 如果删除 Azure 中的密钥,数据库会立即失去解密其数据的能力,实质上是将数据库砖块化。 在 OCI 控制台中,如果查看密钥信息,Oracle 实际上会显示警告。 如果必须停止使用密钥,正确的过程是在删除旧密钥之前将数据库迁移到新密钥(轮换它)。 Azure Key Vault 支持密钥版本控制。 旧版本可以保持禁用状态,而不是删除,直到不再需要。

  • 测试故障转移/重启:如果这是生产设置,请模拟数据库重启,确保它可在启动时检索密钥。 关闭再启动 Oracle Database(如果需要,请重新启动 VM 群集 - 但在 RAC 中,需逐个节点重启)。 数据库应在无需手动干预的情况下启动,从 AKV 中拉取密钥。 如果能顺利启动,表示集成是可靠的。 如果它无法自动打开钱包,请重新检查步骤 2(权限)和步骤 3(Arc 连接)。

通过完成这些验证,可以确信 Oracle Exadata Database@Azure-Azure Key Vault 集成正在运行,并且数据仍可访问且安全。

步骤 8:持续管理和最佳做法

在集成到位后,请考虑以下操作事项:

  • 密钥轮换

    根据安全策略定期轮换 TDE 主密钥。 例如,每年或若干天后或在某些事件之后。 始终从 Oracle 端(OCI 控制台或 API)执行旋转,而不是直接在 Azure 中执行。

    • 若要通过 OCI 控制台轮换:请转到“数据库详细信息”页,“加密”部分,然后单击“轮换”。 如果 Key Vault 正在使用,则会在密钥信息旁边显示此项信息。 确认旋转。 这会在 Azure Key Vault 中生成新的密钥版本。 可以在 Azure 中的密钥下验证新版本,并更新数据库以使用新版本。

    显示在 OCI 控制台中的哪里轮换 Azure 密钥保管库的屏幕截图。

    • 通过 OCI API/CLI 轮换:Oracle 为此提供了 API RotateVaultKey。 使用 oci CLI 时,可以通过 oci db 数据库 rotate-vault-key --database-id <OCID> 等命令完成此作(检查 Oracle 的 CLI 文档以获取确切的语法)。 这会触发相同的操作。

    • 不要使用 Azure Key Vault 的密钥轮换策略进行轮换,也不要通过在无 Oracle 参与的情况下在 Azure 中手动创建新版本来进行轮换。 Azure 会创建新版本,但 Oracle 的数据库将不知道并继续尝试使用旧版本,因为这是它作为主密钥标识符存储的内容。 始终从 Oracle 端启动,该端与 Azure 协调。

    保留密钥轮换日志。 Azure 记录新密钥版本的创建,而 Oracle 记录新密钥正在使用。 如果轮换后出现任何问题,可以选择通过 Oracle 回滚到以前的密钥版本。 不过,除非怀疑新密钥遭到入侵,否则这通常不需要。

  • 密钥生命周期管理:管理 Azure 中密钥的生命周期:

    • 保留:不要立即清除旧密钥版本。 Oracle TDE 只能使用最新版本,但可能需要旧版本才能打开旧备份或存档日志。 最好使旧密钥版本处于禁用状态,但在某些时间段内可恢复。
    • 备份:对于 Azure Key Vault(标准/高级),Microsoft管理高可用性和恢复。 对于托管 HSM,你有责任在需要时备份 HSM。 如果适用,请遵循 Azure 的 HSM 备份指南。
    • 职责分离:通常,DBA 处理 Oracle 端,安全管理员处理 Azure Key Vault 端。 使用 Azure Key Vault 访问策略/RBAC 确保数据库管理员只能通过数据库使用密钥,不得篡改密钥;反之,Microsoft Entra ID 管理员无法直接访问数据库数据,他们只负责管理密钥。 定期审核谁有权访问 Key Vault。
  • 灾难恢复(DR)

    如果将 Oracle Data Guard 用于两个 Oracle Exadata Database@Azure VM 群集之间的 DR,请确保 DR 站点配置类似(目前不支持跨区域 Dataguard 方案):

    • 在 DR Exadata VM 群集上执行步骤 1-5。 可以在 DR 区域中使用相同的 Azure Key Vault
    • 如果对主服务器和备用服务器使用相同的密钥保管库,请注册保管库并创建与备用服务器的身份连接器的关联,如前所述。
    • 确保备用数据库也配置为使用 AKV 密钥。 通常,将备用服务器添加到使用 AKV 的主服务器时,Oracle 要求备用群集在创建备用服务器之前启用标识连接器和密钥存储。 因此,设置连接器并在 DR 上启用 Azure 密钥存储,然后设置 Data Guard。 当备用状态启动后,主密钥信息将通过 Data Guard 共享到备用状态,前提是备用服务器可以访问 Key Vault。 Oracle 的文档顺便提到这一点 - 如果主群集或备用群集中的任何一个启用了 AKV,则为了避免任何差距,这两个数据库都必须启用 AKV 来实现 TDE。
    • 测试切换或故障转移,确保备用群集可使用 Key Vault 密钥独立打开。 这是一项关键的灾难恢复(DR)测试。
  • 修补和更新

    Oracle 将处理对 Exadata 基础结构和 Arc 代理的更新作为托管服务的一部分。 关注 Oracle Cloud 公告,了解对 Key Vault 集成功能所做的任何更改。 例如,新的支持区域,或所需角色或支持的密钥类型的更改。 如果 Oracle 发布需要更新操作的更新(例如更新标识连接器或库),请相应地安排此操作。

排查常见问题

  • 注册期间找不到 Key Vault:确保至少创建了一个密钥,并且 Arc 标识具有列表/获取权限。 此外,验证在发现时选择了正确的连接器和隔离舱。

  • 权限被拒绝错误:如果数据库无法检索密钥。 例如,ORA-28417“授权被拒绝”,请检查 Azure 角色分配。 托管标识可能在密钥上使用加密主管或加密用户角色。 修复 RBAC 或访问策略,然后重试。 可能需要重新执行更改密钥管理作业。

  • Arc 连接器问题:如果已启用 Arc 的服务器显示为断开连接,则数据库可能无法访问 Key Vault。 检查 VM 是否可以访问 login.microsoftonline.com 和 Key Vault 终结点。 使用 VM 中的 curl 或类似功能测试连接/DNS。 如果使用专用链接,请验证 DNS 解析是否指向专用终结点的 IP。 在 Oracle VM 上,还可以检查 Arc 代理状态(sudo systemctl status azauremeeting 或类似服务)。

  • 连接器设置期间的令牌过期:步骤 3 中的 Azure 令牌生存期较短。 如果生成时间过早且未及时提交表单,则可能过期。 使用后几分钟内务必更换新令牌。

  • 多个 Key Vault:如果需要将数据库移动到其他 Key Vault(例如,如果要迁移到新保管库,Oracle 当前不支持通过控制台直接从一个外部 KMS 更改为另一个密钥保管库)。 规划体系结构,使一个保管库可长期有效运行,并通过密钥版本处理轮换。

最佳做法

  • 生产工作负荷:对于生产级 Oracle Database@Azure环境,强烈建议使用 AKV Premium 或托管 HSM。 Azure Key Vault 和 Exadata VM 群集应位于同一租户和同一资源组中。 这是一个已知问题,我们正在努力解决此问题。

  • 性能和符合性:根据 FIPS 符合性需求、密钥类型支持和安全隔离要求选择适当的层。

  • 专用链接要求:对于托管 HSM,专用链接集成对于安全访问是必需的。 建议对所有 Azure Key Vault 和 Oracle Database@Azure集成建立专用链接连接。

  • AES 密钥支持:建议 Oracle Database@Azure 客户尽可能使用 AES 密钥。 若要管理使用 AES 格式的 TDE 主密钥 (MEK),必须使用托管 HSM。

  • 监视和审核:启用 Azure 诊断日志,以监视所有层中的密钥访问和使用情况事件。

  • 专用保管库:对每个 Oracle 环境使用专用密钥保管库或专用密钥。 不要对不同的数据库重复使用同一个密钥 - 每个 CDB 都应有自己的 TDE 主密钥。 Oracle 无论如何都会强制执行此政策。 可以在一个保管库中保留多个密钥(每个数据库一个),这是正常的。

最后,请记住,此集成桥接了两个云服务,所以请确保与 Oracle 和 Microsoft 的支持合同均已到位。 对于任何问题,你都能享受到联合支持的优势:两家公司建立了合作关系,以帮助使用这一设置的客户。 可以参考 Oracle 的支持文档和 Azure 文档来排查已知问题。

参考文献