Použití řízení přístupu na základě role se službou Azure Cosmos DB for Table (Preview)
Diagram posloupnosti průvodce nasazením, včetně těchto umístění, v uvedeném pořadí: Přehled, Koncepty, Příprava, Řízení přístupu na základě role a Reference Umístění Řízení přístupu na základě role je aktuálně zvýrazněné.
Tento článek vás provede postupem udělení přístupu k identitě pro správu dat v účtu služby Azure Cosmos DB for Table. Kroky v tomto článku pokrývají pouze přístup roviny dat k provádění operací s jednotlivými položkami a spouštění dotazů.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Existující účet služby Azure Cosmos DB for Table.
- Jedna nebo více existujících identit v Microsoft Entra ID.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Příprava definice role
Nejprve musíte připravit definici role se seznamem dataActions
pro udělení přístupu ke čtení, dotazování a správě dat ve službě Azure Cosmos DB for Table.
Nejprve získejte identifikátor prostředku existujícího účtu služby Azure Cosmos DB pro tabulku a az cosmsodb show
uložte ho do proměnné. Pak vypíšete seznam všech definic rolí přidružených k vašemu účtu tabulky Azure Cosmos DB pomocí az rest
. Nakonec si prohlédněte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve id
vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.
resourceId=$( \
az cosmosdb show \
--resource-group "<name-of-existing-resource-group>" \
--name "<name-of-existing-table-account>" \
--query "id" \
--output tsv \
)
az rest \
--method "GET" \
--url $resourceId/tableRoleDefinitions?api-version=2023-04-15
[
...,
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"properties": {
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/tables/*",
"Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "BuiltInRole"
},
"type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
}
...
]
Poznámka:
V tomto příkladu id
by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Tento příklad výstupu je zkrácený.
Slouží Get-AzCosmosDBAccount
k získání identifikátoru prostředku existujícího účtu služby Azure Cosmos DB for Table a jeho uložení do proměnné. Pak použijte Invoke-AzRestMethod
k výpisu všech definic rolí přidružených k vašemu účtu tabulky Azure Cosmos DB. Zkontrolujte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat Cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve Id
vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
Name = "<name-of-existing-table-account>"
}
$resourceId = (
Get-AzCosmosDBAccount @parameters |
Select-Object -Property Id -First 1
).Id
$parameters = @{
Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15"
Method = "GET"
}
Invoke-AzRestMethod @parameters
StatusCode : 200
Content : {
"value": [
...,
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"properties": {
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/tables/*",
"Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "BuiltInRole"
},
"type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
}
...
]
}
...
Poznámka:
V tomto příkladu Id
by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Tento příklad výstupu je zkrácený.
Přiřazení role identitě
Teď přiřaďte nově definovanou roli identitě, aby vaše aplikace mohly přistupovat k datům ve službě Azure Cosmos DB for Table.
Důležité
Tento úkol přiřazení vyžaduje, abyste měli jedinečný identifikátor jakékoli identity, kterou chcete udělit oprávnění řízení přístupu na základě role. Pokud nemáte jedinečný identifikátor identity, postupujte podle pokynů v průvodci vytvořením spravované identity nebo získejte příručky pro přihlášení k identitě .
Slouží
az cosmosdb show
k získání jedinečného identifikátoru pro váš aktuální účet.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-resource-group>" \ --query "{id:id}"
Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu
id
vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
Poznámka:
V tomto příkladu
id
by hodnota byla/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.Vytvořte nový soubor JSON s názvem role-assignment.json. Do souboru JSON přidejte jedinečný identifikátor vaší identity a jedinečný identifikátor prostředku účtu.
{ "properties": { "roleDefinitionId": "<account-resource-id>/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "scope": "<account-resource-id>", "principalId": "<id-of-existing-identity>" } }
Poznámka:
V tomto příkladu byl
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4
zadaný jedinečný identifikátor GUID . Jedinečný identifikátor GUID, který jste použili dříve pro vlastní definici role, můžete použít.Teď vytvořte nebo aktualizujte přiřazení role pomocí
az cosmosdb show
aaz rest
společně za účelem vydání požadavku HTTPPUT
. V rámci tohoto požadavku zadejte jedinečný identifikátor GUID pro přiřazení role.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "PUT" \ --url $resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15 \ --body @role-assignment.json
Poznámka:
V tomto příkladu byl
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
zadaný jedinečný identifikátor GUID . Můžete zadat libovolný jedinečný identifikátor GUID pro vlastní přiřazení role.
Vytvořte další soubor Bicep pro přiřazení role k identitě. Pojmenujte tento soubor data-rovina-role-assignment.bicep.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for Table.' @description('Name of the Azure Cosmos DB for Table account.') param accountName string @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource account 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/tableRoleAssignments@2023-04-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output id string = assignment.id
Vytvořte nový soubor parametrů Bicep s názvem
data-plane-role-assignment.bicepparam
. V tomto souboru parametrů; přiřaďte k parametru název existujícího účtuaccountName
služby Azure Cosmos DB for Table, dříve zaznamenané identifikátoryroleDefinitionId
definic rolí parametru a jedinečný identifikátor vaší identity k parametruidentityId
.using './data-plane-role-assignment.bicep' param accountName = '<name-of-existing-table-account>' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Nasaďte tuto šablonu Bicep pomocí
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
Pokud chcete udělit přístup k účtu z jiných identit, které chcete použít, opakujte tyto kroky.
Tip
Tento postup můžete opakovat pro tolik identit, kolik chcete. Tyto kroky se obvykle opakují, aby vývojáři měli přístup k účtu pomocí své lidské identity a povolili aplikacím přístup pomocí spravované identity.
Pomocí rutiny Get-AzCosmosDBAccount získejte jedinečný identifikátor vašeho aktuálního účtu.
$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu
Id
vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Poznámka:
V tomto příkladu
Id
by hodnota byla/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.Teď vytvořte nebo aktualizujte přiřazení role pomocí
Get-AzCosmosDBAccount
aInvoke-AzRestMethod
společně za účelem vydání požadavku HTTPPUT
. V rámci tohoto požadavku zadejte jedinečný identifikátor GUID pro přiřazení role. Nakonec vytvořte datovou část přiřazení zdroje, která určuje jedinečný identifikátor vaší identity.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $payload = @{ properties = @{ roleDefinitionId = "$resourceId/tableRoleDefinitions/00000000-0000-0000-0000-000000000002" scope = "$resourceId" principalId = "<id-of-existing-identity>" } } $parameters = @{ Path = "$resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15" Method = "PUT" Payload = $payload | ConvertTo-Json -Depth 2 } Invoke-AzRestMethod @parameters
Poznámka:
V tomto příkladu byl
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
zadaný jedinečný identifikátor GUID . Můžete zadat libovolný jedinečný identifikátor GUID pro vlastní přiřazení role.
Ověření přístupu k rovině dat v kódu
Nakonec ověřte, že jste správně udělili přístup pomocí kódu aplikace a sady Azure SDK ve vašem preferovaném programovacím jazyce.
using Azure.Identity;
using Azure.Data.Tables;
string endpoint = "<account-endpoint>";
DefaultAzureCredential credential = new();
TableServiceClient client = new(
endpoint: new Uri(endpoint),
tokenCredential: credential
);
TableClient table = client.GetTableClient(
tableName: "<name-of-table>"
);
Důležité
Tento vzorový kód používá knihovny Azure.Data.Tables
z Azure.Identity
NuGetu.
Upozorňující
Pokud používáte spravovanou identitu přiřazenou uživatelem, budete muset jako součást vytváření objektu přihlašovacích údajů zadat jedinečný identifikátor spravované identity.