【问题标题】:What makes Azure Key Vault is secure than Azure SQL DB? [closed]是什么让 Azure Key Vault 比 Azure SQL DB 更安全? [关闭]
【发布时间】:2021-08-05 22:39:41
【问题描述】:

是什么让 Azure Key Vault 比 Azure SQL DB 更安全? AZ SQL 提供传输安全性。

我正在探索 Azure 服务来存储和检索敏感数据。 Azure Key Vault,营销名称告诉我 AKV 是正确的选择。

所有数据当前都驻留在 AZ SQL DB 中。 AKV 确实带来了另一个额外的 AZ 服务难题,需要在代码中进行管理。

与 AZ SQL DB 相比,Azure Key Vault 真的安全吗?

【问题讨论】:

  • 如果您不使用 SQL 身份验证而仅使用 AAD 身份验证,则不需要 AKV。你的实际用例是什么?对于仍然不支持 AAD 身份验证的服务,KeyVault 只是一个烦人的解决方法。
  • KeyVault is just an annoying workaround for services that still don't support AAD authentication. - 恕我直言,Key Vault 不仅仅是存储连接字符串。
  • @Nick.McDermaid 我正在使用 SQL 身份验证,因为我的 SF 应用程序还没有达到使用 AAD 的地步。是什么让 AKV 成为使用 SQL 身份验证时的选择?我必须存储敏感的纯文本。我必须在 AKV 或 SQL Server 之间进行选择。即使我觉得在我的应用程序中注入另一个依赖项也很烦人。我想有实际的理由和证据来使用 AKV。理想情况下,我想继续使用 AZ SQL DB。
  • @Datha 这取决于您要实现的目标。 SQL 支持敏感数据的数据屏蔽。密钥库更多是您想要存储 sql 用户名/密码、加密密钥等的地方。
  • AKV 可以很好地与其他 Azure 服务(例如 DataFactory)配合使用,您不希望您的秘密在您的数据库中的表中,对吗?另一个抽象层次,虽然烦人可以增加额外的安全性。

标签: azure azure-sql-database azure-keyvault


【解决方案1】:

从安全角度来看,您可以精细控制谁有权使用您的机密。例如,您可以为某些用户授予“设置”权限,但只授予使用该密钥的应用程序的“获取”权限。此外,在高级层中,Azure Key Vault 可以使用硬件安全模块 (HSM) 保护密钥,这在敏感环境中可能是必需的。

从实践的角度来看,在我看来,Azure Key Vault 对开发人员来说最有趣的方面是它意味着在开发过程中不再需要将机密存储在环境变量(或类似的变量)中,而是可以集中保存在Key Vault - 代码无需修改即可部署到云环境。

举个例子:假设您与同事一起开发一个 Python 应用程序,该应用程序需要通过需要密码的第三方服务进行身份验证。您可以将该密码存储在 Azure SQL 中,但要访问 Azure SQL,您再次需要凭据。您如何与您的同事分享这些凭据?将其签入源代码管理不是一个好习惯,您可以通过其他渠道共享它,并且你们都将它存储在本地环境变量中,但如果此密码更改或您加入新人,麻烦又开始了。通过使用 Azure Key Vault,您可以像这样检索密码:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
    
credentials = DefaultAzureCredential()
client = SecretClient("https://yourkeyvault.vault.azure.net/", credentials)
third_party_password = client.get_secret("third-party-password").value

DefaultAzureCredential() 将自动检查多个位置以获取可用于从 Key Vault 获取机密的凭据。

“环境”是指,如果你已经创建了一个App注册并且设置了以下环境变量

AZURE_USERNAME
AZURE_PASSWORD
AZURE_TENANT_ID

DefaultAzureCredential() 将使用它们登录(当然在 Key Vault 中必须设置相应的访问策略,以便用户可以读取机密)。

如果未找到环境变量,DefaultAzureCredential() 会在下一步检查应用程序是否在托管标识可用的 (Azure) 环境中运行。换句话说,如果您使用 Azure App Service with Managed Identitiy turned on 并且此托管标识对您的 Key Vault 具有秘密“获取”权限,DefaultAzureCredential() 将使用这些权限。

如果您在本地开发并且不想设置环境变量,也可以简单地使用az login 登录 Azure,这将在本地存储访问令牌。 DefaultAzureCredential() 可以使用该令牌登录 Key Vault 并检索机密。在这种情况下,访问 Azure Key Vault 的密码和凭据都不必存储在本地某处。

【讨论】:

    【解决方案2】:

    我重读了您的问题,听起来您在问是将机密存储在数据库中还是在密钥库中?您可以通过 KV 获得一系列开箱即用的功能,而这些功能是自定义数据库加密和存储解决方案所没有的,至少它是云就绪并支持许多 API

    我同意这会增加解决方案的复杂性,但根据您需要的功能,它可能比在数据库中创建自己的服务更简单、更安全。

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 1970-01-01
      • 2016-01-21
      • 2016-11-24
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2019-12-01
      • 2019-06-09
      相关资源
      最近更新 更多