Compartilhar via


Usar uma entidade de serviço do Azure com autenticação baseada em certificado

Ao criar uma entidade de serviço, você pode escolher o tipo de autenticação de entrada usada. Há dois tipos de autenticação disponíveis para as entidades de serviço do Azure: a autenticação baseada em senha e a autenticação baseada em certificado.

Recomendamos utilizar a autenticação baseada em certificado devido às restrições de segurança da autenticação baseada em senha. A autenticação baseada em certificado permite que você adote uma autenticação resistente a phishing utilizando políticas de acesso condicional, o que protege melhor os recursos do Azure. Para obter mais informações sobre por que a autenticação baseada em certificado é mais segura, consulte Autenticação baseada em certificado do Microsoft Entra.

Essa etapa do tutorial explica como usar um certificado de entidade de serviço para acessar um recurso do Azure.

Criar uma entidade de serviço contendo um novo certificado

Para criar um certificado autoassinado para autenticação, use o parâmetro --create-cert:

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert

Saída do console:

{
  "appId": "myServicePrincipalID",
  "displayName": "myServicePrincipalName",
  "fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

A menos que você armazene o certificado no cofre de chaves, a saída incluirá a chave fileWithCertAndPrivateKey. O valor dessa chave informa onde o certificado gerado é armazenado. Copie o certificado para um local seguro. O certificado contém a chave privada e o certificado público que podem ser usados no az login. Se você perder o acesso à chave privada de um certificado, redefina as credenciais da entidade de serviço.

O conteúdo de um arquivo PEM pode ser exibido com um editor de texto. Aqui está um exemplo de arquivo PEM:

-----BEGIN PRIVATE KEY-----
MIIEvQ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----

Criar uma entidade de serviço usando um certificado existente

Crie uma entidade de serviço com um certificado existente usando o parâmetro --cert. Qualquer ferramenta que usa essa entidade de serviço precisa ter acesso à chave privada do certificado. Os certificados devem estar no formato ASCII, como PEM, CER ou DER. Transmita o certificado como uma cadeia de caracteres ou use o formato @path para carregar o certificado de um arquivo. Ao carregar um certificado, somente o certificado público é necessário. Para segurança ideal, não inclua a chave privada. As -----BEGIN CERTIFICATE----- linhas e -----END CERTIFICATE----- são opcionais.

# create a service principal with the certificate as a string
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "MIICoT..."

# or provide -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----"
# create a service principal with the certificate file location
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Aqui está um exemplo de arquivo PEM para upload:

-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----

Trabalhar com o Azure Key Vault

O parâmetro --keyvault pode ser adicionado para criar ou recuperar certificados no Azure Key Vault. Quando você usa o parâmetro --keyvault, o parâmetro --cert é obrigatório. Neste exemplo, o valor --cert é o nome do certificado.

# Create a service principal storing the certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert \
                         --cert myCertificateName \
                         --keyvault myVaultName
# Create a service principal using an existing certificate in Azure Key Vault
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert myCertificateName \
                         --keyvault myVaultName

Recuperar um certificado do Azure Key Vault

Para um certificado armazenado no Azure Key Vault, recupere o certificado com sua chave privada com az keyvault secret show e converta-o em um arquivo PEM. No Azure 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: -passout pass: -out cert.pem -nodes

Converter um arquivo PKCS12 existente

Se você já tiver um arquivo PKCS nº 12, poderá convertê-lo no formato PEM usando OpenSSL. Se você tiver uma senha, altere o passin argumento .

openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass: -passout pass:

Acrescentar um certificado a uma entidade de serviço

Use o parâmetro --append em az ad sp credencial reset para adicionar um certificado a uma entidade de serviço existente. Por padrão, esse comando limpa todas as senhas e chaves, portanto, use com cuidado.

az ad sp credential reset --id myServicePrincipalID \
                          --append \
                          --cert @/path/to/cert.pem

Saída do console:

Certificate expires yyyy-mm-dd hh:mm:ss+00:00. Adjusting key credential end date to match.
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
{
  "appId": "myServicePrincipalID",
  "password": null,
  "tenant": "myOrganizationTenantID"
}

Entrar com uma entidade de serviço usando um certificado

Para entrar com um certificado, ele precisa estar disponível localmente como um arquivo PEM ou DER, no formato ASCII. Os arquivos PKCS nº 12 (.p12/.pfx) não funcionam. Quando você usa um arquivo PEM, a CHAVE PRIVADA e o CERTIFICADO precisam ser anexados juntos dentro do arquivo. Você não precisa prefixar o caminho com um @ como você faz com os comandos az.

az login --service-principal --username APP_ID --certificate /path/to/cert.pem --tenant TENANT_ID

Próximas etapas

Agora que você aprendeu a trabalhar com entidades de serviço usando um certificado, prossiga para a próxima etapa para saber como recuperar uma entidade de serviço existente.