azure - 保护 Azure 函数的安全

标签 azure azure-active-directory azure-functions

我正在尝试将最小权限原则应用于 Azure 函数。我想要的是使 FunctionApp 仅具有对存储队列等的读取访问权限。到目前为止我尝试过的是:

  • 在 FunctionApp 中启用托管身份
  • 创建一个仅允许对队列进行读取访问的角色(角色定义如下)
  • 转到存储队列 IAM 权限,然后使用新角色和 Function App 添加新角色分配。

但是没有成功。如果我尝试从我的函数(使用输出绑定(bind))写入该队列,则当我预计会失败时,该项目就会被写入。我尝试使用内置角色“存储队列数据读取器(预览)”,但结果相同。

添加/删除 Function App 权限的正确方法是什么?

角色定义:

{
  "Name": "Reader WorkingSA TestQueue Queue",
  "IsCustom": true,
  "Description": "Read TestQueue queue on WorkingSA storage accoung.",
  "actions": ["Microsoft.Storage/storageAccounts/queueServices/queues/read"],
  "dataActions": [
    "Microsoft.Storage/storageAccounts/queueServices/queues/messages/read"
  ],
  "notActions": [],
  "notDataActions": [],
  "AssignableScopes": [
    "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/TestAuth-dev-rg"
  ]
}

最佳答案

@anirudhgarg 指出了正确的道路。

仅当您使用 managed identity access token 时,您设置的托管标识和 RBAC 才会产生影响。访问 Function 应用程序中的存储服务。这意味着这些设置对函数绑定(bind)没有影响,因为它使用 connection string 在内部连接到存储。 。如果您还没有设置connection property对于输出绑定(bind),它利用 AzureWebJobsStorage默认情况下的应用程序设置。

更具体地说,连接字符串与 Azure Active Directory 身份验证过程无关,因此它不会受到 AAD 配置的影响。因此,如果函数利用存储帐户连接字符串(例如使用存储相关绑定(bind)),我们无法使用其他设置限制其访问。同样,不使用连接字符串意味着无法访问。

使用 SAS token 的更新

如果提到的队列用于队列触发器/输入绑定(bind),我们可以通过读取和处理(获取消息然后删除)访问来限制功能,这里是SAS token .

先决条件:

  1. 队列位于 AzureWebJobsStorage 应用设置指定的存储帐户之外的存储帐户中。 AzureWebJobsStorage 需要连接字符串,通过帐户 key 提供完全访问权限。

  2. 功能应用程序是2.0。在功能应用程序设置>运行时版本:2.xx (~2) 中检查它。在 1.x 中,它需要更多权限,例如 AzureWebJobsStorage。

然后按照如下方式在门户上获取 SAS token 并将其放入应用程序设置中。

enter image description here

关于azure - 保护 Azure 函数的安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434852/

相关文章:

azure - 有一些如何备份 Azure AD B2C 的方法吗?

azure - 热衷于获取 Azure 函数应用程序中每个函数的 Azure 函数成本?

asp.net - 具有 transient 故障处理 block 异常的 Azure Web 角色 : The path is too long after being fully qualified

vb.net - 服务器上的 FTPWebRequest.GetResponse 超时,而不是本地调试上的超时

Azure ARM 模板 - 应用程序网关 Web 应用程序防火墙配置 SelectorMatch 运算符语法

azure - 是否可以使用 Terraform 在 Azure Databricks 上设置角色 "account_admin"?

azure - 使用图形 API 以编程方式将用户分配到 Azure AD 应用程序

asp.net-mvc - MVC 应用程序重定向到 Microsoft 登录页面(对于 Azure AD),而不是自定义设计的登录页面

azure - 在 Azure Function 中访问 Azure Key Vault secret

c# - 在 Azure Function 中找不到 EF 的 Getter 方法