管理存储帐户访问密钥

当你创建存储帐户时,Azure 会为该帐户生成两个 512 位存储帐户访问密钥。 这些密钥可用于通过共享密钥授权或通过使用共享密钥签名的 SAS 令牌来授权访问存储帐户中的数据。

Azure 建议使用 Azure 密钥保管库来管理访问密钥,并且定期轮换和重新生成密钥。 使用 Azure 密钥保管库可以轻松轮换密钥,而无需中断应用程序。 还可以手动轮换密钥。

重要

为了获得最佳安全性,Azure 建议尽可能使用具有托管标识的 Microsoft Entra ID 来授权针对 Blob、队列和表数据的请求。 与共享密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 要详细了解托管标识,请参阅什么是 Azure 资源托管标识。 有关如何为 .NET 应用程序启用和使用托管标识的示例,请参阅使用 .NET 对 Azure 资源的 Azure 托管应用进行身份验证

对于 Azure 外部托管的资源(例如本地应用程序),可以通过 Azure Arc 使用托管标识。例如,在已启用 Azure Arc 的服务器上运行的应用可以使用托管标识连接到 Azure 服务。 若要了解详细信息,请参阅使用已启用 Azure Arc 的服务器对 Azure 资源进行身份验证

对于使用共享访问签名 (SAS) 的方案,Azure 建议使用用户委托 SAS。 用户委派 SAS 通过 Microsoft Entra 凭据(而不是帐户密钥)进行保护。 若要了解共享访问签名,请参阅使用共享访问签名授予有限的数据访问权限。 有关如何通过 .NET 创建和使用用户委派 SAS 的示例,请参阅使用 .NET 为 blob 创建用户委派 SAS

保护访问密钥

存储帐户访问密钥提供对存储帐户数据的完全访问权限,以及生成 SAS 令牌的权限。 始终要小心保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥。 对共享密钥的访问权限授予用户对存储帐户数据的完全访问权限。 应仔细限制和监视对共享密钥的访问。 在无法使用基于 Microsoft Entra ID 的授权的情况下,使用具有有限访问权限的用户委派 SAS 令牌。 避免对访问密钥进行硬编码,或将其以纯文本形式保存在其他人可以访问的任何位置。 如果认为访问密钥可能已被盗用,请轮换密钥。

重要

若要防止用户使用共享密钥访问存储帐户中的数据,可以对存储帐户禁用共享密钥授权。 作为安全最佳做法,建议将对数据的精细访问限制为具有所选的最小特权。 应将使用托管标识的基于 Microsoft Entra ID 的授权用于支持 OAuth 的场景。 应使用 Kerberos 或 SMTP 通过 SMB 用于 Azure 文件存储。 对于通过 REST 进行的 Azure 文件存储,可以使用 SAS 令牌。 如果不需要共享密钥访问权限以防止意外使用,则应禁用共享密钥访问。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权

若要使用 Microsoft Entra 条件访问策略保护 Azure 存储帐户,必须禁止对存储帐户进行共享密钥授权。

如果你已禁用共享密钥访问,并且诊断日志中报告了共享密钥授权,则表示正在使用受信任的访问来访问存储。 有关更多详细信息,请参阅对 Microsoft Entra 租户中注册的资源的受信任访问

查看帐户访问密钥

可以使用 Azure 门户、PowerShell 或 Azure CLI 查看和复制帐户访问密钥。 Azure 门户还为你的存储帐户提供了一个可供复制的连接字符串。

若要从 Azure 门户查看和复制存储帐户访问密钥或连接字符串,请执行以下操作:

  1. Azure 门户中转到自己的存储帐户。

  2. 在“安全性 + 网络”下,选择“访问密钥” 。 此时会显示帐户访问密钥,以及每个密钥的完整连接字符串。

  3. 选择“显示密钥”,即可显示访问密钥和连接字符串,以及允许按钮复制值。

  4. 在“key1”下找到“密钥”的值。 选择“复制”按钮以复制帐户密钥。

  5. 或者,可以复制整个连接字符串。 在“key1”下,找到“连接字符串”值。 选择“复制”按钮以复制“连接字符串”。

    显示如何在 Azure 门户中查看访问密钥的屏幕截图

可以使用这两个密钥中的任何一个来访问 Azure 存储,但通常情况下,最好使用第一个密钥,并保留第二个密钥在轮换密钥时使用。

若要查看或读取帐户的访问密钥,用户必须是服务管理员,或者分配到包含“Microsoft.Storage/storageAccounts/listkeys/action”的 Azure 角色。 包含此操作的 Azure 内置角色有“所有者”、“贡献者”和“存储帐户密钥操作员服务角色”等 。 有关服务管理员角色的详细信息,请参阅 Azure 角色、Microsoft Entra 角色和经典订阅管理员角色。 若要详细了解 Azure 存储的内置角色,请参阅 Azure RBAC 的 Azure 内置角色中的“存储”部分。

使用 Azure 密钥保管库管理访问密钥

Azure 建议使用 Azure 密钥保管库来管理和轮换访问密钥。 应用程序可以安全地访问密钥保管库中的密钥,这样就可以避免使用应用程序代码来存储密钥。 有关使用密钥保管库进行密钥管理的详细信息,请参阅以下文章:

手动轮换访问密钥

Azure 建议定期轮换访问密钥,以帮助保护存储帐户的安全。 如果可能,请使用 Azure 密钥保管库管理访问密钥。 如果不使用密钥保管库,将需要手动轮换密钥。

