Compartir a través de

为共享访问签名配置过期策略

可以使用共享访问签名 (SAS) 来委托对 Azure 存储帐户中资源的访问权限。 SAS 令牌包括目标资源、授予的权限以及允许的访问间隔。 最佳做法建议你限制 SAS 的间隔,以防 SAS 泄露。 通过为存储帐户设置 SAS 过期策略,可以在用户创建用户委托 SAS、服务 SAS 或帐户 SAS 时提供建议的过期时间上限。

有关共享访问签名的详细信息,请参阅使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限

重要

对于使用共享访问签名的方案,Azure 建议使用用户委托 SAS。 用户委托 SAS 使用 Microsoft Entra 凭据而不是帐户密钥进行保护,从而提供了卓越的安全性。

关于 SAS 过期策略

可以在存储帐户上配置 SAS 过期策略。 SAS 过期策略为用户委托 SAS、服务 SAS 或帐户 SAS 的已签名过期字段指定了建议的上限。 建议将上限指定为一个日期/时间值,它是天数、小时数、分钟数和秒数的组合。

SAS 的有效性间隔是通过将已签名的过期字段的日期/时间值减去已签名的开始字段的日期/时间值来计算的。 如果得出的值小于或等于建议的上限,表明 SAS 符合 SAS 过期策略。

配置 SAS 过期策略后,创建了时间间隔超过建议上限的 SAS 的任何用户将看到一条警告。

SAS 过期策略不会阻止用户创建过期时间超过策略所建议的限制的 SAS。 当用户创建违反策略的 SAS 时,他们会看到警告以及建议的最大间隔。 如果使用 Azure Monitor 为日志记录配置了诊断设置,每当用户使用在建议的间隔后过期的 SAS 时,Azure 存储就会向日志中的 SasExpiryStatus 属性写入一条消息。 此消息指出 SAS 的有效性间隔超出了建议的间隔。

当存储帐户的 SAS 过期策略生效时,每个 SAS 都需要已签名的开始字段。 如果 SAS 上不包含已签名的开始字段,并且你已经使用 Azure Monitor 为日志记录配置了诊断设置,每当用户使用没有已签名的开始字段值的 SAS 时,Azure 存储就会向日志中的 SasExpiryStatus 属性写入一条消息。

配置 SAS 到期策略

针对存储帐户配置 SAS 过期策略时,该策略将应用于每种类型的 SAS:用户委托 SAS、服务 SAS 和帐户 SAS。 服务 SAS 和帐户 SAS 类型是用帐户密钥签名的,而用户委托 SAS 则是用 Microsoft Entra 凭据签名的。

注意

用户委托 SAS 是用用户委托密钥签名的,而该密钥是使用 Microsoft Entra 凭据获取的。 用户委托密钥有自身的过期间隔,不受 SAS 过期策略的约束。 SAS 过期策略仅应用于用户委托 SAS,而不应用于该 SAS 签名的用户委托密钥。

无论 SAS 过期策略如何,用户委托 SAS 的最大过期间隔都是 7 天。 如果 SAS 过期策略设置为大于 7 天的值,则该策略对用户委托 SAS 不起作用。 如果用户委托密钥过期,则使用该密钥签名的任何用户委托 SAS 都会失效,任何使用该 SAS 的尝试都会返回错误。

是否需要先轮换帐户访问密钥?

本部分适用于使用帐户密钥签名的服务 SAS 和帐户 SAS 类型。 在配置 SAS 过期策略之前,可能需要至少轮换一次每个帐户访问密钥。 如果存储帐户的 keyCreationTime 属性有任一帐户访问密钥(key1 和 key2)为 null,将需要进行轮换。 若要确定 keyCreationTime 属性是否为 null,请参阅获取存储帐户的帐户访问密钥的创建时间。 如果尝试配置 SAS 过期策略,并且需要先轮换密钥,则该操作将失败。

如何配置 SAS 过期策略

可以使用 Azure 门户、PowerShell 或 Azure CLI 配置 SAS 过期策略。

若要在 Azure 门户中配置 SAS 过期策略,请执行以下步骤:

  1. 导航到 Azure 门户中的存储帐户。

  2. 在“设置”下,选择“配置”。

  3. 找到“允许对共享访问签名(SAS)过期间隔使用建议的上限”设置,将其设置为“已启用” 。

    注意

    如果设置灰显,并且你看到下图中显示的消息,则需要轮换两个帐户访问密钥,然后才能设置“建议的 SAS 到期间隔上限”值:

    显示配置 SAS 过期策略的选项在 Azure 门户中灰显的屏幕截图。

  4. 在“建议的 SAS 到期间隔上限”下指定在此存储帐户中的资源上创建的任何新共享访问签名的建议间隔的时间值。

    显示如何在 Azure 门户中配置 SAS 过期策略的屏幕截图。

  5. 选择“保存” 以保存更改。

查询日志以获取策略违规信息

若要记录其有效期比 SAS 过期策略建议的间隔更长的 SAS 的使用操作,请先创建一个诊断设置,用于将日志发送到 Azure Log Analytics 工作区。 有关详细信息,请参阅将日志发送到 Azure Log Analytics

接下来,使用 Azure Monitor 日志查询来监视是否违反了策略。 在 Log Analytics 工作区中创建新查询,添加以下查询文本,然后按“运行”。

StorageBlobLogs 
| where SasExpiryStatus startswith "Policy violated"
| summarize count() by AccountName, SasExpiryStatus

使用内置策略监视合规性

可以使用 Azure Policy 监视存储帐户,确保订阅中的存储帐户已配置 SAS 过期策略。 Azure 存储提供了一个内置策略,用于确保帐户已配置此设置。 有关内置策略的详细信息,请参阅内置策略定义列表中的“应为存储帐户配置共享访问签名(SAS)策略”。

为资源范围分配内置策略

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

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

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

  3. 选择“分配策略”。

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

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

    显示如何选择内置策略以监视存储帐户共享访问签名的有效期间隔的屏幕截图

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

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

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

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

  1. 在 Azure Policy 仪表板上,找到在策略分配中指定的范围内的内置策略定义。 可以在“搜索”框中搜索 Storage accounts should have shared access signature (SAS) policies configured,筛选内置策略。

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

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

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

若要使某个存储帐户合规,请根据创建 SAS 过期策略中所述,为该帐户配置 SAS 过期策略。

另请参阅