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í. 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:

Screenshot of PEM file

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 certi897ficate jako řetězec nebo použijte @path formát k načtení certifikátu ze souboru.

Pokud používáte soubor PEM, musí být certifikát připojený k privátnímu klíči v souboru.

# 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

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: -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:

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 myServicePrincipalID \
         --tenant myOwnerOrganizationId \
         --password /path/to/cert

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.