当前位置: 首页 > 知识库问答 >
问题:

如何使用setAccessPolicy更改Azure中blob的公共访问级别

盖斌
2023-03-14

如何更改blob访问策略?

目前,我可以使用azure quick Start创建一些测试blob。这很好用,但在我的例子中,Blob的公共访问级别默认为private。我想将公共访问级别从Private(无匿名访问)设置为Blob(仅对Blob进行匿名读取访问)。

public static void main( String[] args ) throws IOException
    {
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectionString).buildClient();
        String containerName = "testblobs"+ UUID.randomUUID();

        BlobSignedIdentifier identifier = new BlobSignedIdentifier()
                .setId("name")
                .setAccessPolicy(new BlobAccessPolicy()
                .setStartsOn(OffsetDateTime.now())
                        .setExpiresOn(OffsetDateTime.now().plusDays(1))
                .setPermissions("permissionString")); //what should I put here?

        BlobContainerClient containerClient = blobServiceClient.createBlobContainer(containerName);

        try {
            containerClient.setAccessPolicy(PublicAccessType.CONTAINER, Collections.singletonList(identifier));
            System.out.println("Set Access Policy to 'Public read access for blobs only'.");
        } catch (UnsupportedOperationException err) {
            System.out.printf("Set Access Policy failed because: %s\n", err);
        }

        String localPath = "pathtofile";
        String fileName = "myfile.bpmn";
        File localFile = new File(localPath+fileName);

        BlobClient blobClient = containerClient.getBlobClient(fileName);

        System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());

        blobClient.uploadFromFile(localPath + fileName);

        System.out.println("\nListing da blobs...");

        for (BlobItem blobItem : containerClient.listBlobs()) {
            System.out.println();
            System.out.println("\t" + blobItem.getName());
        }
    }

当我运行这段代码时,它将引发以下异常,我认为这是因为.setPermissions(“PermissionString”)没有正确设置。

异常StackTrace:

通过一些代码示例向我解释.setPermissions(“PermissionString”)如何为Blob设置公共访问权限的任何帮助都将非常有用。

共有1个答案

寿鸣
2023-03-14

适用于blob容器的权限定义为此处

根据希望包含在访问策略中的权限,您可以从以下一个或多个权限中进行选择:读取(r)添加(a)创建(c)写入(w)删除(d)列表(l)

请注意,这些权限的排序是很重要的。它们必须遵循以下顺序:racwdl

还要注意,在共享访问策略中指定权限是可选的,因此您也可以保留权限字符串为空。

 类似资料:
  • 我正在通过adal节点库使用microsoft登录验证我的网页的用户。 adal-node有一个,我们可以使用

  • 我曾经能够使用v11 Azure SDK API在Blob上创建共享访问签名,如下所示: 我想使用最新的v12。NET API,它似乎用BlobServiceClient取代了CloudBlobClient,用BlobContainerClient取代了CloudBlobContainer,用BlobClient取代了CloudBlockBlob。 但是,在实例上可用的方法在实例上不可用。 问题

  • 在HDInsight集群上,使用CREATE外部语句创建配置单元表: 然后更改一些现有的文件,将一些文件添加到CREATE语句中提到的Azure Blob容器中。 一个新的配置单元查询是否考虑对Blob容器所做的更改,同时将数据再次加载到配置单元表?

  • 我正在尝试从Azure函数访问存储帐户。但是在尝试检索文件时收到403错误。我看不出为什么会出现此错误有任何问题。 让我解释一下设置。 1-Azure function app位于美国东部2-Azure blob位于中南部3-Azure blob启用了防火墙(我已启用Azure服务可以访问)4-我还将function app的IP列入了白名单。(properties virtual IP)5-Az

  • 我们正在开发几个部署到Azure Function Apps的Quarkus(在撰写本文时为2.5.4)应用程序。 我们注意到,我们所有的日志,无论代码的严重性如何,都在应用洞察中显示为信息。 我们已将 jboss 日志管理器添加到依赖项中: 当我检查日志时,它显示为这样。 2022-02-24T07:58:14.325[Information] 2022-02-24T07:58:14.308[I

  • 我正在使用Azure Databricks中的spark解析Azure blob存储中的文件。blob作为DBFS挂载。现在我在笔记本上使用硬编码文件名(dbfs文件名)。但是每当创建新blob时,我希望用新的dbfs名称触发笔记本。我检查了使用Azure函数我可以得到一个blob触发器。我可以从Azure函数启动databricks笔记本/作业吗?对blob的操作需要相当长的时间。在这种情况下使