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:
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: -passout pass: -out cert.pem -nodes
az login --service-principal -u "<myAppClientID>" -p cert.pem --tenant "<myTenantID>"
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: -passout 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.