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 instanční objekt 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.

V tomto článku se dozvíte, jak vytvořit, získat informace o instančním objektu Azure a resetovat ho pomocí Azure CLI.

1. Vytvoření instančního objektu

Vytvořte instanční objekt Azure pomocí příkazu az ad sp create-for-rbac .

tenant Ve appId výstupu a klíče se používají v ověřování instančního objektuaz ad sp create-for-rbac. Zaznamenejte jejich hodnoty, ale lze je načíst v libovolném okamžiku pomocí příkazu 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. 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ů.

Upozornění

Při vytváření instančního objektu az ad sp create-for-rbac Azure pomocí 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.

Pokud chcete snížit riziko ohroženého instančního objektu, přiřaďte konkrétnější roli a zpřesněte obory k prostředku nebo skupině prostředků. Další informace najdete v tématu Kroky pro přidání přiřazení role.

Ověřování pomocí hesla

Pomocí ověřování založeného na heslech se pro vás vytvoří náhodné heslo. Pokud nezadáte hodnotu parametru --name , vytvoří se pro vás název obsahující časové razítko. Je nutné zadat --scopes , protože tato hodnota nemá výchozí hodnotu. Pokud chcete, můžete přiřazení role nastavit později pomocí příkazu az role assignment create.

# Create a service principal with required parameter
az ad sp create-for-rbac --scopes /subscriptions/mySubscriptionID

# Create a service principal for a resource group using a preferred name and role
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role reader \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

Instanční objekt můžete vytvořit také pomocí proměnných.

let "randomIdentifier=$RANDOM*$RANDOM"  
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id -o tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"

echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup

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

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

Pro ověřování na základě certifikátu použijte --cert parametr. Tento parametr vyžaduje, abyste měli existující certifikát. Ujistěte se, že jakýkoli nástroj, který používá tento instanční objekt, má 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.

Poznámka

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

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Parametr --keyvault lze přidat pro použití certifikátu v Azure Key Vault. V tomto případě --cert je hodnota název certifikátu.

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

Pokud chcete vytvořit certifikát podepsaný svým držitelem pro ověřování, použijte --create-cert tento parametr:

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

Výstup konzoly:

