Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wyjaśniono, jak włączyć przypisaną przez użytkownika tożsamość zarządzaną w nowym lub istniejącym klastrze AKS, uzyskać jej identyfikator główny oraz dodać przypisanie roli dla tej tożsamości.
Wymagania wstępne
Przeczytaj Przegląd tożsamości zarządzanych w usłudze Azure Kubernetes Service (AKS) aby zrozumieć różne typy tożsamości zarządzanych dostępnych w usłudze AKS i jak można ich używać do bezpiecznego uzyskiwania dostępu do zasobów Azure.
Ustaw subskrypcję jako aktywną subskrypcję przy użyciu polecenia
az account set.az account set --subscription <subscription-id>
Istniejąca grupa zasobów Azure. Jeśli go nie masz, możesz go utworzyć przy użyciu
az group createpolecenia .az group create \ --name <resource-group-name> \ --location <location>
- Azure CLI w wersji 2.23.0 lub nowszej zainstalowana. Uruchom
az --version, aby znaleźć wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI. - Aby zaktualizować istniejący klaster do używania tożsamości zarządzanej przypisanej przez użytkownika
, musisz zainstalować Azure CLI w wersji 2.49.0 lub nowszej.
- Narzędzie Terraform zainstalowane lokalnie. Aby uzyskać instrukcje dotyczące instalacji, zobacz Instalowanie programu Terraform.
Ograniczenia
- Po utworzeniu klastra z tożsamością zarządzaną nie można wrócić do używania zasady usługi.
- Przenoszenie lub migrowanie klastra z włączoną obsługą tożsamości zarządzanej do innej dzierżawy nie jest obsługiwane.
- Jeśli klaster ma włączoną tożsamość zarządzaną przez zasobnik Microsoft Entra (
aad-pod-identity), zasobniki Node-Managed Identity (NMI) modyfikują tabele IP węzłów, aby przechwytywać wywołania do punktu końcowego metadanych wystąpienia Azure (IMDS). Ta konfiguracja oznacza, że każde żądanie skierowane do punktu końcowego IMDS jest przechwytywane przez NMI, nawet jeśli określony pod nie używa elementuaad-pod-identity.- Można skonfigurować niestandardową definicję zasobu AzurePodIdentityException (CRD), aby określić, że żądania do punktu końcowego IMDS pochodzące z zasobników pasujących do etykiet zdefiniowanych w CRD powinny być przekierowane bez żadnego przetwarzania w NMI. Wyklucz zasobniki systemowe z etykietą
kubernetes.azure.com/managedby: aksw przestrzeni nazw kube-system, konfigurując CRD AzurePodIdentityException waad-pod-identity. Aby uzyskać więcej informacji, zobacz Użyj tożsamości zarządzane przez zasobniki Microsoft Entra w Azure Kubernetes Service (AKS). - Aby skonfigurować wyjątek, zainstaluj mic-exception YAML.
- Można skonfigurować niestandardową definicję zasobu AzurePodIdentityException (CRD), aby określić, że żądania do punktu końcowego IMDS pochodzące z zasobników pasujących do etykiet zdefiniowanych w CRD powinny być przekierowane bez żadnego przetwarzania w NMI. Wyklucz zasobniki systemowe z etykietą
- Regiony USDOD Central, USDOD East i USGov Iowa w chmurze Azure US Government nie obsługują tworzenia klastra z tożsamością zarządzaną przypisaną przez użytkownika.
Zagadnienia dotyczące aktualizacji klastra
Podczas aktualizowania klastra należy wziąć pod uwagę następujące informacje:
- Aktualizacja działa tylko wtedy, gdy istnieje aktualizacja dysku VHD do korzystania. Jeśli używasz najnowszego wirtualnego dysku twardego, musisz poczekać, aż następny wirtualny dysk twardy będzie dostępny w celu przeprowadzenia aktualizacji.
- Azure CLI gwarantuje, że uprawnienie dodatku jest poprawnie ustawione po przeprowadzeniu migracji. Jeśli nie używasz Azure CLI do przeprowadzenia operacji migracyjnej, musisz samodzielnie zarządzać uprawnieniami identyfikatora dodatku. Aby zapoznać się z przykładem użycia szablonu Azure Resource Manager (ARM), zobacz Jak przypisać role Azure za pomocą szablonów ARM.
- Jeśli klaster używał
--attach-acrdo ściągania obrazów z Azure Container Registry (ACR), należy uruchomić polecenieaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>po zaktualizowaniu klastra, aby umożliwić nowo utworzonemu kubeletowi używanemu na potrzeby tożsamości zarządzanej uzyskanie uprawnień do ściągania z usługi ACR. W przeciwnym razie nie będzie można pobrać z ACR po aktualizacji.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Jeśli nie masz jeszcze zasobu tożsamości zarządzanej przypisanej przez użytkownika, utwórz go przy użyciu az identity create polecenia .
az identity create \
--name <identity-name> \
--resource-group <resource-group-name>
Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:
{
"clientId": "<client-id>",
"clientSecretUrl": "<clientSecretUrl>",
"id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
"location": "<location>",
"name": "<identity-name>",
"principalId": "<principal-id>",
"resourceGroup": "<resource-group-name>",
"tags": {},
"tenantId": "<tenant-id>",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Uzyskaj główny identyfikator tożsamości zarządzanej przypisanej przez użytkownika
Pobierz główny identyfikator tożsamości zarządzanej przypisanej przez użytkownika za pomocą polecenia az identity show.
CLIENT_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query principalId \
--output tsv)
Pobierz identyfikator zasobu dla tożsamości zarządzanej przypisanej przez użytkownika
Pobierz identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika za pomocą polecenia az identity show.
RESOURCE_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query id \
--output tsv)
Włącz tożsamość zarządzaną przez użytkownika w nowym klastrze AKS.
Utwórz klaster AKS z tożsamością zarządzaną przypisaną przez użytkownika, używając polecenia az aks create oraz ustawiając parametr --assign-identity na identyfikator zasobu tej tożsamości.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--network-plugin azure \
--vnet-subnet-id <vnet-subnet-id> \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24 \
--assign-identity $RESOURCE_ID \
--generate-ssh-keys
Aktualizowanie istniejącego klastra w celu używania tożsamości zarządzanej przypisanej przez użytkownika
Zaktualizuj istniejący klaster, aby korzystał z zarządzanej tożsamości przypisanej użytkownikowi, używając polecenia az aks update i parametru --assign-identity, który należy ustawić na identyfikator zasobu tej tożsamości.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
Dane wyjściowe pomyślnej aktualizacji klastra do korzystania z tożsamości zarządzanej przypisanej przez użytkownika powinny przypominać następujące przykładowe dane wyjściowe:
...
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
"clientId": "<client-id>",
"principalId": "<principal-id>"
}
}
},
...
Po zaktualizowaniu klastra do używania tożsamości zarządzanej przypisanej przez użytkownika zamiast jednostki usługi, płaszczyzna sterowania i zasobniki używają tożsamości zarządzanej przypisanej przez użytkownika do autoryzacji podczas uzyskiwania dostępu do innych usług w Azure. Rozwiązanie Kubelet kontynuuje korzystanie z jednostki usługi, dopóki nie uaktualnisz również puli węzłów. Uaktualnienie puli węzłów powoduje przestój klastra usługi AKS, ponieważ węzły w pulach węzłów są zablokowane, czyszczone i ponownie obrazowane. Aby zaktualizować zarządzaną tożsamość przypisaną użytkownikowi, możesz użyć polecenia w swoich węzłach.
az aks nodepool upgrade \
--resource-group <resource-group-name> \
--cluster-name <aks-cluster-name> \
--name <node-pool-name> \
--node-image-only
Uwaga / Notatka
Migracja tożsamości zarządzanej dla płaszczyzny sterowania z przypisanej przez system na przypisaną przez użytkownika nie powoduje żadnych przestojów ani dla płaszczyzny sterowania, ani dla pul agentów. Składniki płaszczyzny sterowania nadal mają starą tożsamość przypisaną przez system przez maksymalnie kilka godzin do następnego odświeżenia tokenu.
Przypisz rolę RBAC Azure do tożsamości zarządzanej, którą przypisano użytkownikowi
Dodaj przypisanie roli dla tożsamości zarządzanej przypisanej przez użytkownika za pomocą polecenia az role assignment create. W poniższym przykładzie przypisano rolę Key Vault Secrets User do przypisanej tożsamości zarządzanej przez użytkownika, aby przyznać jej uprawnienia do dostępu do tajemnic w key vault. Przypisanie roli jest ograniczone do zasobu magazynu kluczy.
az role assignment create \
--assignee <client-id> \
--role "Key Vault Secrets User" \
--scope "<key-vault-resource-id>"
Uwaga / Notatka
Propagacja uprawnień udzielonych tożsamości zarządzanej klastra może potrwać do 60 minut.
Tworzenie pliku konfiguracji narzędzia Terraform
Pliki konfiguracji narzędzia Terraform definiują infrastrukturę, którą program Terraform tworzy i zarządza.
Utwórz plik o nazwie
main.tfi dodaj następujący kod, aby zdefiniować wersję programu Terraform i określić dostawcę Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Dodaj następujący kod do
main.tf, aby utworzyć grupę zasobów Azure. W razie potrzeby możesz zmienić nazwę i lokalizację grupy zasobów.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Tworzenie klastra usługi AKS z tożsamością zarządzaną przypisaną przez użytkownika przy użyciu narzędzia Terraform
Dodaj następujący kod do main.tf, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika i klaster AKS, który używa tej tożsamości.
resource "azurerm_user_assigned_identity" "uai" {
name = "aks-user-identity"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
name = "aks-user"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "aksuser"
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.uai.id]
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Dodawanie przypisania roli dla tożsamości zarządzanej przypisanej przez użytkownika przy użyciu narzędzia Terraform
Dodaj następujący kod do main.tf, aby utworzyć przypisanie roli dla tożsamości zarządzanej przypisanej przez użytkownika. W tym przykładzie przypisano rolę Key Vault Secrets User do przypisanej przez użytkownika tożsamości zarządzanej w celu udzielenia mu uprawnień dostępu do wpisów tajnych w key vault. Przypisanie roli jest ograniczone do zasobu magazynu kluczy.
resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
scope = azurerm_resource_group.example.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_user_assigned_identity.uai.principal_id
}
Inicjowanie narzędzia Terraform
Zainicjuj Terraform w katalogu zawierającym plik main.tf przy użyciu polecenia terraform init. To polecenie pobiera dostawcę Azure wymaganego do zarządzania zasobami Azure za pomocą narzędzia Terraform.
terraform init
Tworzenie planu wykonania programu Terraform
Utwórz plan wykonywania narzędzia Terraform przy użyciu terraform plan polecenia . To polecenie pokazuje zasoby, które narzędzie Terraform utworzy lub zmodyfikuje w ramach subskrypcji Azure.
terraform plan
Stosowanie konfiguracji narzędzia Terraform
Po przejrzeniu i potwierdzeniu planu wykonania zastosuj konfigurację narzędzia Terraform przy użyciu terraform apply polecenia . To polecenie tworzy lub modyfikuje zasoby zdefiniowane w pliku main.tf w subskrypcji Azure.
terraform apply
Weryfikowanie wdrożenia narzędzia Terraform
Po zastosowaniu konfiguracji narzędzia Terraform możesz zweryfikować wdrożenie przy użyciu polecenia [az aks show][az-aks-show] z parametrem --query w celu filtrowania danych wyjściowych i wyświetlania informacji o tożsamości. Przykład:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Treści powiązane
Aby dowiedzieć się więcej o tożsamościach zarządzanych w usłudze AKS, zobacz następujące artykuły: