Azure SDK IoT Storage без ключа учетной записи в той же среде в агенте

У меня есть код снизу, который отлично работает. Моя служба и хранилище находятся в одной среде в агенте. Есть ли способ записать учетные данные без предоставления ключа, следовательно, они находятся в одной среде в агенте?

StorageSharedKeyCredential credential = 
new StorageSharedKeyCredential(accountName, **accountKey**);

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
           .endpoint(endpoint)
           .credential(credential)
           .buildClient();

Что вы имеете в виду под той же «той же средой в агенте»? Вы запускаете веб-приложение или приложение на виртуальной машине Azure, которая подключается к учетной записи хранения Azure?

NotFound 30.01.2023 17:07

Приложение и хранилище находятся в одной среде. Приложение работает внутри Kubernetes. Хранилище является выделенным.

Sorin Penteleiciuc 31.01.2023 13:20

Вы можете попробовать использовать перегрузку с TokenCredential для создания своего клиента с использованием класса ManagedIdentityCredential. Затем создайте управляемое удостоверение для своего Kubernetes и назначьте ему разрешение RBAC на ресурс учетной записи хранения. Я никогда не пробовал его в сервисе Kubernetes, поэтому не уверен, что этого достаточно.

NotFound 31.01.2023 13:47

Не могли бы вы привести конкретный пример? Я все еще немного смущен.

Sorin Penteleiciuc 31.01.2023 13:58

В следующих документах это хорошо объясняется: learn.microsoft.com/en-us/azure/storage/blobs/… и learn.microsoft.com/en-us/java/api/overview/azure/…

NotFound 31.01.2023 14:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ли способ записать учетные данные без предоставления ключа?

Чтобы избежать ключевых учетных данных, я согласен с @NotFound, что вы можете использовать Tokencredential с методом DefaultAzureCredential.

Вам необходимо назначить роли RBAC своей учетной записи хранения для доступа к хранилищу BLOB-объектов через удостоверение. Роли:

  • Участник хранения больших двоичных объектов (или)
  • Хранилище-BLOB-владелец данных

Перейдите на портал -> учетные записи хранения -> контроль доступа (IAM) -> добавить -> добавить назначения ролей -> роль Storage-Blob-Contributor или Storage-Blob-owner для учетной записи хранения.

Портал:

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

Код:

import com.azure.storage.blob.*;
import com.azure.core.credential.TokenCredential;
import com.azure.identity.*;


public class App 
{
    public static void main( String[] args )
    {
       TokenCredential credential = new DefaultAzureCredentialBuilder().build();
       BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
            .endpoint("https://<storage account name>.blob.core.windows.net/")
            .credential(credential)
            .buildClient();
            String  containerName = "test";
        BlobContainerClient  containerClient = blobServiceClient.getBlobContainerClient(containerName);
        String  localPath = "<your local path >";
        BlobClient  blobClient = containerClient.getBlobClient("file.json");
        System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());
        blobClient.uploadFromFile(localPath);  
        System.out.println("Uploaded!!!");  
    }
}

Консоль:

Портал:

Другие вопросы по теме