【问题标题】:List blobs and containers based on assigned RBAC根据分配的 RBAC 列出 blob 和容器
【发布时间】:2022-01-10 00:33:05
【问题描述】:

使用 Spring Boot 2.5.x 构建的应用程序...使用最新的 Azure Java SDK (Azure BOM 3.9.0)。

使用 Spring Security 和 Azure Active Directory Spring Boot starter 进行 authN/authZ...一切正常...AZ 安全组和应用注册应用角色在 Spring Security 中正确映射为授予权限等。

存储 blob 容器已分配组 RBAC。

我们有一个要求,希望列出 AD 用户已被授予写入权限的容器(参与者角色)以及使用 ABAC 的容器下的虚拟文件夹(blob 前缀)。

所有用户都已阅读,但只有某些用户可以更新某些容器和/或 blob 文件夹(例如容器/管理员)中的 blob

使用 Azure blob 存储 SDK 列出容器和 blob,但在实现中没有看到任何要按 RBAC 过滤的内容。

我想到的一些实现细节:

  • blob/容器索引标签;标记“管理员”相关的 blob 并使用标记 列表中的过滤器。缺点是blob标签需要管理

  • blob/容器元数据;类似于标签,但没有索引;不确定 如果直接通过 SDK 支持

  • 使用以下任一方法过滤从 SDK 调用返回的流集合 标签或元数据

感谢您的想法或想法!

【问题讨论】:

    标签: azure-active-directory azure-blob-storage azure-rbac azure-sdk-for-java


    【解决方案1】:

    您可能需要使用management SDK

    var roles = azure.accessManagement().roleAssignments()
        .listByServicePrincipal(objectId)
    

    或者您可以通过资源范围(存储帐户的 ID)获取角色。

    但是 2.10.0 中使用的服务 api-version 有点旧,它没有显示角色分配中的条件(对于 ABAC),因此您不会在存储帐户下方看到更精细的条件。


    获取用户/服务主体的 objectId 可能需要 AAD 中的某些读取用户权限。 你可以得到它们,例如通过 CLI,如果您还没有它们。

    >az ad user list --display-name foo
    

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2020-07-31
      • 2016-01-27
      • 2018-06-10
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多