Creating a role assignment under the scopes 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 parameter
{
  "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

Příkaz az ad sp create-for-rbac --create-cert vytvoří instanční objekt a soubor PEM. Soubor PEM obsahuje správně formátovaný PRIVÁTNÍ KLÍČ a CERTIFIKÁT.

Parametr --keyvault lze přidat k uložení certifikátu v Azure Key Vault. Při použití --keyvault--cert je parametr povinný.

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

Pokud certifikát neukládáte do Key Vault, výstup obsahuje fileWithCertAndPrivateKey klíč. Hodnota tohoto klíče vám říká, kde je uložený vygenerovaný certifikát. Ujistěte se, že certifikát zkopírujete do zabezpečeného umístění nebo se nemůžete přihlásit pomocí tohoto instančního objektu.

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

Načtení certifikátu z Key Vault

V případě certifikátu uloženého v 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. V Key Vault je název tajného kódu 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

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

Seznam instančních objektů v tenantovi lze načíst pomocí příkazu 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. Pokud chcete získat všechny instanční objekty tenanta, použijte parametr --all . Získání tohoto seznamu může trvat dlouho, proto doporučujeme seznam filtrovat pomocí jednoho z následujících parametrů:

  • --display-name požaduje instanční objekty, které mají předponu , která odpovídá zadanému názvu. Zobrazovaný název instančního objektu je hodnota nastavená parametrem --name během vytváření. Pokud jste nenastavili --name během vytváření instančního objektu, je azure-cli-předpona názvu .
  • --spn filtruje přesnou shodu názvu instančního objektu. Název instančního objektu vždy začíná https://. pokud hodnota, pro --name kterou jste použili, nebyla identifikátorem URI, následuje https:// zobrazovaný název.
  • --show-mine požaduje pouze instanční objekty vytvořené přihlášeným uživatelem.
  • --filter přebírá filtr OData a provádí filtrování na straně serveru . Tato metoda se doporučuje použít k filtrování na straně klienta pomocí parametru --query rozhraní příkazového řádku. Další informace o filtrech OData najdete v tématu Syntaxe výrazu OData pro filtry.

Informace vrácené pro instanční objekty jsou podrobné. Pokud chcete získat pouze informace potřebné pro přihlášení, použijte řetězec [].{id:appId, tenant:appOwnerTenantId}dotazu . Pokud například chcete získat přihlašovací informace 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 get the user and tenant, but not any authentication secrets or the authentication method. Tajné kódy pro certifikáty v Key Vault je možné načíst pomocí příkazu az keyvault secret show, ale ve výchozím nastavení nejsou uloženy žádné další tajné kódy. Pokud zapomenete metodu ověřování nebo tajný kód, resetujte přihlašovací údaje instančního objektu.

3. Správa rolí instančního objektu

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

Role Přispěvatel má úplná oprávnění ke čtení a zápisu do účtu Azure. 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 appID \
                          --role Reader \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

az role assignment delete --assignee appID \
                          --role Contributor \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

Přidáním role se neomezí dříve přiřazená oprávnění. Při omezení oprávnění instančního objektu by měla být role Přispěvatel odebrána, pokud byla dříve přiřazena.

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

az role assignment list --assignee appID

4. Přihlaste se 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, potřebujete appIdtenantheslo a přihlašovací údaje.

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

az login --service-principal --username appID --password PASSWORD --tenant tenantID

Pokud se chcete přihlásit pomocí certifikátu, musí být k dispozici místně 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řipojené společně v souboru.

az login --service-principal --username appID --tenant tenantID --password /path/to/cert

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

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

Následující část obsahuje příklad vytvoření prostředku pro Azure Storage pomocí instančního objektu pomocí následujících příkazů:

Pokud se chcete přihlásit pomocí instančního objektu, potřebujete appID, tenantIDa password při vytváření instančního objektu se vrátí jako odpověď.

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

    az login --service-principal --username appID --password PASSWORD --tenant tenantID
    
  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 myResourceGroupName
    
  3. Vytvoření účtu úložiště

    Pro Azure Storage platí platné hodnoty parametru <KIND> :

    • Blob Storage
    • BlockBlobStorage
    • FileStorage
    • Úložiště
    • StorageV2
    az storage account create --name myStorageAccountName --resource-group myResourceGroupName --kind <KIND> --sku F0 --location westus --yes
    
  4. Získejte klíče prostředků, které použijete ve svém kódu k ověření účtu úložiště Azure.

    az storage account keys list --name myStorageAccountName --resource-group myResourceGroupName
    

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

Pokud ztratíte přihlašovací údaje pro instanční objekt, použijte příkaz az ad sp credential reset. Příkaz resetuje stejné parametry jako az ad sp create-for-rbac.

az ad sp credential reset --name myServicePrincipal_appID_or_name

7. Řešení potíží

Nedostatečná oprávnění

Pokud váš účet nemá oprávnění k vytvoření instančního objektu, az ad sp create-for-rbac vrátí chybovou zprávu obsahující nedostatečná oprávnění k dokončení operace. Požádejte správce Azure Active Directory o vytvoření instančního objektu.

Neplatný tenant

Pokud jste zadali neplatné ID předplatného, zobrazí se chybová zpráva "Požadavek nemá předplatné ani platný poskytovatel prostředků na úrovni tenanta". Pokud používáte proměnné, pomocí příkazu Bash echo zobrazte hodnotu předanou referenčnímu příkazu. Pomocí příkazu az account set můžete změnit předplatné nebo zjistit , jak spravovat předplatná Azure pomocí Azure CLI.

Skupina prostředků nebyla nalezena.

Pokud jste zadali neplatný název skupiny prostředků, zobrazí se chybová zpráva Skupina prostředků Název se nenašla. Pokud používáte proměnné, pomocí příkazu Bash echo zobrazte hodnotu předávanou do předplatných i referenčních příkazů. Pomocí příkazu az group list zobrazte skupiny prostředků pro aktuální předplatné nebo zjistěte , jak spravovat skupiny prostředků Azure pomocí Azure CLI.

Autorizace k provedení akce

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.

Viz také