Azure функция не загружает файл в хранилище BLOB-объектов с использованием идентификатора, назначенного пользователем - PullRequest
0 голосов
/ 19 июня 2020

Добавлен пользовательский идентификатор в приложении-функции и в учетной записи хранения BLOB-объектов в качестве роли «Участник данных BLOB-объектов хранилища». Код отлично работает с добавлением исходящего IP-адреса приложения-функции в учетной записи хранения. Но хотите использовать идентификацию, назначенную пользователем.

Я получаю сообщение об ошибке «Произошла одна или несколько ошибок. (Этот запрос не авторизован для выполнения этой операции.)»

Кто-нибудь сталкивался с этой проблемой раньше? Заранее цените вашу помощь.

            StorageCredentials storageCredential = new StorageCredentials(AccountName, AccessKey);
            CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredential, true);

            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer blobContainer = blobClient.GetContainerReference("rawzone");
            BlobRequestOptions requestOptions = new BlobRequestOptions() { RetryPolicy = new NoRetry() };
            CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference("test");

            string result = "writing test file " + DateTime.Now.ToString();
            blockBlob.UploadTextAsync(result).Wait();

1 Ответ

0 голосов
/ 22 июня 2020

Я тестирую на своем сайте, и он работает очень хорошо. Для этого вы можете выполнить следующие шаги.

1.Создайте мой управляемый пользователем идентификатор и добавьте к нему Storage Blob Data Contributor.

enter image description here

2.In azure function enable user-assign managed identity and add the user identity you create before.

3.In azure function http trigger and the following code in function which will использовать управляемый пользователем личность . В коде, который вы предоставили, используются учетные данные хранилища, и он всегда будет хорошо работать.

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
TokenCredential tokenCredential = new TokenCredential(accessToken);
StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);
CloudBlobClient blobClient = new CloudBlobClient(new Uri("https://xxxxx.blob.core.windows.net"), storageCredentials);

CloudBlobContainer blobContainer = blobClient.GetContainerReference("container");
BlobRequestOptions requestOptions = new BlobRequestOptions() { RetryPolicy = new NoRetry() };
CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference("hello.txt");

string result = "writing test file " + DateTime.Now.ToString();
blockBlob.UploadTextAsync(result).Wait();

4. Для управления процессом используйте строку подключения, переданную конструктору AzureServiceTokenProvider или указанную в AzureServicesAuthConnectionString переменная среды.

Щелкните идентификатор пользователя и получите его идентификатор приложения.

RunAs=App;AppId={ClientId of user-assigned identity}

enter image description here

5.Then run azure function, and it will write text in to blob.

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...