Partilhar via


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

Quando cria um principal de serviço, escolhe o tipo de autenticação de início de sessão que o mesmo utiliza. Há dois tipos de autenticação disponíveis para entidades de serviço do Azure: autenticação baseada em senha e autenticação baseada em certificado.

Recomendamos o uso da 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 usando políticas de acesso condicional, o que protege melhor os recursos do Azure. Para saber mais sobre por que a autenticação baseada em certificado é mais segura, consulte Autenticação baseada em certificado do Microsoft Entra.

Esta etapa no 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 --create-cert parâmetro:

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 da Chave, a saída inclui a fileWithCertAndPrivateKey chave. O valor dessa chave informa onde o certificado gerado está 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 visualizado 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 --cert parâmetro. Qualquer ferramenta que use essa entidade de serviço deve ter acesso à chave privada do certificado. Os certificados devem estar em um formato ASCII, como PEM, CER ou DER. Passe o certificado como uma cadeia de caracteres ou use o @path formato para carregar o certificado de um arquivo. Ao carregar um certificado, apenas o certificado público é necessário. Para uma segurança ótima, 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 --keyvault parâmetro pode ser adicionado para criar ou recuperar certificados no Cofre de Chaves do Azure. Quando você usa o --keyvault parâmetro, o --cert parâmetro também é necessário. Neste exemplo, o --cert valor é 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 Cofre de Chaves do Azure, recupere o certificado com sua chave privada com az keyvault secret show e converta-o em um arquivo PEM. No Cofre da Chave do Azure, 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á tem um arquivo PKCS#12, você pode convertê-lo para o 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:

Anexar um certificado a uma entidade de serviço

Use o parâmetro na redefinição de --append credenciais az ad sp para acrescentar 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, o certificado deve estar disponível localmente como um arquivo PEM ou DER no formato ASCII. Os ficheiros PKCS#12 (.p12/.pfx) não funcionam. Quando você usa um arquivo PEM, a CHAVE PRIVADA e o CERTIFICADO devem ser anexados juntos dentro do arquivo. Você não precisa prefixar o caminho com um @ como faz com outros comandos az.

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

Passos Seguintes

Agora que você aprendeu como 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.