【问题标题】:Azure Datalake operation returned an invalid status code forbiddenAzure Datalake 操作返回了无效的状态码,禁止
【发布时间】:2018-05-21 09:38:43
【问题描述】:

我正在向 Azure Datalake 写入一个简单文件,以了解如何将其用于其他方式,但我遇到了问题,当我尝试写入时,我收到以下错误消息

21/5/2018 9:03:27 AM] Executed 'NWPimFeederFromAws' (Failed, Id=39adba4b-9c27-4078-b560-c25532e8432e)
[21/5/2018 9:03:27 AM] System.Private.CoreLib: Exception while executing function: NWPimFeederFromAws. Microsoft.Azure.Management.DataLake.Store: One or more errors occurred. (Operation returned an invalid status code 'Forbidden'). Microsoft.Azure.Management.DataLake.Store: Operation returned an invalid status code 'Forbidden'.

有问题的代码如下

static void WriteToAzureDataLake() {

    // 1. Set Synchronization Context
    SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

    // 2. Create credentials to authenticate requests as an Active Directory application
    var clientCredential = new ClientCredential(clientId, clientSecret);

    //var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;
    var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;

    // 2. Initialise Data Lake Store File System Client
    adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

    // 3. Upload a file to the Data Lake Store
    var source = "c:\\nwsys\\source.txt";
    var destination = "/PIMRAW/destination.txt";
    adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);

    // FINISHED
    Console.WriteLine("6. Finished!");
}

我已将 Azure AD 中的应用程序添加到我尝试写入的特定文件夹的访问列表中,如下所示

我的代码中的 clientID 和 clientSecret 来自这个应用程序,所以我有点不知道为什么我被禁止了。

我还忘了别的吗?

在我尝试创建客户端之前,可能是 loginAsync 尚未完成?

【问题讨论】:

  • 您是否将文件夹的子权限替换为文件夹权限?还有你申请后等了多久。推广权限通常需要 30 分钟
  • 我确实说这个文件夹和所有的孩子是的,我已经等了超过 30 分钟
  • 它与LoginAsync 无关(我可以毫无问题地使用您的相同代码)。是否有可能该文件已经存在,并且您尚未授予对特定文件的访问权限(以便覆盖它)?
  • 文件不存在确定文件夹是新的且完全为空

标签: c# azure azure-active-directory azure-functions azure-data-lake


【解决方案1】:

您是否授予您的应用程序/服务主体对您的应用程序正在写入的特定文件夹路径中的父文件夹的执行权限?这是遍历文件夹路径所必需的,有关示例,请参见此处:https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-access-control#common-scenarios-related-to-permissions

【讨论】:

  • 偷偷摸摸的这个,因为我的文件夹是根文件夹,顶层文件夹是帐户本身,文档不是很清楚,但是当我在帐户本身上设置执行时,它就可以工作跨度>
【解决方案2】:

在我尝试创建客户端之前,可能是 loginAsync 尚未完成?

它与 loginAsync 无关。 根据我的测试,如果我将权限分配给文件夹,它在我这边可以正常工作。

测试结果:

如果可能,您可以创建一个新的 Datalake 帐户或新文件夹,然后重试。我建议您可以使用 fiddler 来捕获有关异常的详细信息。

【讨论】:

  • 您使用的用户名我使用的应用程序进行身份验证有什么不同吗?
  • 我也是用app来认证的。
  • 好吧,我不知道我确实在这里尝试了一个新帐户和一个新文件夹,但同样的问题在这里过夜
  • 您可以使用 fiddler 来捕获有关异常的更多详细信息。
【解决方案3】:

不是答案,只是记录我遇到类似错误时的发现。

我将我的 Azure 数据工厂托管身份添加到帐户级别(以及文件系统)级别的 参与者 角色。

尝试从 ADF 创建 blob 时出现禁止错误

所以我将它添加到 Storage Blob Data Contributor。它没有立即起作用,但大约需要 10 分钟才能被识别。然后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多