Używanie jednostki usługi platformy Azure z uwierzytelnianiem opartym na certyfikatach

Podczas tworzenia jednostki usługi wybierz używany przez nią typ uwierzytelniania logowania. Istnieją dwa typy uwierzytelniania dostępne dla jednostek usługi platformy Azure: uwierzytelnianie oparte na hasłach i uwierzytelnianie oparte na certyfikatach.

Zalecamy używanie uwierzytelniania opartego na certyfikatach ze względu na ograniczenia zabezpieczeń uwierzytelniania opartego na hasłach. Uwierzytelnianie oparte na certyfikatach umożliwia przyjęcie uwierzytelniania odpornego na wyłudzanie informacji przy użyciu zasad dostępu warunkowego, które lepiej chroni zasoby platformy Azure. Aby dowiedzieć się więcej o tym, dlaczego uwierzytelnianie oparte na certyfikatach jest bezpieczniejsze, zobacz Microsoft Entra certificate-based authentication (Uwierzytelnianie oparte na certyfikatach firmy Microsoft).

W tym kroku w samouczku wyjaśniono, jak używać certyfikatu jednostki usługi do uzyskiwania dostępu do zasobu platformy Azure.

Tworzenie jednostki usługi zawierającej nowy certyfikat

Aby utworzyć certyfikat z podpisem własnym do uwierzytelniania, użyj parametru --create-cert :

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

Dane wyjściowe konsoli:

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

Jeśli certyfikat nie zostanie przechowywany w usłudze Key Vault, dane wyjściowe zawierają fileWithCertAndPrivateKey klucz. Wartość tego klucza informuje o tym, gdzie jest przechowywany wygenerowany certyfikat. Skopiuj certyfikat do bezpiecznej lokalizacji. Jeśli utracisz dostęp do klucza prywatnego certyfikatu, zresetuj poświadczenia jednostki usługi.

Zawartość pliku PEM można wyświetlić za pomocą edytora tekstów. Oto przykładowy plik PEM:

Screenshot of PEM file

Tworzenie jednostki usługi przy użyciu istniejącego certyfikatu

Utwórz jednostkę usługi z istniejącym certyfikatem przy użyciu parametru --cert . Każde narzędzie korzystające z tej jednostki usługi musi mieć dostęp do klucza prywatnego certyfikatu. Certyfikaty powinny być w formacie ASCII, takim jak PEM, CER lub DER. Przekaż certyfikat certi897ficate jako ciąg lub użyj @path formatu, aby załadować certyfikat z pliku.

W przypadku korzystania z pliku PEM certyfikat musi zostać dołączony do klucza PRYWATNEGO w pliku.

# 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

Praca z usługą Azure Key Vault

Parametr --keyvault można dodać do tworzenia lub pobierania certyfikatów w usłudze Azure Key Vault. Jeśli używasz parametru --keyvault , --cert parametr jest również wymagany. W tym przykładzie --cert wartość jest nazwą certyfikatu.

# 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

Pobieranie certyfikatu z usługi Azure Key Vault

W przypadku certyfikatu przechowywanego w usłudze Azure Key Vault pobierz certyfikat z jego kluczem prywatnym za pomocą polecenia az keyvault secret show i przekonwertuj go na plik PEM. W usłudze Azure Key Vault nazwa wpisu tajnego certyfikatu jest taka sama jak nazwa certyfikatu.

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

Konwertowanie istniejącego pliku PKCS12

Jeśli masz już plik PKCS#12, możesz przekonwertować go na format PEM przy użyciu biblioteki OpenSSL. Jeśli masz hasło, zmień passin argument.

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

Dołączanie certyfikatu do jednostki usługi

Użyj parametru --append az ad sp credential reset , aby dołączyć certyfikat do istniejącej jednostki usługi. Domyślnie to polecenie czyści wszystkie hasła i klucze, więc należy używać ostrożnie.

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

Dane wyjściowe konsoli:

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

Logowanie się przy użyciu jednostki usługi przy użyciu certyfikatu

Aby zalogować się przy użyciu certyfikatu, certyfikat musi być dostępny lokalnie jako plik PEM lub DER w formacie ASCII. Pliki PKCS#12 (.p12/.pfx) nie działają. W przypadku korzystania z pliku PEM klucz PRYWATNY i CERTYFIKAT muszą być dołączane razem w pliku. Nie musisz prefiksować ścieżki tak @ jak w przypadku innych poleceń az.

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

Następne kroki 

Teraz, gdy wiesz już, jak pracować z jednostkami usługi przy użyciu certyfikatu, przejdź do następnego kroku, aby dowiedzieć się, jak pobrać istniejącą jednostkę usługi.