Freigeben über


Verwenden eines Azure-Dienstprinzipals mit zertifikatbasierter Authentifizierung

Beim Erstellen eines Dienstprinzipals wählen Sie den Typ der von ihm verwendeten Anmeldeauthentifizierung aus. Für Azure-Dienstprinzipale sind zwei Arten von Authentifizierung verfügbar: kennwortbasiert und zertifikatbasiert.

Aufgrund der Sicherheitseinschränkungen, die auf die Authentifizierung per Kennwort zutreffen, empfiehlt sich die Verwendung der zertifikatbasierten Authentifizierung. Die zertifikatbasierte Authentifizierung ermöglicht Ihnen, eine phishingsichere Authentifizierung mithilfe von Richtlinien für bedingten Zugriff umzusetzen, wodurch die Azure-Ressourcen besser geschützt werden. Weitere Informationen dazu, warum die zertifikatbasierte Authentifizierung sicherer ist, finden Sie unter Zertifikatbasierte Microsoft Entra-Authentifizierung.

In diesem Schritt des Tutorials wird erläutert, wie Sie ein Dienstprinzipalzertifikat für den Zugriff auf eine Azure-Ressource verwenden.

Erstellen eines Dienstprinzipals mit einem neuen Zertifikat

Verwenden Sie den Parameter --create-cert, um ein selbstsigniertes Zertifikat für die Authentifizierung zu erstellen:

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

Konsolenausgabe:

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

Die Ausgabe enthält den Schlüssel fileWithCertAndPrivateKey, es sei denn, Sie speichern das Zertifikat in Key Vault. Am Wert dieses Schlüssels können Sie erkennen, wo das generierte Zertifikat gespeichert ist. Kopieren Sie das Zertifikat an einen sicheren Speicherort. Wenn Sie keinen Zugriff mehr auf den privaten Schlüssel des Zertifikats haben, setzen Sie die Anmeldeinformationen des Dienstprinzipals zurück.

Der Inhalt einer PEM-Datei kann mit einem Text-Editor angezeigt werden. Dies ist ein Beispiel für eine PEM-Datei:

Screenshot der PEM-Datei

Erstellen eines Dienstprinzipals mithilfe eines vorhandenen Zertifikats

Erstellen Sie einen Dienstprinzipal mit einem vorhandenen Zertifikat mithilfe des --cert-Parameters. Jedes Tool, das diesen Dienstprinzipal verwendet, muss Zugriff auf den privaten Schlüssel des Zertifikats haben. Zertifikate müssen in einem ASCII-Format vorliegen, etwa PEM, CER oder DER. Übergeben Sie das Zertifikat certi897ficate als Zeichenfolge, oder verwenden Sie das Format @path, um das Zertifikat aus einer Datei zu laden.

Bei Verwendung einer PEM-Datei muss das Zertifikat (CERTIFICATE) an den privaten Schlüssel (PRIVATE KEY) in der Datei angefügt werden.

# 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 "-----BEGIN CERTIFICATE-----
...
-----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

Arbeiten mit Azure Key Vault

Der --keyvault-Parameter kann hinzugefügt werden, um Zertifikate in Azure Key Vault zu erstellen oder abzurufen. Wenn Sie den Parameter --keyvault verwenden, ist auch der Parameter --cert erforderlich. In diesem Beispiel ist der --cert-Wert der Name des Zertifikats.

# 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

Festlegen und Abrufen eines Zertifikats aus Azure Key Vault

Rufen Sie für ein in Azure Key Vault gespeichertes Zertifikat das Zertifikat mit seinem privaten Schlüssel mithilfe von az keyvault secret show ab, und konvertieren Sie es in eine PEM-Datei. In Azure Key Vault ist der Name des Zertifikatgeheimnisses mit dem Zertifikatnamen identisch.

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

az login --service-principal -u "<myAppClientID>" -p cert.pem --tenant "<myTenantID>"

Konvertieren einer vorhandenen PKCS12-Datei

Wenn Sie bereits über eine PKCS#12-Datei verfügen, können Sie diese mithilfe von OpenSSL in das PEM-Format konvertieren. Wenn Sie über ein Kennwort verfügen, ändern Sie das passin-Argument.

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

Anfügen eines Zertifikats an einen Dienstprinzipal

Verwenden Sie den --append-Parameter in az ad sp credential reset, um ein Zertifikat an einen vorhandenen Dienstprinzipal anzufügen. Standardmäßig löscht dieser Befehl alle Kennwörter und Schlüssel, damit sie sorgfältig verwendet werden.

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

Konsolenausgabe:

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"
}

Anmelden mit einem Dienstprinzipal mithilfe eines Zertifikats

Um sich mit einem Zertifikat anmelden zu können, muss das Zertifikat lokal als PEM- oder DER-Datei im ASCII-Format verfügbar sein. PKCS#12-Dateien (.p12/.pfx) funktionieren nicht. Bei Verwendung einer PEM-Datei müssen der private Schlüssel (PRIVATE KEY) und das Zertifikat (CERTIFICATE) gemeinsam innerhalb der Datei angefügt werden. Sie müssen dem Pfad nicht wie bei den vorherigen Az-Befehlen ein @ voranstellen

az login --service-principal \
         --username myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

Nächste Schritte

Nachdem Sie nun erfahren haben, wie Sie mit Dienstprinzipalen mithilfe eines Zertifikats arbeiten, fahren Sie mit dem nächsten Schritt fort, um zu erfahren, wie Sie einen vorhandenen Dienstprinzipal abrufen.