Управление пользователями на основе токенов Microsoft Entra в конфиденциальном реестре Azure

Пользователи на основе идентификаторов Microsoft Entra определяются своим идентификатором объекта Microsoft Entra.

Пользователи с правами Администратор istrator могут управлять пользователями конфиденциального реестра. Доступные роли: читатель (только для чтения), участник (чтение и запись) и Администратор istrator (чтение, запись и управление пользователями).

Вход в Azure

Вход в Azure с помощью команды az login Azure CLI или командлета Connect-AzAccount Azure PowerShell.

az login

Если в CLI или PowerShell можно запустить браузер по умолчанию, откроется браузер со страницей входа в Azure. В противном случае самостоятельно откройте страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.

При запросе выполните вход в браузере с помощью учетных данных.

Получите имя конфиденциального реестра и URI службы удостоверений из портал Azure, так как необходимо создать клиент для управления пользователями. На этом рисунке показаны соответствующие свойства в портал Azure.

A screenshot showing ledger properties in the Azure portal.

Замените экземпляры и https://contoso.confidential-ledger.azure.com в приведенных ниже фрагментах contoso кода соответствующими значениями из портал Azure.

Клиентская библиотека Python

Установка пакетов

pip install azure-identity azure-confidentialledger

Создание клиента конфиденциального реестра

from azure.identity import DefaultAzureCredential
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.identity_service import ConfidentialLedgerIdentityServiceClient
from azure.confidentialledger import LedgerUserRole

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="contoso"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

# The DefaultAzureCredential will use the current Azure context to authenticate to Azure
credential = DefaultAzureCredential()

