Jak używać tożsamości zarządzanych z usługą Azure Container Instances
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 — bez obsługi żadnych wpisów tajnych ani poświadczeń w kodzie. Ta funkcja zapewnia wdrożenie usługi Azure 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 Azure Container Instances i:
- Włączanie tożsamości przypisanej przez użytkownika lub przypisanej przez system w grupie kontenerów
- Udzielanie tożsamości dostępu do magazynu kluczy platformy Azure
- Używanie tożsamości zarządzanej do uzyskiwania dostępu do magazynu kluczy z uruchomionego kontenera
Dostosuj przykłady, aby włączyć i używać tożsamości w usłudze Azure Container Instances w celu uzyskania dostępu do innych usług platformy Azure. Te przykłady są interaktywne. Jednak 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 usługi AD, możesz przechowywać wpisy tajne w magazynie kluczy platformy 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łączanie tożsamości zarządzanej
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ć tożsamości zarządzane po uruchomieniu grupy kontenerów — 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 Resource Manager, pliku YAML lub innego narzędzia platformy Azure.
Usługa Azure 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 platformy Azure (na przykład aplikacji internetowej, magazynu kluczy lub konta magazynu) 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. Zapoznaj się ze wskazówkami dotyczącymi używania tokenu, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure lub zestawów SDK platformy Azure.
Wymagania wstępne
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Ten artykuł wymaga wersji 2.0.49 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z 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 usłudze Azure Container Instances do uzyskiwania dostępu do wpisu tajnego 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ładowy wpis tajny w magazynie 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 Azure 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 użytej do utworzenia magazynu kluczy lub użyć innej.
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 jednostki usługi tożsamości i identyfikator zasobu w zmiennych.
# 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 wpisów tajnych z magazynu kluczy:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Włączanie tożsamości przypisanej przez użytkownika 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 grupę pojedynczego kontenera, 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 utrzymuje działanie kontenera. W tym przykładzie użyto tej samej grupy zasobów użytej do utworzenia magazynu kluczy, ale można określić inną grupę.
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 wskazująca, że wdrożenie zostało ukoń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ższej, pokazującej, że tożsamość jest ustawiona w grupie kontenerów. Element under principalID
userAssignedIdentities
jest jednostką usługi tożsamości utworzonej w usłudze 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"
}
}
},
[...]
Uzyskiwanie wpisu tajnego z magazynu kluczy przy użyciu tożsamości przypisanej przez użytkownika
Teraz możesz użyć tożsamości zarządzanej w uruchomionym wystąpieniu kontenera, aby uzyskać dostęp do magazynu kluczy. Najpierw uruchom 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. 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
Wyjście:
{"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 magazynie kluczy i odczytać wpis tajny. 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ź wygląda podobnie do poniższej, pokazując wpis tajny. W kodzie przeanalizujesz te dane wyjściowe, aby uzyskać wpis tajny. Następnie użyj wpisu tajnego 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 usługi Azure Key Vault
Włączanie tożsamości przypisanej 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 grupę pojedynczego kontenera, 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 dodatkowej wartości umożliwia przypisaną przez system tożsamość zarządzaną w grupie. Tożsamość jest ograniczona do grupy zasobów grupy kontenerów. Długotrwałe polecenie utrzymuje działanie kontenera. W tym przykładzie użyto tej samej grupy zasobów używanej do utworzenia magazynu kluczy, który znajduje 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 ukoń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ższej, pokazującej, ż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
},
[...]
Ustaw zmienną na wartość principalId
(identyfikator jednostki usługi) tożsamości, aby użyć jej 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 wpisów tajnych z magazynu kluczy:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Uzyskiwanie wpisu tajnego z magazynu kluczy 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 uruchom 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 wpis tajny 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 usługi Resource Manager, ustaw identity
właściwość Microsoft.ContainerInstance/containerGroups
obiektu z obiektem ContainerGroupIdentity
. Poniższe fragmenty kodu pokazują identity
właściwość skonfigurowaną dla różnych scenariuszy. 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 formularza:
"/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 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 formularza
'/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 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':{}}
Tożsamość zarządzana 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 pobrania tokenu identyfikatora Entra firmy Microsoft. Klienci mogą postępować zgodnie z innym wzorcem, aby uzyskać token dostępu w kontenerach systemu Windows. Wzorzec obejmuje wysyłanie żądania tokenu do IDENTITY_ENDPOINT wraz z dodatkowymi informacjami, takimi jak identyfikator podmiotu zabezpieczeń i wpis tajny, jak pokazano poniżej. IDENTITY_ENDPOINT i IDENTITY_HEADER są wstrzykiwane jako zmienna środowiskowa 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 PowerShell
identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "b2ee9347-623c-4794-85af-2d5261356f67"
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 będą działać w kontenerze systemu Windows. Ponadto kontenery systemu Windows w sieci wirtualnej nie będą mogły łą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.
Następne kroki
W tym artykule przedstawiono informacje o tożsamościach zarządzanych w usłudze Azure Container Instances i o tym, jak wykonać następujące działania:
- Włączanie tożsamości przypisanej przez użytkownika lub przypisanej przez system w grupie kontenerów
- Udzielanie tożsamości dostępu do magazynu kluczy platformy Azure
- Używanie tożsamości zarządzanej do uzyskiwania dostępu do magazynu kluczy z uruchomionego kontenera
Dowiedz się więcej o tożsamościach zarządzanych dla zasobów platformy Azure.
Zobacz przykład użycia tożsamości zarządzanej do uzyskiwania dostępu do magazynu kluczy z usługi Azure Container Instances za pomocą zestawu AZURE Go SDK.