Sdílet prostřednictvím


Použití řízení přístupu na základě role ve službě Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

Diagram aktuálního umístění (řízení přístupu na základě role) v posloupnosti průvodce nasazením

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, Síť 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 identit ke správě účtu Azure Cosmos DB for NoSQL a jeho prostředků.

Důležité

Kroky v tomto článku se týkají pouze přístupu řídicí roviny k provádění operací na samotném účtu všech prostředků v hierarchii účtu. Informace o tom, jak spravovat položky a spouštět dotazy na rovinu dat, najdete v tématu udělení přístupu na základě role roviny dat.

Požadavky

  • Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
  • Existující účet služby Azure Cosmos DB.
  • Jedna nebo více existujících identit v Microsoft Entra ID.

Příprava definice role

Nejprve musíte připravit definici role se seznamem actions pro udělení přístupu ke správě prostředků účtu ve službě Azure Cosmos DB.

Zobrazí seznam všech definic rolí přidružených k vašemu účtu služby Azure Cosmos DB pomocí az role definition list. 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.

az role definition list \
    --name "Cosmos DB Operator"
[
  {
    "assignableScopes": [
      "/"
    ],
    "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
    "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
    "permissions": [
      {
        "actions": [
          "Microsoft.DocumentDb/databaseAccounts/*",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/deployments/*",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
          "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
          "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Cosmos DB Operator",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
  }
]

Poznámka:

V tomto příkladu id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Identifikátor (230815da-be43-4aae-9cb4-875f7bd000aa) je však globálně jedinečný napříč všemi definicemi rolí v Azure.

  1. Přihlaste se k webu Azure Portal (https://portal.azure.com).

  2. Do globálního panelu hledání zadejte skupinu prostředků.

    Snímek obrazovky globálního vyhledávacího panelu na webu Azure Portal

  3. V rámci služeb vyberte skupiny prostředků.

    Snímek obrazovky s vybranou možností Skupiny prostředků v nabídce hledání

  4. V podokně Skupiny prostředků vyberte existující skupinu prostředků.

    Snímek obrazovky existující skupiny prostředků v seznamu skupin prostředků pro předplatné

    Poznámka:

    Tento ukázkový snímek obrazovky obsahuje msdocs-identity-example skupinu prostředků. Váš skutečný název skupiny prostředků se může lišit.

  5. V podokně skupiny prostředků vyberte v nabídce služby řízení přístupu (IAM ).

    Snímek obrazovky s možností Řízení přístupu (IAM) v nabídce služby pro skupinu prostředků

  6. V podokně Řízení přístupu (IAM) vyberte Role.

    Snímek obrazovky s možností Role v podokně Řízení přístupu (IAM)

  7. V části Role použijte hledanou frázi Cosmos DB a vyhledejte definici role Operátor služby Cosmos DB. Pak vyberte možnost Zobrazit přidruženou k této definici.

    Snímek obrazovky se seznamem definic rolí v aktuálním přiřaditelném oboru, který je filtrovaný tak, aby obsahoval pouze definice se službou Cosmos DB v názvu

  8. V dialogovém okně Definice role operátora služby Cosmos DB sledujte akce přiřazené jako součást této definice role.

    Snímek obrazovky s dialogovým oknem Operátor služby Cosmos DB s podrobnostmi o předdefinované definici role

  9. Zavřete dialogové okno definice role operátora služby Cosmos DB.

Slouží Get-AzRoleDefinition k výpisu všech definic rolí přidružených k vašemu účtu služby 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 = @{
    Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name             : Cosmos DB Operator
Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom         : False
Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

Poznámka:

V tomto příkladu Id by hodnota byla 230815da-be43-4aae-9cb4-875f7bd000aa. Identifikátor je globálně jedinečný napříč všemi definicemi rolí v Azure.

Přiřazení role identitě

Teď přiřaďte nově definovanou roli identitě, aby vaše aplikace mohly přistupovat k prostředkům ve službě Azure Cosmos DB.

Důležité

Tento úkol přiřazení vyžaduje, abyste již měli jedinečný identifikátor jakékoli identity, kterou chcete udělit oprávnění řízení přístupu na základě role.

  1. Slouží az group show k opětovnému získání metadat pro aktuální skupinu prostředků.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu id vlastnosti pro tuto skupinu prostředků, protože je nutné ji použít v dalším kroku.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Poznámka:

    V tomto příkladu id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Toto je zkrácený příklad výstupu.

  3. Přiřaďte novou roli pomocí az role assignment create. Pro argument použijte identifikátor --scope vaší skupiny prostředků, identifikátor role pro -role argument a jedinečný identifikátor vaší identity pro --assignee argument.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Poznámka:

    V tomto ukázkovém příkazu scope byl nastaven na fiktivní příklad /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example z příkladu předchozího kroku. Identifikátor vaší skupiny prostředků by se od tohoto příkladu odlišil. Byla role také nastavena na fiktivní /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Identifikátor vaší role by byl opět odlišný.

  4. Podívejte se na výstup příkazu. Výstup obsahuje jedinečný identifikátor přiřazení ve id vlastnosti.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Poznámka:

    V tomto příkladu id je /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 vlastnost, která je dalším fiktivním příkladem.

  5. 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.

  1. Vytvořte nový soubor Bicep, který definuje přiřazení role. Pojmenujte soubor control-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.'
    
    @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 assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId)
      scope: resourceGroup()
      properties: {
        roleDefinitionId: roleDefinitionId
        principalId: identityId
      }
    }
    
  2. Vytvořte nový soubor parametrů Bicep s názvem control-plane-role-assignment.bicepparam. V tomto souboru parametrů; přiřaďte parametru dříve zaznamenané identifikátory roleDefinitionId definic rolí a jedinečný identifikátor vaší identity k parametru identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Nasaďte tuto šablonu Bicep pomocí az deployment group create.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters control-plane-role-assignment.bicepparam \
        --template-file control-plane-role-assignment.bicep
    
  4. 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.

  1. V podokně Řízení přístupu (IAM) vyberte Přidat a potom přidat přiřazení role.

    Snímek obrazovky s možností Přidat přiřazení role v nabídce Řízení přístupu (IAM) pro možnost Přidat

  2. V podokně Role vyhledejte Azure Cosmos DB a pak vyberte roli Vlastník řídicí roviny služby Azure Cosmos DB, kterou jste vytvořili dříve v této příručce. Pak vyberte Další.

    Snímek obrazovky s podoknem Role pro přidání přiřazení role

    Tip

    Volitelně můžete seznam rolí filtrovat tak, aby zahrnoval pouze vlastní role.

  3. V podokně Členové vyberte možnost Vybrat členy . V dialogovém okně Členové vyberte identitu, kterou chcete udělit této úrovni přístupu k účtu služby Azure Cosmos DB, a pak pomocí možnosti Vybrat potvrďte svou volbu.

    Snímek obrazovky s podoknem Členové pro přidání přiřazení role

    Snímek obrazovky s dialogovým oknem pro výběr identity pro přidání přiřazení role

    Poznámka:

    Tento snímek obrazovky znázorňuje příklad uživatele s názvem Kai Carter s objektem zabezpečení kai@adventure-works.com.

  4. Zpět v podokně Členové zkontrolujte vybrané členy a pak vyberte Zkontrolovat a přiřadit.

    Snímek obrazovky s podoknem Členové s vybranou identitou pro přiřazení role

  5. V podokně Zkontrolovat a přiřadit zkontrolujte zadané možnosti pro nové přiřazení role. Nakonec vyberte Zkontrolovat a přiřadit.

    Snímek obrazovky s podoknem Zkontrolovat a vytvořit pro přiřazení role

  6. Počkejte, až portál dokončí vytvoření přiřazení role.

  1. Přiřaďte novou roli pomocí New-AzRoleAssignment. Použijte název role pro RoleDefinitionName parametr a jedinečný identifikátor vaší identity pro ObjectId parametr.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Podívejte se na výstup příkazu. Výstup obsahuje jedinečný identifikátor přiřazení ve RoleAssignmentId vlastnosti.

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Poznámka:

    V tomto příkladu RoleAssignmentId je /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 vlastnost, která je dalším fiktivním příkladem. Toto je podmnožina typického výstupu nasazení, aby bylo jasné.

  3. 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.

Ověření přístupu k řídicí rovině v kódu

Nakonec ověřte, že jste správně udělili přístup pomocí kódu aplikace a sady Azure Management SDK ve vašem preferovaném programovacím jazyce.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Důležité

Tento vzorový kód používá knihovny Azure.ResourceManager.CosmosDB z Azure.Identity NuGetu.

Další krok