web-dev-qa-db-ja.com

ADトークンを使用した取得リクエストのAzure Blob Storageの「承認権限の不一致」エラー

Azure Blob StorageでCRUD操作を行うことができるAngular 6アプリケーションを作成しています。ただし、アプリ内に実装してトークンをコピーして貼り付ける前に、郵便配達員を使用してリクエストをテストしていますそのリソースのAngularから取得します。

テスト目的でストレージ内にあるファイルを読み取ろうとすると、次のようになります:<Code>AuthorizationPermissionMismatch</Code> <Message>This request is not authorized to perform this operation using this permission.

  • すべてが本番環境で(ただし開発中)
  • Oauthを介してストレージリソース専用に取得されたトークン
  • 郵便配達員は「ベアラ」としてトークン戦略を持っています
  • アプリケーションには「Azure Storage」に権限が委任されています。
  • トークンを取得しているアプリとアカウントの両方が、AzureアクセスコントロールIAMに「所有者」として追加されます
  • IPがBLOBストレージのCORS設定に追加されます。
  • StorageV2(汎用v2)-標準-ホット
  • 使用されるx-ms-versionヘッダーは次のとおりです:2018-03-28これは最新のものであり、ストレージアカウントを作成したばかりだからです。
6
MichaelB

アプリとアカウントを所有者として追加するだけでは不十分であることがわかりました。ストレージアカウント> IAM>ロールを追加し、このタイプのリクエストに特別な権限を追加します。STORAGEBLOB DATA CONTRIBUTOR(PREVIEW)

10
jager1000

サブスクリプションスコープで「STORAGE BLOB DATA XXXX」ロールを適用する場合、サブスクリプションにAzure DataBricks名前空間がある場合は機能しないことに注意してください。

サブスクリプションにAzure DataBricks名前空間が含まれている場合、サブスクリプションスコープで割り当てられたロールは、blobおよびキューデータへのアクセスを許可することからブロックされます。

ソース: https://docs.Microsoft.com/en-us/Azure/storage/common/storage-auth-aad-rbac-portal#determine-resource-scope

1
sylr

GetAccessTokenAsyncメソッドで要求されたリソースを " https://storage.Azure.com "からこのスニペットのようにストレージBLOBのURLに変更することでこれを解決しました。

    public async Task<StorageCredentials> CreateStorageCredentialsAsync()
    {
        var provider = new AzureServiceTokenProvider();
        var token = await provider.GetAccessTokenAsync(AzureStorageContainerUrl);
        var tokenCredential = new TokenCredential(token);
        var storageCredentials = new StorageCredentials(tokenCredential);
        return storageCredentials;
    }

azureStorageContainerUrlが https://xxxxxxxxx.blob.core.windows.net/ に設定されている場合

0
Liam