Vytvoření instančního objektu Azure pomocí Azure CLI

Automatizované nástroje využívající služby Azure by vždy měly mít omezená oprávnění. Azure nabízí instanční objekty, díky kterým se aplikace nemusí přihlašovat jako plně privilegovaný uživatel.

Co je objekt služby Azure?

Instanční objekt Azure je identita vytvořená pro použití v aplikacích, hostovaných službách a automatizovaných nástrojích, kde umožňuje přístup k prostředkům Azure. Tento přístup je omezený rolemi přiřazenými instančnímu objektu, které poskytují kontrolu nad tím, ke kterým prostředkům je možné přistupovat a na jaké úrovni. Z bezpečnostních důvodů se v automatizovaných nástrojích vždy doporučuje používat instanční objekty, a neumožňovat jim připojení pomocí identity uživatele.

Tento článek popisuje kroky pro vytvoření, získání informací o a resetování instančního objektu Azure pomocí Azure CLI.

Vytvoření instančního objektu

Vytvořte instanční objekt Azure pomocí příkazu AZ AD SP Create-for-RBAC .

appIdKlíče a se tenant zobrazí ve výstupu az ad sp create-for-rbac služby a používají se při ověřování instančního objektu. Poznamenejte si jejich hodnoty, ale můžete je kdykoli načíst pomocí příkaz AZ AD SP list.

Při vytváření instančního objektu zvolíte typ ověřování při přihlašování, který bude používat. K dispozici jsou dva typy ověřování pro instanční objekty Azure: ověřování založené na heslech a ověřování na základě certifikátů.

Poznámka

Pokud váš účet nemá oprávnění k vytvoření instančního objektu, rutina az ad sp create-for-rbac vrátí chybovou zprávu s textem Insufficient privileges to complete the operation (Nedostatečná oprávnění k dokončení operace). Požádejte o vytvoření instančního objektu správce vaší služby Azure Active Directory.

Upozornění

Při vytváření instančního objektu Azure pomocí az ad sp create-for-rbac příkazu obsahuje výstup přihlašovací údaje, které musíte chránit. Ujistěte se, že jste tyto přihlašovací údaje nezahrnuli do kódu, nebo je zaregistrujte ve správě zdrojového kódu. Jako alternativu zvažte použití spravovaných identit , pokud je k dispozici, abyste se vyhnuli nutnosti používat přihlašovací údaje.

Doporučujeme použít Contributor pro parametr minimálně --role . Pokud chcete snížit riziko napadení instančního objektu, přiřaďte konkrétnější roli a zužte obor jenom na prostředek nebo skupinu prostředků. Další informace najdete v tématu Kroky pro přidání přiřazení role.

Ověřování pomocí hesla

Pokud nezadáte žádné parametry ověřování, použije se ověřování pomocí hesla a vytvoří se pro vás náhodné heslo.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor

Důležité

V případě Azure CLI 2.0.68 --password už není podporován parametr pro vytvoření instančního objektu s uživatelsky definovaným heslem, aby se zabránilo nechtěnému použití slabého hesla.

Výstup objektu služby s ověřováním hesla zahrnuje password klíč. Nezapomeňte tuto hodnotu zkopírovat – nedá se načíst. Pokud zapomenete heslo, resetujte přihlašovací údaje instančního objektu.

Ověřování pomocí certifikátů

U ověřování založeného na certifikátech použijte --cert argument. Tento argument vyžaduje, abyste si podržíte existující certifikát. Ujistěte se, že všechny nástroje, které používají tento instanční objekt, mají přístup k privátnímu klíči certifikátu. Certifikáty by měly být ve formátu ASCII, například PEM, CER nebo DER. Předejte certifikát jako řetězec, nebo použijte @path formát pro načtení certifikátu ze souboru.

Poznámka

Při použití souboru PEM musí být certifikát připojený k privátnímu klíči v rámci souboru.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert @/path/to/cert.pem

