Použití instančního objektu Azure s ověřováním na základě certifikátů
Při vytváření instančního objektu zvolíte typ ověřování při přihlašování, který bude používat. Pro instanční objekty Azure jsou k dispozici dva typy ověřování: ověřování založené na heslech a ověřování na základě certifikátů.
Kvůli omezením zabezpečení ověřování založeného na heslech doporučujeme používat ověřování založené na certifikátech. Ověřování na základě certifikátů umožňuje přijmout ověřování odolné proti útokům phishing pomocí zásad podmíněného přístupu, které lépe chrání prostředky Azure. Další informace o tom, proč je ověřování založené na certifikátech bezpečnější, najdete v tématu Ověřování založené na certifikátu Microsoft Entra.
Tento krok v tomto kurzu vysvětluje, jak použít certifikát instančního objektu pro přístup k prostředku Azure.
Vytvoření instančního objektu obsahujícího nový certifikát
K vytvoření certifikátu podepsaného svým držitelem pro ověřování použijte --create-cert
parametr:
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--create-cert
Výstup konzoly:
{
"appId": "myServicePrincipalID",
"displayName": "myServicePrincipalName",
"fileWithCertAndPrivateKey": "certFilePath\certFileName.pem",
"password": null,
"tenant": "myOrganizationTenantID"
}
Pokud certifikát neukládáte ve službě Key Vault, výstup obsahuje fileWithCertAndPrivateKey
tento klíč. Hodnota tohoto klíče vám řekne, kde je uložený vygenerovaný certifikát. Zkopírujte certifikát do zabezpečeného umístění. Certifikát obsahuje privátní klíč a veřejný certifikát, ve které lze použít az login
. Pokud ztratíte přístup k privátnímu klíči certifikátu, resetujte přihlašovací údaje instančního objektu.
Obsah souboru PEM lze zobrazit pomocí textového editoru. Tady je příklad souboru PEM:
-----BEGIN PRIVATE KEY-----
MIIEvQ...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
Vytvoření instančního objektu pomocí existujícího certifikátu
Pomocí parametru --cert
vytvořte instanční objekt s existujícím certifikátem. Každý nástroj, který používá tento instanční objekt, musí mít přístup k privátnímu klíči certifikátu. Certifikáty by měly být ve formátu ASCII, jako je PEM, CER nebo DER. Předejte certifikát jako řetězec nebo použijte @path
formát k načtení certifikátu ze souboru. Při nahrávání certifikátu je potřeba jenom veřejný certifikát. Pro zajištění optimálního zabezpečení nezahrnujte privátní klíč. Řádky -----BEGIN CERTIFICATE-----
a -----END CERTIFICATE-----
řádky jsou volitelné.
# 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
Tady je příklad souboru PEM pro nahrání:
-----BEGIN CERTIFICATE-----
MIICoT...
-----END CERTIFICATE-----
Práce se službou Azure Key Vault
Parametr --keyvault
je možné přidat k vytvoření nebo načtení certifikátů ve službě Azure Key Vault. Při použití parametru --keyvault
--cert
se také vyžaduje parametr. V tomto příkladu --cert
je hodnota název certifikátu.
# 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
Načtení certifikátu ze služby Azure Key Vault
Pro certifikát uložený ve službě Azure Key Vault načtěte certifikát s jeho privátním klíčem pomocí příkazu az keyvault secret show a převeďte ho na soubor PEM. Ve službě Azure Key Vault je název tajného klíče certifikátu stejný jako název certifikátu.
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
Převod existujícího souboru PKCS12
Pokud už máte soubor PKCS#12, můžete ho převést na formát PEM pomocí OpenSSL. Pokud máte heslo, změňte passin
argument.
openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass: -passout pass:
Připojení certifikátu k instančnímu objektu
Pomocí parametru --append
az ad sp credential reset připojte certifikát k existujícímu instančnímu objektu.
Ve výchozím nastavení tento příkaz vymaže všechna hesla a klíče, takže ho používejte pečlivě.
az ad sp credential reset --id myServicePrincipalID \
--append \
--cert @/path/to/cert.pem
Výstup konzoly:
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"
}
Přihlášení pomocí instančního objektu pomocí certifikátu
Pokud se chcete přihlásit pomocí certifikátu, musí být certifikát k dispozici místně jako soubor PEM nebo DER ve formátu ASCII. Soubory PKCS#12 (.p12/.pfx) nefungují. Při použití souboru PEM musí být privátní klíč a CERTIFIKÁT připojeny společně v rámci souboru. Cestu nemusíte předponovat stejně @
jako ostatní příkazy az.
az login --service-principal --username APP_ID --certificate /path/to/cert.pem --tenant TENANT_ID
Další kroky
Teď, když jste se naučili pracovat s instančními objekty pomocí certifikátu, přejděte k dalšímu kroku a zjistěte, jak načíst existující instanční objekt.