Azure назначает роль виртуальной машине с помощью Java SDK

Я пишу программу на Java, которая создает виртуальную машину и получает доступ к файлам из хранилища. Однако у меня возникли проблемы с назначением этой виртуальной машины роли участника / владельца хранилища, чтобы она могла.

В настоящее время у меня есть этот код, но я не уверен, что он мне нужен, а также я не знаю, что писать в некоторых местах:

rbacManager = GraphRbacManager.authenticate( credentials );
rbacManager.roleAssignments()
           .define("roletest")
           // which object? and where to find the ID? 
           .forObjectId("/subscription/" + subscription + "?")
           .withBuiltInRole(com.microsoft.azure.management.graphrbac.BuiltInRole.STORAGE_ACCOUNT_CONTRIBUTOR)
           // what should go as resource scope?
           .withResourceScope(?)
           .createAsync();

По сути, я хочу сделать этот шаг в Java-коде:  введите описание изображения здесь

Заранее спасибо!


person vedsil    schedule 16.11.2020    source источник


Ответы (1)


Что касается проблемы, выполните следующие действия.

  1. Создайте субъект-службу и назначьте Owner роль поставщику услуг.
az login
az ad sp create-for-rbac -n "MyApp" --role "Owner"\
    --scopes /subscriptions/{SubID} \
    --sdk-auth    
  1. проект

а. SDK

<dependency>
      <groupId>com.azure.resourcemanager</groupId>
      <artifactId>azure-resourcemanager</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.2.0</version>
    </dependency>

б. код

 AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
        String clientId="<sp appid>";
        String clientSecret="<sp password>";
        String tenant="";
        String subscriptionId=""
        TokenCredential credential = new ClientSecretCredentialBuilder()
                .clientId(clientId)
                .clientSecret(clientSecret)
                .authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
                .tenantId(tenant)
                .build();
        AzureResourceManager azureResourceManager = AzureResourceManager
                .configure()
                .withLogLevel(HttpLogDetailLevel.BASIC)
                .authenticate(credential, profile)
                .withSubscription(subscriptionId);
        // get storage account
        String accountGroup="";
        String accountName="";
        StorageAccount account = azureResourceManager.storageAccounts().getByResourceGroup(accountGroup,accountName);
        // get vm
        String vmGroup="";
        String vmName="test";
        VirtualMachine virtualMachine = azureResourceManager.virtualMachines().getByResourceGroup(vmGroup,vmName);
        virtualMachine.update()
                .withSystemAssignedManagedServiceIdentity()
                .withSystemAssignedIdentityBasedAccessTo(account.id(), BuiltInRole.fromString("Storage Blob Data Owner"))
                .apply();

    }

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

person Jim Xu    schedule 17.11.2020
comment
.withSystemAssignedIdentityBasedAccessTo() именно то, что мне было нужно, большое спасибо за подробный ответ! - person vedsil; 17.11.2020