ledger_client = ConfidentialLedgerClient(
    endpoint="https://contoso.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

# Add a user with the contributor role
# Other supported roles are Contributor and Administrator
user_id = "Azure AD object id of the user"
user = ledger_client.create_or_update_user(
    user_id, {"assignedRole": "Contributor"}
)

# Get the user and check their properties
user = ledger_client.get_user(user_id)
assert user["userId"] == user_id
assert user["assignedRole"] == "Contributor"

# Delete the user
ledger_client.delete_user(user_id)

Вход в Azure

Вход в Azure с помощью команды az login Azure CLI или командлета Connect-AzAccount Azure PowerShell.

az login

Если в CLI или PowerShell можно запустить браузер по умолчанию, откроется браузер со страницей входа в Azure. В противном случае самостоятельно откройте страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.

При запросе выполните вход в браузере с помощью учетных данных.

Получите имя конфиденциального реестра и URI службы удостоверений из портал Azure, так как необходимо создать клиент для управления пользователями. На этом рисунке показаны соответствующие свойства в портал Azure.

A screenshot showing ledger properties in the Azure portal.

Замените экземпляры и https://contoso.confidential-ledger.azure.com в приведенных ниже фрагментах contoso кода соответствующими значениями из портал Azure.

Клиентская библиотека .NET

Установка пакетов

dotnet add package Azure.Security.ConfidentialLedger
dotnet add package Azure.Identity
dotnet add Azure.Security

Создание клиента и управление пользователями

using Azure.Core;
using Azure.Identity;
using Azure.Security.ConfidentialLedger;

internal class ACLUserManagement
{
    static void Main(string[] args)
    {
      // Create a ConfidentialLedgerClient instance
      // The DefaultAzureCredential will use the current Azure context to authenticate to Azure
      var ledgerClient = new ConfidentialLedgerClient(new Uri("https://contoso.confidential-ledger.azure.com"), new DefaultAzureCredential());

      string userId = "Azure AD object id of the user";

      // Add the user with the Reader role
      // Other supported roles are Contributor and Administrator
      ledgerClient.CreateOrUpdateUser(
         userId,
         RequestContent.Create(new { assignedRole = "Reader" })); 

      // Get the user and print their properties
      Azure.Response response = ledgerClient.GetUser(userId);
      var aclUser = System.Text.Json.JsonDocument.Parse(response.Content.ToString());

      Console.WriteLine($"Assigned Role is = {aclUser.RootElement.GetProperty("assignedRole").ToString()}");
      Console.WriteLine($"User id is = {aclUser.RootElement.GetProperty("userId").ToString()}");

      // Delete the user
      ledgerClient.DeleteUser(userId);
    }
}

Вход в Azure

Вход в Azure с помощью команды az login Azure CLI или командлета Connect-AzAccount Azure PowerShell.

az login

Если в CLI или PowerShell можно запустить браузер по умолчанию, откроется браузер со страницей входа в Azure. В противном случае самостоятельно откройте страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.

При запросе выполните вход в браузере с помощью учетных данных.

Получите имя конфиденциального реестра и URI службы удостоверений из портал Azure, так как необходимо создать клиент для управления пользователями. На этом рисунке показаны соответствующие свойства в портал Azure.

A screenshot showing ledger properties in the Azure portal.

Замените экземпляры и https://contoso.confidential-ledger.azure.com в приведенных ниже фрагментах contoso кода соответствующими значениями из портал Azure.

Клиентская библиотека Java

Установка пакетов

<!-- https://mvnrepository.com/artifact/com.azure/azure-security-confidentialledger -->
<dependency>
	<groupId>com.azure</groupId>
	<artifactId>azure-security-confidentialledger</artifactId>
	<version>1.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.azure/azure-identity -->
<dependency>
	<groupId>com.azure</groupId>
	<artifactId>azure-identity</artifactId>
	<version>1.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.azure/azure-core -->
<dependency>
	<groupId>com.azure</groupId>
	<artifactId>azure-core</artifactId>
	<version>1.36.0</version>
</dependency>

Создание клиента и управление пользователями

   import java.io.IOException;
import com.azure.core.http.HttpClient;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;

import com.azure.security.confidentialledger.*;
import com.azure.core.http.rest.RequestOptions;
import com.azure.core.http.netty.NettyAsyncHttpClientBuilder;
import com.azure.core.http.rest.Response;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.azure.security.confidentialledger.certificate.ConfidentialLedgerCertificateClient;
import com.azure.security.confidentialledger.certificate.ConfidentialLedgerCertificateClientBuilder;

import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;

public class CreateOrUpdateUserSample {
	public static void main(String[] args) {
		try {
         	// Download the service identity certificate of the ledger from the well-known identity service endpoint.
         	// Do not change the identity endpoint.
			ConfidentialLedgerCertificateClientBuilder confidentialLedgerCertificateClientbuilder = new ConfidentialLedgerCertificateClientBuilder()
					.certificateEndpoint("https://identity.confidential-ledger.core.azure.com")
					.credential(new DefaultAzureCredentialBuilder().build()).httpClient(HttpClient.createDefault());

			ConfidentialLedgerCertificateClient confidentialLedgerCertificateClient = confidentialLedgerCertificateClientbuilder
					.buildClient();

			String ledgerId = "contoso";
			Response<BinaryData> ledgerCertificateWithResponse = confidentialLedgerCertificateClient
					.getLedgerIdentityWithResponse(ledgerId, null);
			BinaryData certificateResponse = ledgerCertificateWithResponse.getValue();
			ObjectMapper mapper = new ObjectMapper();
			JsonNode jsonNode = mapper.readTree(certificateResponse.toBytes());
			String ledgerTlsCertificate = jsonNode.get("ledgerTlsCertificate").asText();

			SslContext sslContext = SslContextBuilder.forClient()
					.trustManager(new ByteArrayInputStream(ledgerTlsCertificate.getBytes(StandardCharsets.UTF_8)))
					.build();
			reactor.netty.http.client.HttpClient reactorClient = reactor.netty.http.client.HttpClient.create()
					.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));
			HttpClient httpClient = new NettyAsyncHttpClientBuilder(reactorClient).wiretap(true).build();

         	// The DefaultAzureCredentialBuilder will use the current Azure context to authenticate to Azure
			ConfidentialLedgerClient confidentialLedgerClient = new ConfidentialLedgerClientBuilder()
					.credential(new DefaultAzureCredentialBuilder().build()).httpClient(httpClient)
					.ledgerEndpoint("https://contoso.confidential-ledger.azure.com").buildClient();

			// Add a user
			// Other supported roles are Contributor and Administrator
			BinaryData userDetails = BinaryData.fromString("{\"assignedRole\":\"Reader\"}");
			RequestOptions requestOptions = new RequestOptions();
			String userId = "Azure AD object id of the user";
			Response<BinaryData> response = confidentialLedgerClient.createOrUpdateUserWithResponse(userId,
					userDetails, requestOptions);

			BinaryData parsedResponse = response.getValue();

			ObjectMapper objectMapper = new ObjectMapper();
			JsonNode responseBodyJson = null;

			try {
				responseBodyJson = objectMapper.readTree(parsedResponse.toBytes());
			} catch (IOException e) {
				e.printStackTrace();
			}

			System.out.println("Assigned role for user is " + responseBodyJson.get("assignedRole"));

			// Get the user and print the details
			response = confidentialLedgerClient.getUserWithResponse(userId, requestOptions);

			parsedResponse = response.getValue();

			try {
				responseBodyJson = objectMapper.readTree(parsedResponse.toBytes());
			} catch (IOException e) {
				e.printStackTrace();
			}

			System.out.println("Assigned role for user is " + responseBodyJson.get("assignedRole"));

			// Delete the user
			confidentialLedgerClient.deleteUserWithResponse(userId, requestOptions);
		} catch (Exception ex) {
			System.out.println("Caught exception" + ex);
		}
	}
}