--keyvaultArgument lze přidat k použití certifikátu v Azure Key Vault. V tomto případě --cert je hodnotou název certifikátu.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --cert CertName --keyvault VaultName

Chcete-li vytvořit certifikát podepsaný svým držitelem pro ověřování, použijte --create-cert argument:

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --create-cert

Výstup na konzole:

Creating a role assignment under the scope of "/subscriptions/myId"
Please copy C:\myPath\myNewFile.pem to a safe place.
When you run 'az login', provide the file path in the --password argument
{
  "appId": "myAppId",
  "displayName": "myDisplayName",
  "fileWithCertAndPrivateKey": "C:\\myPath\\myNewFile.pem",
  "name": "http://myName",
  "password": null,
  "tenant": "myTenantId"
}

Obsah nového souboru PEM:

-----BEGIN PRIVATE KEY-----
myPrivateKeyValue
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
myCertificateValue
-----END CERTIFICATE-----

Poznámka

az ad sp create-for-rbac --create-certPříkaz vytvoří instanční objekt a soubor PEM. Soubor PEM obsahuje správně formátovaný privátní klíč a certifikát.

Je možné přidat argument --keyvault, který uloží certifikát do služby Azure Key Vault. Při použití --keyvault --cert je argument požadován.

az ad sp create-for-rbac --name ServicePrincipalName --role Contributor --create-cert --cert CertName --keyvault VaultName

Pokud certifikát neuložíte do Key Vault, obsahuje výstup fileWithCertAndPrivateKey klíč. Hodnota tohoto klíče oznamuje, kde je uložen generovaný certifikát. Ujistěte se, že jste certifikát zkopírovali do zabezpečeného umístění, nebo se k tomuto instančnímu objektu nemůžete přihlásit.

Pokud ztratíte přístup k privátnímu klíči certifikátu, resetujte přihlašovací údaje instančního objektu.

Načíst certifikát z Key Vault

Pro certifikát uložený v Key Vault Načtěte certifikát s jeho privátním klíčem pomocí AZ Key trezor Secret show a převeďte ho na soubor PEM. V 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

Získání existujícího instančního objektu

Seznam instančních objektů v tenantovi se dá načíst pomocí seznamu AZ AD SP list. Ve výchozím nastavení tento příkaz vrátí prvních 100 instančních objektů pro vašeho tenanta. Chcete-li získat všechny instanční objekty klienta, použijte --all argument. Získání tohoto seznamu může trvat dlouhou dobu, proto doporučujeme, abyste seznam vyfiltroval pomocí jednoho z následujících argumentů:

  • --display-name vyžádá instanční objekty, které mají předponu odpovídající zadanému názvu. Zobrazovaným názvem instančního objektu je hodnota nastavená --name parametrem při vytváření. Pokud jste nezadali --name během vytváření instančního objektu, Předpona názvu je azure-cli- .
  • --spn filtruje podle shodného hlavního názvu služby. Hlavní název služby vždy začíná na https:// . Pokud hodnota, kterou jste použili pro nepoužitý --name identifikátor URI, je https:// následována zobrazovaným názvem.
  • --show-mine vyžádá jenom instanční objekty vytvořené přihlášeným uživatelem.
  • --filter převezme filtr OData a provede filtrování na straně serveru . Tato metoda se doporučuje nad filtrováním na straně klienta s --query argumentem CLI. Další informace o filtrech OData najdete v tématu Syntaxe výrazů OData pro filtry.

Informace vrácené pro instanční objekty služby jsou podrobnější. Chcete-li získat pouze informace nezbytné pro přihlášení, použijte řetězec dotazu [].{id:appId, tenant:appOwnerTenantId} . Chcete-li například získat informace o přihlášení pro všechny instanční objekty vytvořené aktuálně přihlášeným uživatelem:

az ad sp list --show-mine --query "[].{id:appId, tenant:appOwnerTenantId}"

Důležité

