Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj tożsamości zarządzanych dla zasobów platformy Azure , aby uruchomić kod w usłudze Azure Container Instances, który współdziała z innymi usługami platformy Azure. Nie musisz utrzymywać żadnych tajemnic ani poświadczeń w kodzie. Ta funkcja udostępnia wdrożenie usługi Container Instances z automatycznie zarządzaną tożsamością w usłudze Microsoft Entra ID.
W tym artykule dowiesz się więcej o tożsamościach zarządzanych w usłudze Container Instances. Ponadto:
- Włącz tożsamość przypisaną przez użytkownika lub przypisaną przez system w grupie kontenerów.
- Udziel tożsamości dostępu do magazynu kluczy platformy Azure.
- Użyj tożsamości zarządzanej, aby uzyskać dostęp do magazynu kluczy z uruchomionego kontenera.
Dostosuj przykłady, aby włączyć i używać tożsamości w usłudze Container Instances w celu uzyskania dostępu do innych usług platformy Azure. Te przykłady są interaktywne. W praktyce obrazy kontenerów uruchamiałyby kod w celu uzyskania dostępu do usług platformy Azure.
Dlaczego warto używać tożsamości zarządzanej?
Użyj tożsamości zarządzanej w uruchomionym kontenerze, aby uwierzytelnić się w dowolnej usłudze obsługującej uwierzytelnianie firmy Microsoft Entra bez zarządzania poświadczeniami w kodzie kontenera. W przypadku usług, które nie obsługują uwierzytelniania Microsoft Entra, możesz przechowywać sekrety w magazynie kluczy Azure i używać tożsamości zarządzanej do uzyskiwania dostępu do magazynu kluczy w celu pobrania poświadczeń. Aby uzyskać więcej informacji na temat korzystania z tożsamości zarządzanej, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?.
Włącz tożsamość zarządzaną
Podczas tworzenia grupy kontenerów włącz co najmniej jedną tożsamość zarządzaną, ustawiając właściwość ContainerGroupIdentity . Można również włączyć lub zaktualizować zarządzane tożsamości po rozpoczęciu działania grupy kontenerów. Każda akcja powoduje ponowne uruchomienie grupy kontenerów. Aby ustawić tożsamości w nowej lub istniejącej grupie kontenerów, użyj interfejsu wiersza polecenia platformy Azure, szablonu usługi Azure Resource Manager, pliku YAML lub innego narzędzia platformy Azure.
Usługa Container Instances obsługuje oba typy tożsamości zarządzanych platformy Azure: przypisane przez użytkownika i przypisane przez system. W grupie kontenerów można włączyć tożsamość przypisaną przez system, co najmniej jedną tożsamość przypisaną przez użytkownika lub oba typy tożsamości. Jeśli nie znasz tożsamości zarządzanych dla zasobów platformy Azure, zapoznaj się z omówieniem.
Korzystanie z tożsamości zarządzanej
Aby korzystać z tożsamości zarządzanej, tożsamość musi mieć dostęp do co najmniej jednego zasobu usługi Azure (takiego jak aplikacja internetowa, Azure Key Vault lub kontener magazynowy) w ramach subskrypcji. Użycie tożsamości zarządzanej w uruchomionym kontenerze jest podobne do użycia tożsamości na maszynie wirtualnej platformy Azure. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące używania tokenu, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure lub zestawów SDK platformy Azure.
Prerequisites
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do Azure CLI za pomocą polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
- Ten artykuł wymaga wersji 2.0.49 lub nowszej interfejsu wiersza polecenia platformy Azure. Jeśli używasz usługi Azure Cloud Shell, najnowsza wersja jest już zainstalowana.
Tworzenie magazynu kluczy platformy Azure
Przykłady w tym artykule używają tożsamości zarządzanej w Container Instances w celu dostępu do sekretu usługi Azure Key Vault.
Najpierw utwórz grupę zasobów o nazwie myResourceGroup w lokalizacji eastus za pomocą następującego polecenia az group create :
az group create --name myResourceGroup --location eastus
Użyj polecenia az keyvault create , aby utworzyć magazyn kluczy. Pamiętaj, aby określić unikatową nazwę magazynu kluczy.
az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus
Zapisz przykładową tajemnicę w skarbcu kluczy przy użyciu polecenia az keyvault secret set
az keyvault secret set \
--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault
Kontynuuj pracę z poniższymi przykładami, aby uzyskać dostęp do magazynu kluczy przy użyciu tożsamości zarządzanej przypisanej przez użytkownika lub przypisanej przez system w usłudze Container Instances.
Przykład 1. Używanie tożsamości przypisanej przez użytkownika do uzyskiwania dostępu do usługi Azure Key Vault
Tworzenie tożsamości
Najpierw utwórz tożsamość w subskrypcji przy użyciu polecenia az identity create . Możesz użyć tej samej grupy zasobów, która została użyta do utworzenia magazynu kluczy. Możesz również użyć innego.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Aby użyć tożsamości w poniższych krokach, użyj polecenia az identity show, aby zapisać identyfikator główny usługi i identyfikator zasobu jako zmienne.
# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query id --output tsv)
Udzielanie tożsamości przypisanej przez użytkownika dostępu do magazynu kluczy
Uruchom następujące polecenie az keyvault set-policy , aby ustawić zasady dostępu w magazynie kluczy. Poniższy przykład umożliwia tożsamości przypisanej przez użytkownika pobieranie tajemnic z magazynu kluczy.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Włącz tożsamość przypisaną przez użytkownika na grupie kontenerów
Uruchom następujące polecenie az container create , aby utworzyć wystąpienie kontenera azure-cli na podstawie obrazu firmy Microsoft. W tym przykładzie przedstawiono pojedynczą grupę kontenerów, której można używać interaktywnie do uruchamiania interfejsu wiersza polecenia platformy Azure w celu uzyskania dostępu do innych usług platformy Azure. W tej sekcji jest używany tylko podstawowy system operacyjny. Aby zapoznać się z przykładem użycia interfejsu wiersza polecenia platformy Azure w kontenerze, zobacz Włączanie tożsamości przypisanej przez system w grupie kontenerów.
Parametr --assign-identity przekazuje tożsamość zarządzaną przypisaną przez użytkownika do grupy. Długotrwałe polecenie powoduje, że kontener pozostaje aktywny. W tym przykładzie używana jest ta sama grupa zasobów, która była użyta do utworzenia magazynu kluczy, ale można także wybrać inną.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $RESOURCE_ID \
--command-line "tail -f /dev/null"
W ciągu kilku sekund powinna zostać wyświetlona odpowiedź z interfejsu wiersza polecenia platformy Azure, która wskazuje, że wdrożenie zostało zakończone. Sprawdź jego stan za pomocą polecenia az container show .
az container show \
--resource-group myResourceGroup \
--name mycontainer
Sekcja identity w danych wyjściowych wygląda podobnie do poniższego przykładu, który pokazuje, że tożsamość jest ustawiona w grupie kontenerów. Element principalID pod userAssignedIdentities jest obiektem głównym usługi identyfikacyjnym, który został utworzony w Microsoft Entra ID.
[...]
"identity": {
"principalId": "null",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
}
},
[...]
Użyj tożsamości zarządzanej przez użytkownika do uzyskania tajemnicy z magazynu kluczy
Teraz możesz użyć tożsamości zarządzanej w uruchomionej instancji kontenera, aby uzyskać dostęp do Key Vault. Najpierw otwórz powłokę Bash w kontenerze:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Uruchom następujące polecenia w powłoce Bash znajdującej się w kontenerze. Aby uzyskać token dostępu do używania identyfikatora Entra firmy Microsoft do uwierzytelniania w magazynie kluczy, uruchom następujące polecenie:
client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s
Output:
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}
Aby przechowywać token dostępu w zmiennej do użycia w kolejnych poleceniach do uwierzytelniania, uruchom następujące polecenie:
TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')
Teraz użyj tokenu dostępu, aby uwierzytelnić się w skarbcu kluczy i odczytać tajemnicę. Pamiętaj, aby zastąpić nazwę magazynu kluczy adresem URL (https://mykeyvault.vault.azure.net/...):
curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"
Odpowiedź jest podobna do poniższego przykładu, który pokazuje tajemnicę. W kodzie analizujesz ten wynik, aby uzyskać tajny klucz. Następnie użyj sekretu w kolejnej operacji, aby uzyskać dostęp do innego zasobu platformy Azure.
{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}
Przykład 2. Używanie tożsamości przypisanej przez system do uzyskiwania dostępu do magazynu kluczy platformy Azure
Ustaw tożsamość przypisaną przez system w grupie kontenerów
Uruchom następujące polecenie az container create , aby utworzyć wystąpienie kontenera azure-cli na podstawie obrazu firmy Microsoft. W tym przykładzie przedstawiono pojedynczą grupę kontenerów, której można używać interaktywnie do uruchamiania interfejsu wiersza polecenia platformy Azure w celu uzyskania dostępu do innych usług platformy Azure.
Parametr --assign-identity bez innej wartości umożliwia przypisaną przez system tożsamość zarządzaną w grupie. Tożsamość jest ograniczona do grupy zasobów tego zbioru kontenerów. Długotrwałe polecenie powoduje, że kontener pozostaje aktywny. W tym przykładzie wykorzystano tę samą grupę zasobów, która posłużyła do stworzenia skarbca kluczy, znajdującego się w zakresie tożsamości.
# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)
# Create container group with system-managed identity
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity --scope $RG_ID \
--command-line "tail -f /dev/null"
W ciągu kilku sekund powinna zostać wyświetlona odpowiedź z interfejsu wiersza polecenia platformy Azure wskazująca, że wdrożenie zostało zakończone. Sprawdź jego stan za pomocą polecenia az container show .
az container show \
--resource-group myResourceGroup \
--name mycontainer
Sekcja identity w danych wyjściowych wygląda podobnie do poniższego przykładu, która pokazuje, że tożsamość przypisana przez system jest tworzona w identyfikatorze Entra firmy Microsoft:
[...]
"identity": {
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]
Przypisz zmiennej wartość principalId (identyfikator usługi), która zostanie użyta w kolejnych krokach.
SP_ID=$(az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)
Udzielanie grupie kontenerów dostępu do magazynu kluczy
Uruchom następujące polecenie az keyvault set-policy , aby ustawić zasady dostępu w magazynie kluczy. Poniższy przykład umożliwia tożsamości zarządzanej przez system pobieranie tajemnic z magazynu kluczy.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Uzyskiwanie sekretu z Key Vault przy użyciu tożsamości grupy kontenerów
Teraz możesz użyć tożsamości zarządzanej, aby uzyskać dostęp do magazynu kluczy w uruchomionym wystąpieniu kontenera. Najpierw otwórz powłokę Bash w kontenerze:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Uruchom następujące polecenia w powłoce Bash w kontenerze. Najpierw zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu tożsamości zarządzanej:
az login --identity
Z uruchomionego kontenera pobierz tajemnicę z magazynu kluczy.
az keyvault secret show \
--name SampleSecret \
--vault-name mykeyvault --query value
Wartość wpisu tajnego jest pobierana:
"Hello Container Instances"
Włączanie tożsamości zarządzanej przy użyciu szablonu usługi Resource Manager
Aby włączyć tożsamość zarządzaną w grupie kontenerów przy użyciu szablonu Resource Manager, ustaw właściwość identity obiektu Microsoft.ContainerInstance/containerGroups za pomocą obiektu ContainerGroupIdentity. Poniższe fragmenty kodu pokazują identity właściwość skonfigurowaną dla różnych scenariuszy. Aby uzyskać więcej informacji, zobacz dokumentację szablonu usługi Resource Manager. Określ minimalną apiVersion wartość 2018-10-01.
Tożsamość przypisana przez użytkownika
Tożsamość przypisana przez użytkownika jest identyfikatorem zasobu następującego formatu:
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"
Można włączyć co najmniej jedną tożsamość przypisaną przez użytkownika.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
Tożsamość przypisana przez system
"identity": {
"type": "SystemAssigned"
}
Tożsamości przypisane przez system i przypisane przez użytkownika
W grupie kontenerów można włączyć zarówno tożsamość przypisaną przez system, jak i co najmniej jedną tożsamość przypisaną przez użytkownika.
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
Włączanie tożsamości zarządzanej przy użyciu pliku YAML
Aby włączyć tożsamość zarządzaną w grupie kontenerów wdrożonej przy użyciu pliku YAML, dołącz następujący kod YAML.
Określ minimalną apiVersion wartość 2018-10-01.
Tożsamość przypisana przez użytkownika
Tożsamość przypisana przez użytkownika jest identyfikatorem zasobu następującej postaci:
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'
Można włączyć co najmniej jedną tożsamość przypisaną przez użytkownika.
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Tożsamość przypisana przez system
identity:
type: SystemAssigned
Tożsamości przypisane przez system i przypisane przez użytkownika
W grupie kontenerów można włączyć zarówno tożsamość przypisaną przez system, jak i co najmniej jedną tożsamość przypisaną przez użytkownika.
identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Zarządzana tożsamość w kontenerach systemu Windows
Tożsamość zarządzana w grupach kontenerów systemu Windows działa inaczej niż grupy kontenerów systemu Linux. W przypadku kontenerów systemu Windows serwer metadanych (169.254.169.254) nie jest dostępny do uzyskiwania tokenu identyfikatora Entra firmy Microsoft. Klienci mogą postępować zgodnie z innym wzorcem, aby uzyskać token dostępu w kontenerach systemu Windows. Wzorzec obejmuje wysłanie żądania tokenu do IDENTITY_ENDPOINT wraz z innymi informacjami, takimi jak identyfikator podmiotu i sekret. Zmienne IDENTITY_ENDPOINT i IDENTITY_HEADER są wstrzykiwane jako zmienne środowiskowe w kontenerze.
curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%
Przykładowy skrypt programu Azure PowerShell:
identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "aaaaaaaa-bbbb-cccc-1111-222222222222"
Invoke-RestMethod -Uri "$identityEndpoint" `
-Method Get `
-Headers @{secret = $identityHeader} `
-Body @{resource = $resource; principalId = $principalId} `
-ContentType "application/x-www-form-urlencoded"
Moduł az login i inne biblioteki klienta zależne od serwera metadanych (169.254.169.254) nie działają w kontenerze systemu Windows. Kontenery systemu Windows w sieci wirtualnej nie mogą łączyć się z punktem końcowym. W związku z tym nie można wygenerować tokenu tożsamości zarządzanej w kontenerze sieci wirtualnej systemu Windows.
Treści powiązane
- Dowiedz się więcej o tożsamościach zarządzanych dla zasobów platformy Azure.
- Zobacz przykład zestawu SDK Azure Go pokazujący użycie tożsamości zarządzanej do uzyskiwania dostępu do magazynu kluczy z usługi Azure Container Instances.