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

Azure使用REST api和托管标识创建blob容器-403错误

穆俊名
2023-03-14

我正在尝试使用RESTAPI在存储帐户下创建blob容器

我使用托管标识(应用服务,节点应用程序)与存储帐户交互。此托管标识具有对资源组和存储帐户-存储帐户贡献者和存储Blob数据贡献者的必要权限

以下是我将遵循的步骤:

>

  • 获取https://storage-account-name.blob.core.windows.net资源上托管标识的访问令牌(参考:html" target="_blank">https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet#obtain-tokens-for-azure-resources)

    为创建容器构造请求和调用RESTAPI(参考:https://docs.microsoft.com/en-us/rest/api/storageservices/create-container)

    我在第二步发送的强制性标题是:

    • 授权:承载访问令牌

    我得到:statusCode:403,statusMessage:'服务器无法验证请求。确保包括签名在内的授权标头的值格式正确。”

    发送授权头时,我错过了什么吗?找不到使用托管标识调用创建容器api的任何示例。

    另一种选择是使用blob存储sdk(https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-nodejs)但找不到使用托管标识创建容器的任何示例。

    非常感谢任何能使这项工作成功的建议。

    谢谢,

  • 共有1个答案

    凌和颂
    2023-03-14

    首先,不能使用托管标识调用Rest API。Authoration标头需要授权方案、帐户名和签名。

    在Node.js中使用JavaScript v12 SDK管理Blob:

    您可以使用@azure/identity管理身份。

    const { ManagedIdentityCredential } = require("@azure/identity");
    const { BlobServiceClient } = require("@azure/storage-blob");
    
    const credential = new ManagedIdentityCredential("<USER_ASSIGNED_MANAGED_IDENTITY_CLIENT_ID>");
    
    const blobServiceClient = new BlobServiceClient(
        `https://${account}.blob.core.windows.net`,
        credential
    );
    
     类似资料:
    • 在v11SDK. NET中,我能够使用托管标识令牌来访问Azure blob: 现在我想切换到v12 SDK,但不知道如何对BlobServiceClient进行同样的操作。

    • 我试图使用托管标识从API管理实例调用Azure函数。我已为我的APIM实例设置了系统管理的标识。我已将参与者角色授予Azure Function应用程序上的此身份。我还将应用程序服务身份验证更改为AD。 现在我尝试从API调用该函数。 我有两个问题: 第一个:当我使用身份验证管理身份策略来获取令牌时,我得到了一个错误,当我使用受众https://myfunctionapp.azurewebsit

    • 有没有办法将Azure托管标识与LinuxVM一起使用来访问AzureSQL数据库?我只能找到这个文档https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql它专门针对Windows VM。Linux机器是否有文档

    • 当我试图使用分配了托管标识的系统在Azure Function应用程序中调用Azure函数以从Azure存储容器中获取blob时,我遇到了:

    • 我使用已签名的URL从使用Air的移动设备上传blob。 我有两个问题: 使用签名 URL 上传 Blob 时,我假设我不需要按照文档中所述包含所有标头。我是否认为我只需要对URL执行请求,并将编码到正文中的文件包含在正文中,设置为? http://msdn . Microsoft . com/en-us/library/windows azure/DD 179451 . aspx (Upload

    • 我们计划在我们的单个Azure kubernetes集群上部署多个应用程序,每个应用程序都将拥有自己的一组Azure资源-例如:Key vault、Storage。 我计划为每个应用程序提供个人托管身份,并提供对相关资源的访问。 我知道AZURE AAD POD identify是配置POD以使用托管标识访问AZURE资源的方法。 但是,如何将多个托管标识添加到Azure kubernetes集群