Управление пользователями на основе токенов Microsoft Entra в конфиденциальном реестре Azure
Пользователи на основе идентификаторов Microsoft Entra определяются своим идентификатором объекта Microsoft Entra.
Пользователи с правами администратора могут управлять пользователями конфиденциального реестра. Доступные роли: читатель (только для чтения), участник (чтение и запись), а также администратор (чтение, запись и управление пользователями).
Вход в Azure
Вход в Azure с помощью команды az login Azure CLI или командлета Connect-AzAccount Azure PowerShell.
az login
Если в CLI или PowerShell можно запустить браузер по умолчанию, откроется браузер со страницей входа в Azure. В противном случае самостоятельно откройте страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
При запросе выполните вход в браузере с помощью учетных данных.
Получите имя конфиденциального реестра и URI службы удостоверений из портал Azure, так как необходимо создать клиент для управления пользователями. На этом рисунке показаны соответствующие свойства в портал Azure.
Замените экземпляры и 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.
Замените экземпляры и 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.
Замените экземпляры и 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.
Замените экземпляры и 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
. Вы можете добавлять, обновлять и удалять пользователей из этой колонки.
Чтобы добавить пользователя, нажмите Add/Remove
кнопку, выберите пользователя и выберите роль для пользователя и Apply
изменения. Пользователь будет добавлен в список пользователей с выбранной ролью.
Чтобы удалить пользователя из реестра, выберите Not Assigned
роль и нажмите Apply
кнопку. Пользователь будет удален из списка пользователей.