az ad sp list nebo AZ AD SP show získat uživatele a tenanta, ale ne žádné tajné kódy pro ověřování nebo metodu ověřování. Tajné kódy certifikátů v Key Vault lze načíst pomocí příkaz AZ klíčů trezor tajného zobrazení, ale ve výchozím nastavení nejsou uloženy žádné další tajné kódy. Pokud zapomenete metodu ověřování nebo tajný klíč, resetujte přihlašovací údaje instančního objektu.

Správa rolí instančních objektů

Azure CLI má následující příkazy pro správu přiřazení rolí:

Pro instanční objekt doporučujeme použít roli přispěvatele minimálně. Tato role má v účtu Azure úplná oprávnění ke čtení i zápisu. Role Čtenář je více omezující a poskytuje přístup jen pro čtení. Další informace o řízení přístupu na základě role (RBAC) a rolích najdete v tématu Řízení přístupu na základě role: Předdefinované role.

Tento příklad přidá roli Čtenář a odebere roli Přispěvatel:

az role assignment create --assignee APP_ID --role Reader
az role assignment delete --assignee APP_ID --role Contributor

Poznámka

Pokud váš účet nemá oprávnění k přiřazení role, zobrazí se chybová zpráva oznamující, že váš účet nemá oprávnění k provedení akce Microsoft.Authorization/roleAssignments/write. Požádejte o správu rolí správce vaší služby Azure Active Directory.

Přidáním role se neomezí dříve přiřazená oprávnění. Při omezování oprávnění instančního objektu by se měla odebrat role Přispěvatel.

Změny je možné ověřit výpisem přiřazených rolí:

az role assignment list --assignee APP_ID

Přihlášení pomocí instančního objektu

Otestujte přihlašovací údaje a oprávnění nového instančního objektu tím, že se přihlásíte. Pokud se chcete přihlásit pomocí instančního objektu, budete potřebovat appId tenant přihlašovací údaje, a.

Přihlášení pomocí instančního objektu s použitím hesla:

az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID

Pokud se chcete přihlásit pomocí certifikátu, musí být místně dostupný jako soubor PEM nebo DER ve formátu ASCII. Při použití souboru PEM musí být privátní klíč a certifikát připojeny společně v rámci souboru.

az login --service-principal --username APP_ID --tenant TENANT_ID --password /path/to/cert

Další informace o přihlašování pomocí instančního objektu najdete v tématu přihlášení pomocí Azure CLI.

Vytvoření prostředku pomocí instančního objektu

v následující části najdete příklad vytvoření prostředku pro Azure Storage s instančním objektem pomocí následujících příkazů:

Pokud se chcete přihlásit pomocí instančního objektu, budete potřebovat , a vrácenou jako odpověď appId tenant při vytváření password instančního objektu.

  1. Přihlaste se jako instanční objekt.

    az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID
    
  2. Vytvořte skupinu prostředků, která bude obsahovat všechny prostředky používané pro stejný rychlý start, kurz nebo vývojový projekt.

    az group create --location WESTUS --name MY_RESOURCE_GROUP
    
  3. Vytvořte prostředek pro službu Azure. Nahraďte <SERVICENAME> názvem služby Azure.

    Například Azure Storage hodnoty <KIND> parametru jsou:

    • Blob Storage
    • BlockBlobStorage
    • FileStorage
    • Storage
    • StorageV2
    az storage account create --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP --kind <KIND> --sku F0 --location WESTUS --yes
    
  4. Získejte klíče prostředků pro nový prostředek, které použijete v kódu k ověření ve službě Azure.

    az storage account keys list --name MY_RESOURCE_<SERVICENAME> --resource-group MY_RESOURCE_GROUP
    

Resetování přihlašovacích údajů

Pokud zapomenete přihlašovací údaje pro objekt služby, použijte příkaz az ad sp credential reset. Příkaz reset má stejné argumenty jako az ad sp create-for-rbac .

az ad sp credential reset --name APP_ID

Viz také