Praca z jednostką usługi platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure
Zautomatyzowane narzędzia, które korzystają z usług platformy Azure, powinny zawsze mieć ograniczone uprawnienia. Zamiast wymagać, aby aplikacje logowały się jako użytkownik z pełnymi uprawnieniami, platforma Azure oferuje jednostki usługi.
Co to jest jednostka usługi platformy Azure?
Jednostka usługi platformy Azure to tożsamość przeznaczona do użycia z aplikacjami, usługami hostowanymi i zautomatyzowanymi narzędziami w celu uzyskiwania dostępu do zasobów platformy Azure. Ten dostęp jest ograniczony przez role przypisane do jednostki usługi, dzięki czemu możesz kontrolować, do których zasobów jest uzyskiwany dostęp i na jakim poziomie. Ze względów bezpieczeństwa zawsze zaleca się używanie jednostek usługi ze zautomatyzowanymi narzędziami, zamiast zezwalać im na logowanie za pomocą tożsamości użytkownika.
W tym artykule przedstawiono kroki tworzenia, uzyskiwania informacji na temat i resetowania jednostki usługi platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
1. Tworzenie jednostki usługi
Utwórz jednostkę usługi platformy Azure za pomocą polecenia az ad sp create-for-rbac .
Klucze appId
i tenant
są wyświetlane w danych wyjściowych az ad sp create-for-rbac
i są używane w uwierzytelnianiu jednostki usługi. Zarejestruj swoje wartości, ale można je pobrać w dowolnym momencie za pomocą polecenia az ad sp list.
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.
Ostrzeżenie
Podczas tworzenia jednostki usługi platformy Azure przy użyciu az ad sp create-for-rbac
polecenia dane wyjściowe zawierają poświadczenia, które należy chronić. Pamiętaj, aby nie uwzględniać tych poświadczeń w kodzie ani nie ewidencjonować ich w systemie kontroli kodu źródłowego. Alternatywnie rozważ użycie tożsamości zarządzanych , jeśli są dostępne, aby uniknąć konieczności używania poświadczeń.
Aby zmniejszyć ryzyko naruszenia zabezpieczeń jednostki usługi, przypisz bardziej szczegółową rolę i zawęzij zakresy do zasobu lub grupy zasobów. Aby uzyskać więcej informacji, zobacz Kroki dodawania przypisania roli.
Uwierzytelnianie oparte na hasłach
W przypadku uwierzytelniania opartego na hasłach jest tworzone losowe hasło. Jeśli nie określisz wartości parametru --name
, zostanie utworzona nazwa zawierająca sygnaturę czasową. Musisz określić wartość --scopes
, ponieważ ta wartość nie ma wartości domyślnej. Jeśli wolisz, możesz później ustawić przypisanie roli za pomocą polecenia 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
Jednostkę usługi można również utworzyć przy użyciu zmiennych.
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
Dane wyjściowe jednostki usługi z uwierzytelnianiem za pomocą hasła obejmują password
klucz. Upewnij się, że skopiujesz tę wartość — nie można jej pobrać. W przypadku utraty hasła zresetuj poświadczenia jednostki usługi.
Uwierzytelnianie oparte na certyfikacie
W przypadku uwierzytelniania opartego na certyfikatach użyj parametru --cert
. Ten parametr wymaga posiadania istniejącego certyfikatu. Upewnij się, że dowolne narzędzie korzystające z tej jednostki usługi ma dostęp do klucza prywatnego certyfikatu. Certyfikaty powinny być w formacie ASCII, takim jak PEM, CER lub DER. Przekaż certyfikat jako ciąg lub użyj @path
formatu, aby załadować certyfikat z pliku.
Uwaga
W przypadku korzystania z pliku PEM certyfikat musi zostać dołączony do klucza prywatnego w pliku.
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
można dodać do używania certyfikatu w usłudze Azure Key Vault. W takim przypadku --cert
wartość jest nazwą certyfikatu.
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--cert certificateName \
--keyvault vaultName
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:
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"
}
Zawartość nowego pliku PEM:
-----BEGIN PRIVATE KEY-----
myPrivateKeyValue
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
myCertificateValue
-----END CERTIFICATE-----
Uwaga
Polecenie az ad sp create-for-rbac --create-cert
tworzy jednostkę usługi i plik PEM. Plik PEM zawiera poprawnie sformatowany KLUCZ PRYWATNY i CERTYFIKAT.
Parametr --keyvault
można dodać do przechowywania certyfikatu w usłudze Azure Key Vault. W przypadku korzystania z parametru --keyvault
--cert
parametr jest wymagany.
az ad sp create-for-rbac --name myServicePrincipalName \
--role roleName \
--scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
--create-cert \
--cert certificateName \
--keyvault vaultName
Jeśli certyfikat nie zostanie przechowywany w Key Vault, dane wyjściowe zawierają fileWithCertAndPrivateKey
klucz. Wartość tego klucza informuje o tym, gdzie jest przechowywany wygenerowany certyfikat.
Upewnij się , że certyfikat został skopiowany do bezpiecznej lokalizacji lub nie możesz zalogować się przy użyciu tej jednostki usługi.
Jeśli utracisz dostęp do klucza prywatnego certyfikatu, zresetuj poświadczenia jednostki usługi.
Pobieranie certyfikatu z Key Vault
W przypadku certyfikatu przechowywanego w Key Vault pobierz certyfikat z jego kluczem prywatnym za pomocą polecenia az keyvault secret show i przekonwertuj go na plik PEM. W 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: -out cert.pem -nodes
Konwertowanie istniejącego pliku PKCS12
Jeśli masz już plik PKCS#12, możesz przekonwertować go na format PEM przy użyciu protokołu OpenSSL. Jeśli masz hasło, zmień passin
argument.
openssl pkcs12 -in fileName.p12 -clcerts -nodes -out fileName.pem -passin pass:
2. Pobieranie istniejącej jednostki usługi
Listę jednostek usługi w dzierżawie można pobrać za pomocą polecenia az ad sp list. Domyślnie to polecenie zwraca pierwsze 100 jednostek usługi dla dzierżawy. Aby uzyskać wszystkie jednostki usługi dzierżawy, użyj parametru --all
. Pobieranie tej listy może zająć dużo czasu, dlatego zaleca się filtrowanie listy przy użyciu jednego z następujących parametrów:
--display-name
żąda jednostek usługi, które mają prefiks zgodny z podaną nazwą. Nazwa wyświetlana jednostki usługi to wartość ustawiona za pomocą parametru--name
podczas tworzenia. Jeśli podczas tworzenia jednostki usługi nie ustawiono--name
wartości , prefiks nazwy toazure-cli-
.--spn
filtruje dokładne dopasowanie nazwy głównej usługi. Nazwa główna usługi zawsze zaczyna się odhttps://
. Jeśli wartość użyta dla--name
elementu nie była identyfikatorem URI, ta wartość jesthttps://
po niej zgodna z nazwą wyświetlaną.--show-mine
żąda tylko jednostek usługi utworzonych przez zalogowanego użytkownika.--filter
pobiera filtr OData i wykonuje filtrowanie po stronie serwera . Ta metoda jest zalecana przez filtrowanie po stronie klienta przy użyciu parametru--query
interfejsu wiersza polecenia. Aby dowiedzieć się więcej o filtrach OData, zobacz Składnia wyrażeń OData dla filtrów.
Informacje zwracane dla obiektów jednostki usługi są pełne. Aby uzyskać tylko informacje niezbędne do logowania, użyj ciągu [].{id:appId, tenant:appOwnerTenantId}
zapytania . Aby na przykład uzyskać informacje logowania dla wszystkich jednostek usługi utworzonych przez aktualnie zalogowanego użytkownika:
az ad sp list --show-mine --query "[].{id:appId, tenant:appOwnerTenantId}"
Ważne
az ad sp list
lub az ad sp show get user and tenant, ale nie żadnych wpisów tajnych uwierzytelniania lub metody uwierzytelniania.
Wpisy tajne certyfikatów w Key Vault można pobrać za pomocą polecenia az keyvault secret show, ale żadne inne wpisy tajne nie są domyślnie przechowywane.
Jeśli zapomnisz metody uwierzytelniania lub wpisu tajnego, zresetuj poświadczenia jednostki usługi.
3. Zarządzanie rolami jednostki usługi
Interfejs wiersza polecenia platformy Azure ma następujące polecenia do zarządzania przypisaniami ról:
Rola Współautor ma pełne uprawnienia do odczytu i zapisu na koncie platformy Azure. Rola Czytelnik jest bardziej restrykcyjna i zapewnia dostęp tylko do odczytu. Aby uzyskać więcej informacji o rolach i kontroli dostępu opartej na rolach (RBAC), zobacz RBAC: Built-in roles (Kontrola dostępu oparta na rolach: role wbudowane).
W tym przykładzie dodano rolę Czytelnik i usunięto rolę Współautor :
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
Dodanie roli nie ogranicza wcześniej przypisanych uprawnień. W przypadku ograniczania uprawnień jednostki usługi rola Współautor powinna zostać usunięta, jeśli została wcześniej przypisana.
Zmiany można zweryfikować przez wyświetlenie listy przypisanych ról:
az role assignment list --assignee appID
4. Zaloguj się przy użyciu jednostki usługi
Przetestuj poświadczenia i uprawnienia nowej jednostki usługi przez zalogowanie. Aby zalogować się przy użyciu jednostki usługi, potrzebne są appId
poświadczenia , tenant
i .
Aby zalogować się przy użyciu jednostki usługi używającej hasła:
az login --service-principal --username appID --password PASSWORD --tenant tenantID
Aby zalogować się przy użyciu certyfikatu, musi być dostępny lokalnie jako plik PEM lub DER w formacie ASCII. W przypadku korzystania z pliku PEM klucz PRYWATNY i CERTYFIKAT muszą być dołączane razem w pliku.
az login --service-principal --username appID --tenant tenantID --password /path/to/cert
Aby dowiedzieć się więcej na temat logowania się przy użyciu jednostki usługi, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
5. Tworzenie zasobu przy użyciu jednostki usługi
Poniższa sekcja zawiera przykład tworzenia zasobu dla usługi Azure Storage przy użyciu jednostki usługi przy użyciu następujących poleceń:
Aby zalogować się przy użyciu jednostki usługi, potrzebne są appID
elementy , tenantID
i password
zwrócone jako odpowiedź podczas tworzenia jednostki usługi.
Zaloguj się jako jednostka usługi.
az login --service-principal --username appID --password PASSWORD --tenant tenantID
Utwórz grupę zasobów do przechowywania wszystkich zasobów używanych w ramach tego samego projektu Szybki start, samouczka lub programowania.
az group create --location westus --name myResourceGroupName
Tworzenie konta magazynu
W przypadku usługi Azure Storage prawidłowe wartości parametru
<KIND>
to:- BlobStorage
- BlockBlobStorage
- FileStorage
- Storage
- StorageV2
az storage account create --name myStorageAccountName --resource-group myResourceGroupName --kind <KIND> --sku F0 --location westus --yes
Pobierz klucze zasobów, których używasz w kodzie do uwierzytelniania na koncie usługi Azure Storage.
az storage account keys list --name myStorageAccountName --resource-group myResourceGroupName
6. Resetowanie poświadczeń
Jeśli utracisz poświadczenia dla jednostki usługi, użyj polecenia az ad sp credential reset. Polecenie reset przyjmuje te same parametry co az ad sp create-for-rbac
.
az ad sp credential reset --name myServicePrincipal_appID_or_name
7. Rozwiązywanie problemów
Niewystarczające uprawnienia
Jeśli Twoje konto nie ma uprawnień do tworzenia jednostki usługi, az ad sp create-for-rbac
zostanie zwrócony komunikat o błędzie z komunikatem "Niewystarczające uprawnienia do ukończenia operacji". Skontaktuj się z administratorem usługi Azure Active Directory, aby utworzyć jednostkę usługi.
Nieprawidłowa dzierżawa
Jeśli określono nieprawidłowy identyfikator subskrypcji, zostanie wyświetlony komunikat o błędzie "Żądanie nie ma subskrypcji lub prawidłowego dostawcy zasobów na poziomie dzierżawy". Jeśli używasz zmiennych, użyj polecenia powłoki Bash echo
, aby wyświetlić wartość przekazywaną do polecenia odwołania. Użyj polecenia az account set , aby zmienić subskrypcję lub dowiedzieć się , jak zarządzać subskrypcjami platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure.
Nie można odnaleźć grupy zasobów
Jeśli określono nieprawidłową nazwę grupy zasobów, zostanie wyświetlony komunikat o błędzie "Nie można odnaleźć grupy zasobów "name". Jeśli używasz zmiennych, użyj polecenia powłoki Bash echo
, aby wyświetlić wartość przekazywaną do poleceń subskrypcji i odwołań. Użyj polecenia az group list , aby wyświetlić grupy zasobów dla bieżącej subskrypcji, lub dowiedz się , jak zarządzać grupami zasobów platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure.
Autoryzacja do wykonania akcji
Jeśli konto nie ma uprawnienia do przypisywania roli, zobaczysz komunikat o błędzie informujący, że Twoje konto „nie ma autoryzacji do wykonania akcji Microsoft.Authorization/roleAssignments/write”. Skontaktuj się z administratorem usługi Azure Active Directory w celu zarządzania rolami.