Criar um diretor de serviço Azure com o Azure CLI
As ferramentas automatizadas que utilizam serviços do Azure devem ter sempre permissões restritas. Em vez de obrigar as aplicações a iniciarem sessão como um utilizador com privilégios máximos, o Azure disponibiliza principais de serviço.
O que é um diretor de serviço Azure?
Um principal de serviço do Azure é uma identidade criada para ser utilizada com aplicações, serviços alojados e ferramentas automatizadas para aceder aos recursos do Azure. Este acesso é restringido pelas funções atribuídas ao principal de serviço, o que lhe permite assumir o controlo dos recursos que podem ser acedidos e em que nível. Por motivos de segurança, é sempre recomendado utilizar os principais de serviço com ferramentas automatizadas, em vez de permitir que iniciem sessão com uma identidade de utilizador.
Este artigo mostra-lhe os passos para criar, obter informações e repor um diretor de serviço Azure com o Azure CLI.
1. Criar um chefe de serviço
Crie um diretor de serviço Azure com o comando ad sp create-for-rbac .
As appId
teclas e tenant
as teclas aparecem na saída de e são utilizadas na autenticação principal de az ad sp create-for-rbac
serviço. Registem os seus valores, mas podem ser recuperados a qualquer momento com a lista de anúncios da AZ Sp.
Quando cria um principal de serviço, escolhe o tipo de autenticação de início de sessão que o mesmo utiliza. Existem dois tipos de autenticação disponíveis para os principados do serviço Azure: autenticação baseada em palavra-passe e autenticação baseada em certificados.
Aviso
Quando cria um principal de serviço Azure usando o az ad sp create-for-rbac
comando, a saída inclui credenciais que deve proteger. Certifique-se de que não inclui estas credenciais no seu código nem regista as credenciais no seu controlo de código fonte. Como alternativa, considere usar identidades geridas se disponível para evitar a necessidade de usar credenciais.
Para reduzir o risco de um principal de serviço comprometido, atribua uma função mais específica e reduza os âmbitos a um grupo de recursos ou recursos. Veja os Passos para adicionar uma atribuição de função para obter mais informações.
Autenticação baseada em palavra-passe
Com a autenticação baseada em palavras-passe, é criada uma senha aleatória para si. Se não especificar um --name
valor de parâmetro, será criado um nome que contenha uma marca de tempo para si. Tem de especificar uma como --scopes
este valor não tem um padrão. Se preferir, pode definir a tarefa de função mais tarde, utilizando a az role assignment create.
# Create a service principal with required parameter
az ad sp create-for-rbac --scopes /subscriptions/mySubscriptionID
# Create a service principal for a resource group using a preferred name and role
az ad sp create-for-rbac --name myServicePrincipalName \
--role reader \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
Também pode criar um principal de serviço usando variáveis.
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id -o tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"
echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup
A saída para um principal de serviço com autenticação de senha inclui a password
chave. Certifique-se de copiar este valor - não pode ser recuperado. Se perder a palavra-passe, reponha as credenciais do principal de serviço.
Autenticação baseada em certificado
Para autenticação baseada em certificado, utilize o --cert
parâmetro. Este parâmetro requer que possua um certificado existente. Certifique-se de que qualquer ferramenta que utilize este principal serviço tenha acesso à chave privada do certificado. Os certificados devem estar num formato ASCII, como PEM, CER ou DER. Passe o certificado como uma corda, ou use o @path
formato para carregar o certificado a partir de um ficheiro.
Nota
Ao utilizar um ficheiro PEM, o CERTIFICADO deve ser anexado à CHAVE PRIVADA dentro do ficheiro.
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--cert @/path/to/cert.pem
O --keyvault
parâmetro pode ser adicionado para usar um certificado em Azure Key Vault. Neste caso, o --cert
valor é o nome do certificado.
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--cert certificateName \
--keyvault vaultName
Para criar um certificado auto-assinado para autenticação, utilize o --create-cert
parâmetro:
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--create-cert
Saída da consola:
Creating a role assignment under the scopes of "/subscriptions/myId"
Please copy C:\myPath\myNewFile.pem to a safe place.
When you run 'az login', provide the file path in the --password parameter
{
"appId": "myAppId",
"displayName": "myDisplayName",
"fileWithCertAndPrivateKey": "C:\\myPath\\myNewFile.pem",
"name": "http://myName",
"password": null,
"tenant": "myTenantId"
}
Conteúdo do novo ficheiro PEM:
-----BEGIN PRIVATE KEY-----
myPrivateKeyValue
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
myCertificateValue
-----END CERTIFICATE-----
Nota
O az ad sp create-for-rbac --create-cert
comando cria o principal de serviço e um ficheiro PEM. O ficheiro PEM contém uma chave e certificadoPRIVADOs corretamente formatados.
O --keyvault
parâmetro pode ser adicionado para armazenar o certificado em Azure Key Vault. Durante a utilização--keyvault
, é necessário o --cert
parâmetro.
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--create-cert \
--cert certificateName \
--keyvault vaultName
A menos que guarde o certificado em Key Vault, a saída inclui a fileWithCertAndPrivateKey
chave. O valor desta chave indica onde o certificado gerado está armazenado.
Certifique-se de que copia o certificado para um local seguro, ou não pode entrar com este diretor de serviço.
Se perder o acesso à chave privada de um certificado, reponha as credenciais principais do serviço.
Obter certificado de Key Vault
Para certificados armazenados em Key Vault, recupere o certificado com a sua chave privada com a az keyvault secret show e converta-o num ficheiro PEM. No Key Vault, o nome do segredo do certificado é o mesmo que o nome do certificado.
az keyvault secret download --file /path/to/cert.pfx --vault-name VaultName --name CertName --encoding base64
openssl pkcs12 -in cert.pfx -passin pass: -out cert.pem -nodes
2. Obter um diretor de serviço existente
Uma lista dos diretores de serviço de um inquilino pode ser recuperada com lista de anúncios da AZ Sp. Por defeito, este comando devolve os primeiros 100 principais de serviço para o seu inquilino. Para obter todos os diretores de serviço de um inquilino, use o --all
parâmetro. Conseguir esta lista pode demorar muito tempo, por isso é recomendável filtrar a lista com um dos seguintes parâmetros:
--display-name
solicita os principais de serviço que têm um prefixo que corresponde ao nome fornecido. O nome de exibição de um principal de serviço é o valor definido com o parâmetro durante a--name
criação. Se não definiu--name
durante a criação principal do serviço, o prefixo do nome éazure-cli-
.--spn
filtros no nome principal de serviço exato que combinam. O nome principal do serviço começa sempre comhttps://
. se o valor utilizado--name
não foi um URI, este valor éhttps://
seguido pelo nome de exibição.--show-mine
solicita apenas os principais de serviço criados pelo utilizador inscrito.--filter
toma um filtro OData e executa a filtragem do lado do servidor . Este método é recomendado sobre a filtragem do lado do cliente com o parâmetro do--query
CLI. Para saber mais sobre os filtros OData, consulte a sintaxe da expressão OData para obter filtros.
A informação devolvida para objetos principais de serviço é verbosa. Para obter apenas as informações necessárias para o iniciar sismo, utilize a cadeia [].{id:appId, tenant:appOwnerTenantId}
de consulta . Por exemplo, para obter a informação de inscrição para todos os principais de serviço criados pelo utilizador atualmente iniciado:
az ad sp list --show-mine --query "[].{id:appId, tenant:appOwnerTenantId}"
Importante
az ad sp list
ou az ad sp show obter o utilizador e inquilino, mas não quaisquer segredos de autenticação ou o método de autenticação.
Segredos para certificados em Key Vault podem ser recuperados com um show secreto az keyvault, mas nenhum outro segredo é armazenado por padrão.
Se esquecer um método de autenticação ou segredo, reponha as credenciais principais do serviço.
3. Gerir as funções principais do serviço
O Azure CLI tem os seguintes comandos para gerir atribuições de funções:
A função Colaboradora tem permissões completas para ler e escrever numa conta Azure. A função Leitor é mais restritiva, com acesso só de leitura. Para obter mais informações sobre o Controlo de Acesso Baseado em Funções (RBAC) e as funções, veja RBAC: Funções incorporadas.
Este exemplo adiciona a função Reader e remove a função de Contribuinte :
az role assignment create --assignee appID \
--role Reader \
--scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
az role assignment delete --assignee appID \
--role Contributor \
--scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
Adicionar uma função não restringe as permissões atribuídas anteriormente. Ao restringir as permissões do principiante de serviço, a função do Contribuinte deve ser removida se for previamente atribuída.
As alterações podem ser verificadas ao listar as funções atribuídas:
az role assignment list --assignee appID
4. Inscreva-se na utilização de um chefe de serviço
Teste as credenciais e permissões do novo principal de serviço iniciando sessão. Para entrar com um diretor de serviço, precisa do appId
, tenant
e credenciais.
Para iniciar sessão com um principal de serviço através de uma palavra-passe:
az login --service-principal --username appID --password PASSWORD --tenant tenantID
Para iniciar sação com um certificado, deve estar disponível localmente como ficheiro PEM ou DER, em formato ASCII. Ao utilizar um ficheiro PEM, a CHAVE PRIVADA e o Certificado devem ser anexados dentro do ficheiro.
az login --service-principal --username appID --tenant tenantID --password /path/to/cert
Para saber mais sobre a inscrição com um diretor de serviço, consulte Iniciar sessão com o CLI Azure.
5. Criar um recurso utilizando o principal do serviço
A secção seguinte fornece um exemplo de como criar um recurso para o Azure Storage com um principal serviço, utilizando os seguintes comandos:
Para iniciar sômssin com um diretor de serviço, precisa do appID
, tenantID
e password
devolvido como resposta quando criou o seu principal serviço.
Faça o login como diretor de serviço.
az login --service-principal --username appID --password PASSWORD --tenant tenantID
Crie um grupo de recursos para manter todos os recursos utilizados para o mesmo quickstart, tutorial ou projeto de desenvolvimento.
az group create --location westus --name myResourceGroupName
Criar uma conta de armazenamento.
Para o armazenamento Azure, os valores válidos para o
<KIND>
parâmetro são:- BlobStorage
- BlockBlobStorage
- Arquiteia
- Armazenamento
- StorageV2
az storage account create --name myStorageAccountName --resource-group myResourceGroupName --kind <KIND> --sku F0 --location westus --yes
Obtenha chaves de recursos, que utiliza no seu código para autenticar na conta de armazenamento Azure.
az storage account keys list --name myStorageAccountName --resource-group myResourceGroupName
6. Redefinir credenciais
Se perder as credenciais para um diretor de serviço, use o reset credencial ad sp. O comando reset tem os mesmos parâmetros que az ad sp create-for-rbac
.
az ad sp credential reset --name myServicePrincipal_appID_or_name
7. Resolução de problemas
Privilégios insuficientes
Se a sua conta não tiver permissão para criar um principal de serviço, az ad sp create-for-rbac
devolverá uma mensagem de erro contendo "Privilégios insuficientes para completar a operação". Contacte o seu administrador Azure Ative Directory para criar um diretor de serviço.
Inquilino inválido
Se especificou um ID de subscrição inválido, vê a mensagem de erro "O pedido não tinha uma subscrição ou um fornecedor de recursos de nível de inquilino válido." Se utilizar variáveis, utilize o comando Bash echo
para ver o valor a ser passado para o comando de referência. Utilize a conta az definida para alterar a sua subscrição ou aprenda como gerir as subscrições do Azure com o Azure CLI.
Grupo de recursos não encontrado
Se tiver especificado um nome de grupo de recursos inválido, vê a mensagem de erro "O nome do grupo de recursos" não foi encontrada." Se utilizar variáveis, utilize o comando Bash echo
para ver o valor a ser passado tanto para os comandos de subscrição como para os comandos de referência. Use a lista de grupos az para ver os grupos de recursos para a subscrição atual, ou aprenda como gerir grupos de recursos Azure com o Azure CLI.
Autorização para realizar ações
Se a sua conta não tiver permissão para atribuir uma função, ser-lhe-á apresentada uma mensagem de erro com a indicação de que a sua conta "não tem autorização para realizar a ação 'Microsoft.Authorization/roleAssignments/write'". Contacte o administrador do Azure Active Directory para gerir funções.