系统会分配两个访问密钥,以便可以轮换密钥。 拥有两个密钥可确保应用程序在整个轮换过程中能够持续访问 Azure 存储。

警告

重新生成访问密钥可能会影响依赖于存储帐户密钥的所有应用程序或 Azure 服务。 使用帐户密钥访问存储帐户的任何客户端必须更新为使用新密钥,其中包括媒体服务、云、桌面和移动应用程序,以及适用于 Azure 存储的图形用户界面应用程序,例如 Azure存储资源管理器

此外,轮换或重新生成访问密钥会撤销基于该密钥生成的共享访问签名 (SAS)。 轮换访问密钥后,必须重新生成帐户服务 SAS 令牌,以避免应用程序发生中断。 请注意,用户委派 SAS 令牌受 Microsoft Entra 凭据的保护,并且不受密钥轮换的影响。

如果计划手动轮换访问密钥,Azure 建议设置密钥过期策略。 有关详细信息,请参阅创建密钥过期策略

创建密钥过期策略后,可以使用 Azure Policy 监视存储帐户的密钥是否已在建议的时间间隔内轮换。 有关详细信息,请参阅检查是否存在密钥过期策略冲突

在 Azure 门户中轮换存储帐户访问密钥:

  1. 更新应用程序代码中的连接字符串以引用存储帐户的辅助访问密钥。
  2. Azure 门户中导航到存储帐户。
  3. 在“安全性 + 网络”下,选择“访问密钥” 。
  4. 若要为存储帐户重新生成主访问密钥,请选择主访问密钥旁边的“重新生成”按钮。
  5. 更新代码中的连接字符串以引用新的主访问密钥。
  6. 以相同方式重新生成辅助访问密钥。

注意

Azure 建议同一时间在所有应用程序中只使用一个密钥。 如果在某些地方使用密钥 1 并在其他地方使用密钥 2,则无法在没有部分应用程序失去访问的情况下轮转密钥。

若要轮换帐户的访问密钥,用户必须是服务管理员,或者分配到包含“Microsoft.Storage/storageAccounts/regeneratekey/action”的 Azure 角色。 包含此操作的 Azure 内置角色有“所有者”、“贡献者”和“存储帐户密钥操作员服务角色”等 。 有关服务管理员角色的详细信息,请参阅 Azure 角色、Microsoft Entra 角色和经典订阅管理员角色。 若要详细了解 Azure 存储的 Azure 内置角色,请参阅 Azure RBAC 的 Azure 内置角色中的“存储”部分。

创建密钥过期策略

密钥过期策略使你能够设置帐户访问密钥轮换提醒。 如果已超过指定的时间间隔,但尚未轮换密钥,则会显示提醒。 创建密钥过期策略后,可以监视存储帐户的合规性,以确保定期轮换帐户访问密钥。

注意

你可能需要至少轮换一次帐户访问密钥,然后才能创建密钥过期策略。

通过以下步骤在 Azure 门户中创建密钥过期策略:

  1. Azure 门户中转到自己的存储帐户。
  2. 在“安全性 + 网络”下,选择“访问密钥” 。 此时会显示帐户访问密钥,以及每个密钥的完整连接字符串。
  3. 选择“设置轮换提醒”按钮。 如果“设置轮换提醒”按钮灰显,则需要轮换每个密钥。 按照手动轮换访问密钥中所述的步骤轮换密钥。
  4. 在“设置提醒以轮换访问密钥”中,选择“启用密钥轮换提醒”复选框,并设置提醒的频率。
  5. 选择“保存”。

屏幕截图:显示如何在 Azure 门户中创建密钥过期策略

检查是否存在密钥过期策略冲突

可以使用 Azure Policy 监视存储帐户,以确保帐户访问密钥已在建议时段内轮换。 Azure 存储提供了一种内置策略,用于确保存储帐户访问密钥不会过期。 有关内置策略的详细信息,请参阅内置策略定义列表中的“存储帐户密钥不应过期”。

为资源范围分配内置策略

按照以下步骤在 Azure 门户将内置策略分配到适当的范围:

  1. 在 Azure 门户中,搜索 Policy 以显示 Azure Policy 仪表板。

  2. 在“创作”部分,选择“分配” 。

  3. 选择“分配策略”。

  4. 在“分配策略”页的“基本信息”选项卡上,在“范围”部分指定策略分配的范围 。 选择“更多”按钮以选择订阅和可选资源组。

  5. 对于“策略定义”字段,选择“更多”按钮,然后在“搜索”字段输入“存储帐户密钥” 。 选择名为“存储帐户密钥不应过期”的策略定义。

    屏幕截图显示了如何选择内置策略以监视存储帐户的密钥轮换间隔

  6. 选择“查看 + 创建”以将策略定义分配到指定范围。

    显示如何创建策略分配的屏幕截图

监视密钥过期策略的合规性

若要监视存储帐户是否符合密钥过期策略,请执行以下步骤:

  1. 在 Azure Policy 仪表板上,找到在策略分配中指定的范围内的内置策略定义。 可以在“搜索”框中搜索“存储帐户密钥不应过期”,筛选内置策略。

  2. 选择具有所需范围的策略名称。

  3. 在内置策略的“策略分配”页上,选择“查看合规性” 。 指定的订阅和资源组中不符合策略要求的任何存储帐户都将显示在合规性报告中。

    显示如何查看密钥过期内置策略的合规性报告的屏幕截图

若要使存储帐户合规,请轮换帐户访问密钥。

后续步骤