Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
APLICA-SE A: NoSQL
Este artigo descreve as etapas para conceder acesso a uma identidade para gerenciar uma conta do Azure Cosmos DB para NoSQL e seus recursos.
Importante
As etapas neste artigo abrangem apenas o acesso do plano de controle para executar operações na própria conta de quaisquer recursos na hierarquia da conta. Para saber como gerenciar itens e executar consultas para o plano de dados, consulte Conceder acesso baseado em função do plano de dados.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Uma conta existente do Azure Cosmos DB.
- Uma ou mais identidades existentes no Microsoft Entra ID.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Introdução ao Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a usar Windows ou macOS, considere executar o Azure CLI num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão do Azure CLI na primeira utilização. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
- Se você optar por usar o Azure PowerShell localmente:
- Instale a versão mais recente do módulo Az PowerShell.
- Conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount .
- Se você optar por usar o Azure Cloud Shell:
- Consulte Visão geral do Azure Cloud Shell para obter mais informações.
Preparar a definição de função
Primeiro, deves preparar uma definição de função com uma lista de actions
para conceder acesso à gestão de recursos de conta no Azure Cosmos DB.
Liste todas as definições de função associadas à sua conta do Azure Cosmos DB usando az role definition list
. Revise a saída e localize a definição de função chamada Operador do Cosmos DB. A saída contém na propriedade id
o identificador exclusivo da definição de função. Registre esse valor conforme ele é necessário usar na etapa de atribuição mais adiante neste guia.
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",
}
]
Observação
Neste exemplo, o id
valor seria /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
. Este exemplo usa dados fictícios e seu identificador seria diferente deste exemplo. No entanto, o identificador (230815da-be43-4aae-9cb4-875f7bd000aa
) é globalmente exclusivo em todas as definições de função no Azure.
Entre no portal do Azure (https://portal.azure.com).
Insira Grupo de recursos na barra de pesquisa global.
Em Serviços, selecione Grupos de recursos.
No painel Grupos de recursos , selecione o grupo de recursos existente.
Observação
Este exemplo de captura de tela inclui o
msdocs-identity-example
grupo de recursos. O nome real do grupo de recursos pode ser diferente.No painel do grupo de recursos, selecione Controle de acesso (IAM) no menu de serviço.
No painel Controle de acesso (IAM), selecione Funções.
Na seção Funções , use a frase de pesquisa Cosmos DB e localize a definição da função Operador do Cosmos DB . Em seguida, selecione a opção Exibir associada a essa definição.
Na caixa de diálogo de configuração do Operador do Cosmos DB, observe as ações atribuídas como parte desta definição de função.
Feche a caixa de diálogo de definição de função do Operador do Cosmos DB .
Use Get-AzRoleDefinition
para listar todas as definições de função associadas à sua conta do Azure Cosmos DB. Revise a saída e localize a definição de função chamada Colaborador de Dados Interno do Cosmos DB. A saída contém na propriedade Id
o identificador exclusivo da definição de função. Registre esse valor conforme ele é necessário usar na etapa de atribuição mais adiante neste guia.
$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 : {/}
Observação
Neste exemplo, o Id
valor seria 230815da-be43-4aae-9cb4-875f7bd000aa
. O identificador é globalmente exclusivo em todas as definições de função no Azure.
Atribuir papel à identidade
Agora, atribua a função recém-definida a uma identidade para que seus aplicativos possam acessar recursos no Azure Cosmos DB.
Importante
Esta tarefa exige que você já tenha o identificador exclusivo de qualquer identidade a que deseje conceder permissões de controle de acesso baseadas em função.
Use
az group show
para obter os metadados para seu grupo de recursos atual novamente.az group show \ --name "<name-of-existing-resource-group>"
Observe a saída do comando anterior. Registe o valor da propriedade
id
para este grupo de recursos, pois é necessário usá-lo na próxima etapa.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Observação
Neste exemplo, o
id
valor seria/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
. Este exemplo usa dados fictícios e seu identificador seria diferente deste exemplo. Este é um exemplo truncado da saída.Atribua a nova função usando
az role assignment create
. Use o identificador do seu grupo de recursos para o--scope
argumento, o identificador da função para o-role
argumento e o identificador exclusivo para sua identidade para o--assignee
argumento.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"
Observação
Neste comando de exemplo, o
scope
foi definido como o exemplo/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
fictício do exemplo da etapa anterior. O identificador do seu grupo de recursos seria distinto deste exemplo. Orole
também foi ajustado para o fictício/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Novamente, seu identificador de função seria distinto.Observe a saída do comando. A saída inclui um identificador exclusivo para a atribuição na propriedade
id
.{ "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" }
Observação
Neste exemplo, a
id
propriedade, que é/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
, é outro exemplo fictício.Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.
Sugestão
Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.
Crie um novo arquivo Bicep para definir sua atribuição de função. Nomeie o arquivo 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 } }
Crie um novo ficheiro de parâmetros do Bicep chamado control-plane-role-assignment.
bicepparam
. Neste arquivo de parâmetros; Atribua os identificadores de definição de função registrados anteriormente aoroleDefinitionId
parâmetro e o identificador exclusivo de sua identidade aoidentityId
parâmetro.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Implante este modelo Bicep usando
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
Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.
Sugestão
Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.
No painel Controle de acesso (IAM), selecione Adicionar e, em seguida, Adicionar atribuição de função.
No painel Função , procure
Azure Cosmos DB
e selecione a função Proprietário do Plano de Controle do Azure Cosmos DB criada anteriormente neste guia. Em seguida, selecione Avançar.Sugestão
Opcionalmente, você pode filtrar a lista de funções para incluir apenas funções personalizadas.
No painel Membros , selecione a opção Selecionar membros . Na caixa de diálogo membros, selecione a identidade que você deseja conceder esse nível de acesso para sua conta do Azure Cosmos DB e use a opção Selecionar para confirmar sua escolha.
Observação
Esta captura de ecrã ilustra um utilizador de exemplo chamado "Kai Carter" com um principal de
kai@adventure-works.com
.De volta ao painel Membros , revise o(s) membro(s) selecionado(s) e selecione Revisar + atribuir.
No painel de Revisão e Atribuição, reveja as opções especificadas para a nova designação de função. Por fim, selecione Rever + atribuir.
Aguarde até que o portal termine de criar a atribuição de função.
Atribua a nova função usando
New-AzRoleAssignment
. Use o nome da função para oRoleDefinitionName
parâmetro e o identificador exclusivo para sua identidade para oObjectId
parâmetro.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Observe a saída do comando. A saída inclui um identificador exclusivo para a atribuição na propriedade
RoleAssignmentId
.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
Observação
Neste exemplo, a
RoleAssignmentId
propriedade, que é/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
, é outro exemplo fictício. Este é um subconjunto da saída típica da implantação para maior clareza.Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.
Sugestão
Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.
Validar o acesso ao plano de controle no código
Por fim, valide se você concedeu acesso corretamente usando o código do aplicativo e o SDK de Gerenciamento do Azure em sua linguagem de programação preferida.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Importante
Este exemplo de código usa as bibliotecas Azure.ResourceManager.CosmosDB
e Azure.Identity
do NuGet.