Вход в Azure

Вход в Azure с помощью команды az login Azure CLI или командлета Connect-AzAccount Azure PowerShell.

az login

Если в CLI или PowerShell можно запустить браузер по умолчанию, откроется браузер со страницей входа в Azure. В противном случае самостоятельно откройте страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.

При запросе выполните вход в браузере с помощью учетных данных.

Получите имя конфиденциального реестра и URI службы удостоверений из портал Azure, так как необходимо создать клиент для управления пользователями. На этом рисунке показаны соответствующие свойства в портал Azure.

A screenshot showing ledger properties in the Azure portal.

Замените экземпляры и https://contoso.confidential-ledger.azure.com в приведенных ниже фрагментах contoso кода соответствующими значениями из портал Azure.

Клиентская библиотека TypeScript

Установка пакетов

 "dependencies": {
    "@azure-rest/confidential-ledger": "^1.0.0",
    "@azure/identity": "^3.1.3",
    "typescript": "^4.9.5"
  }

Создание клиента и управление пользователями

import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
import { DefaultAzureCredential } from "@azure/identity";

export async function main() {
  // Get the signing certificate from the confidential ledger Identity Service
  const ledgerIdentity = await getLedgerIdentity("contoso");

  // Create the confidential ledger Client
  const confidentialLedger = ConfidentialLedger(
    "https://contoso.confidential-ledger.azure.com",
    ledgerIdentity.ledgerIdentityCertificate,
    new DefaultAzureCredential()
  );

  // Azure AD object id of the user
  const userId = "Azure AD Object id"

  // Other supported roles are Reader and Contributor
  const createUserParams: CreateOrUpdateUserParameters = {
    contentType: "application/merge-patch+json",
    body: {
        assignedRole: "Contributor",
        userId: `${userId}`
      }
  }

  // Add the user
  var response = await confidentialLedger.path("/app/users/{userId}", userId).patch(createUserParams)

  // Check for a non-success response
  if (response.status !== "200") {
    throw response.body.error;
  }

  // Print the response
  console.log(response.body);

  // Get the user
  response = await confidentialLedger.path("/app/users/{userId}", userId).get()

  // Check for a non-success response
  if (response.status !== "200") {
    throw response.body.error;
  }

  // Print the response
  console.log(response.body);

  // Set the user role to Reader
  const updateUserParams: CreateOrUpdateUserParameters = {
    contentType: "application/merge-patch+json",
    body: {
        assignedRole: "Reader",
        userId: `${userId}`
      }
  }

  // Update the user
  response = await confidentialLedger.path("/app/users/{userId}", userId).patch(updateUserParams)

  // Check for a non-success response
  if (response.status !== "200") {
    throw response.body.error;
  }

  // Print the response
  console.log(response.body);

  // Delete the user
  await confidentialLedger.path("/app/users/{userId}", userId).delete()

  // Get the user to make sure it is deleted
  response = await confidentialLedger.path("/app/users/{userId}", userId).get()

  // Check for a non-success response
  if (response.status !== "200") {
    throw response.body.error;
  }
}

main().catch((err) => {
  console.error(err);
});

Портал Azure

Перейдите к портал Azure и получите доступ к колонкеManage users. Вы можете добавлять, обновлять и удалять пользователей из этой колонки. Screenshot of the Manage Users blade.

Чтобы добавить пользователя, нажмите Add/Remove кнопку, выберите пользователя и выберите роль для пользователя и Apply изменения. Пользователь будет добавлен в список пользователей с выбранной ролью.

Screenshot of the select role dropdown.

Чтобы удалить пользователя из реестра, выберите Not Assigned роль и нажмите Apply кнопку. Пользователь будет удален из списка пользователей.

Следующие шаги