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

Criar um principal de serviço

Crie um diretor de serviço Azure com o comando ad sp create-for-rbac.

As appId tenant teclas e as teclas aparecem na saída az ad sp create-for-rbac de e são utilizadas na autenticação principal de 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.

Nota

Se a sua conta não tiver permissão para criar um principal de serviço, o cmdlet az ad sp create-for-rbac devolve uma mensagem de erro com a indicação "Privilégios insuficientes para concluir a operação". Contacte o seu administrador do Azure Active Directory para criar um principal de serviço.

Aviso

Quando cria um principal de serviço Azure utilizando 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 estiver disponível para evitar a necessidade de usar credenciais.

Por predefinição, az ad sp create-for-rbac atribui a função de Contribuinte ao principal de serviço no âmbito de subscrição. Para reduzir o risco de um principal de serviço comprometido, atribua uma função mais específica e restrinja o âmbito a um recurso ou grupo de recursos. Veja os Passos para adicionar uma atribuição de função para obter mais informações.

Numa versão futura, az ad sp create-for-rbac NÃO criará uma atribuição de função contributiva por padrão. Se necessário, use o --role argumento para criar explicitamente uma atribuição de papel.

Autenticação baseada em palavra-passe

Na ausência de parâmetros de autenticação, a autenticação baseada em palavra-passe é utilizada e é criada uma palavra-passe aleatória para si.

az ad sp create-for-rbac --name ServicePrincipalName

Importante

A partir do Azure CLI 2.0.68, o --password parâmetro para criar um principal de serviço com uma palavra-passe definida pelo utilizador já não é suportado para impedir o uso acidental de senhas fracas.

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 esquecer a palavra-passe, reponha as credenciais principais do serviço.

Autenticação baseada em certificado

Para autenticação baseada em certificados, utilize o --cert argumento. Este argumento 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 ServicePrincipalName --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name ServicePrincipalName --cert @/path/to/cert.pem

O --keyvault argumento pode ser adicionado para usar um certificado no Cofre da Chave Azure. Neste caso, o --cert valor é o nome do certificado.

az ad sp create-for-rbac --name ServicePrincipalName --cert CertName --keyvault VaultName

Para criar um certificado auto-assinado para autenticação, utilize o --create-cert argumento:

az ad sp create-for-rbac --name ServicePrincipalName --create-cert

Saída da consola:

Creating a role assignment under the scope 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 argument
{
  "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 certificado PRIVADOs corretamente formatados.

O argumento--keyvault pode ser adicionado para armazenar o certificado no Azure Key Vault. Ao --keyvault utilizar, o --cert argumento é necessário.

az ad sp create-for-rbac --name ServicePrincipalName --create-cert --cert CertName --keyvault VaultName

A menos que guarde o certificado no 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.

Certificado de recuperação do Cofre de Chaves

Para certificado armazenado em Key Vault, recupere o certificado com a sua chave privada com um show secreto az keyvault e converta-o num ficheiro PEM. No Cofre-Chave, 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

Obter um principal de serviço existente

Uma lista dos diretores de serviço de um inquilino pode ser recuperada com a lista ad 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 argumento. Conseguir esta lista pode demorar muito tempo, por isso é recomendável que filtra a lista com um dos seguintes argumentos:

  • --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 com https:// . se o valor utilizado --name não fosse um URI, este valor é https:// seguido pelo nome de exibição.
  • --show-mine solicita apenas os principais de serviço criados pelo utilizador inscrito.
  • --filtertoma um filtro OData e executa a filtragem do lado do servidor. Este método é recomendado sobre a filtragem do lado do cliente com o argumento 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 os objetos principais de serviço é verbosa. Para obter apenas as informações necessárias para o iniciar sismo, utilize o fio de consulta [].{id:appId, tenant:appOwnerTenantId} . Por exemplo, para obter a informação de login de 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. Os segredos para certificados em Key Vault podem ser recuperados com um show secreto de 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.

Gerir funções de principais de serviço

O Azure CLI tem os seguintes comandos para gerir atribuições de funções:

A função predefinida dos principais de serviço é Contribuinte. Esta função tem permissões completas para ler e escrever numa conta do 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 Leitor e remove a função Contribuidor:

az role assignment create --assignee APP_ID --role Reader
az role assignment delete --assignee APP_ID --role Contributor

Nota

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.

Adicionar uma função não restringe as permissões atribuídas anteriormente. Quando restringir as permissões de um principal de serviço, a função Contribuidor deve ser removida.

As alterações podem ser verificadas ao listar as funções atribuídas:

az role assignment list --assignee APP_ID

Iniciar sessão com um principal 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 APP_ID --password PASSWORD --tenant TENANT_ID

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 APP_ID --tenant TENANT_ID --password /path/to/cert

Para saber mais sobre a inscrição com um diretor de serviço, consulte Iniciar sessão com o Azure CLI.

Criar um recurso utilizando o principal do serviço

A secção seguinte fornece um exemplo de como criar um recurso para o Azure Armazenamento com um principal de serviço, utilizando os seguintes comandos:

Para iniciar sômssin com um diretor de serviço, precisa do appId , e devolvido como resposta quando criou o seu principal tenant password serviço.

  1. Faça login como diretor de serviço.

    az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID
    
  2. Crie um grupo de recursos para deter todos os recursos utilizados para o mesmo projeto de arranque rápido, tutorial ou desenvolvimento.

    az group create --location WESTUS --name MY_RESOURCE_GROUP
    
  3. Crie um recurso para um serviço Azure. <SERVICENAME>Substitua-o pelo nome do serviço Azure.

    Para a Azure Armazenamento, os valores válidos para o <KIND> parâmetro são:

    • BlobStorage
    • BlockBlobStorage
    • Arquitorage de arquivos
    • Armazenamento
    • StorageV2
    az storage account create --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP --kind <KIND> --sku F0 --location WESTUS --yes
    
  4. Obtenha chaves de recursos para o novo recurso, que utiliza no seu código para autenticar no serviço Azure.

    az storage account keys list --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP
    

Repor credenciais

Se esquecer as credenciais de um diretor de serviço, utilize o reset da credencial ad sp. O comando de reset tem os mesmos argumentos que az ad sp create-for-rbac . .

az ad sp credential reset --name APP_ID

Ver também