Sdílet prostřednictvím


Konfigurace identity úloh v clusteru AKS Edge Essentials (Preview)

Azure Kubernetes Service (AKS) Edge Essentials je místní implementace Kubernetes služby Azure Kubernetes Service (AKS), která automatizuje spouštění kontejnerizovaných aplikací ve velkém měřítku. Tento článek popisuje, jak provádět následující úlohy:

  • Vytvořte účet služby Kubernetes a svážete ho se spravovanou identitou Azure.
  • Vytvořte pro spravovanou identitu federované přihlašovací údaje, které důvěřují vystaviteli OIDC.
  • Nasaďte aplikaci.
  • Příklad: Udělte podu v clusteru přístup k tajným kódům v trezoru klíčů Azure.

Koncepční přehled federace identit úloh najdete v tématu Federace identit úloh v Kubernetes s podporou Azure Arc (Preview).

Důležité

Tyto funkce ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview služby Azure Kubernetes Service Essentials jsou částečně pokryté zákaznickou podporou na základě maximálního úsilí.

Poznámka:

V této verzi Public Preview vám AKS Edge Essentials umožňuje povolit identitu úloh během počátečního nasazení skriptu Rychlého startu pro operace Azure IoT. Tato funkce není dostupná pro jiné scénáře AKS Edge Essentials.

Požadavky

Před použitím federace identit úloh pro cluster AKS Edge Essentials musíte nasadit skript rychlého startu operace Azure IoT, jak je popsáno v tématu Vytvoření a konfigurace clusteru AKS Edge Essentials, který může spouštět operace Azure IoT. Skript automaticky povolí funkci federace identit úloh v clusteru AKS Edge Essentials.

Po nasazení clusteru AKS Edge Essentials můžete pomocí následujícího příkazu zkontrolovat stav rozšíření identity úlohy:

az connectedk8s show -n $aks_cluster_name -g $resource_group_name
# agentState = "Succeeded" 
"agentPublicKeyCertificate": "", 
  "agentVersion": "1.21.10", 
  "arcAgentProfile": { 
    "agentAutoUpgrade": "Enabled", 
    "agentErrors": [], 
    "agentState": "Succeeded", 
    "desiredAgentVersion": "", 
    "systemComponents": null 

# oidcIssuerProfile "enabled": true and "issuerUrl" present 
"oidcIssuerProfile": { 
    "enabled": true, 
    "issuerUrl": "https://oidcdiscovery-{location}-endpoint-1111111111111111.000.azurefd.net/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/", 

# workloadIdentity "enabled": true 
"securityProfile": { 
    "workloadIdentity": { 
      "enabled": true

Na webu Azure Portal můžete rozšíření zobrazit wiextension v části Vlastnosti vašeho clusteru Kubernetes.

Export proměnných prostředí

Pro zjednodušení kroků pro konfiguraci požadovaných identit definuje následující kroky proměnné prostředí, na které se odkazuje v příkladech v tomto článku. Nezapomeňte nahradit hodnoty zobrazené vlastními hodnotami:

$AZSubscriptionID = "00000000-0000-0000-0000-000000000000" 
$Location = "westeurope" 
$resource_group_name = "myResourceGroup" 

$aks_cluster_name = "myAKSCluster" 

$SERVICE_ACCOUNT_NAMESPACE = "default" 
$SERVICE_ACCOUNT_NAME = "workload-identity-sa" 

$FedIdCredentialName = "myFedIdentity" 
$MSIName = "myIdentity" 

# Include these variables to access key vault secrets from a pod in the cluster. 
$KVName = "KV-workload-id" 
$KVSecretName= "KV-secret"

Uložení adresy URL vystavitele OIDC do proměnné prostředí

Pokud chcete získat adresu URL vystavitele OIDC a uložit ji do proměnné prostředí, spusťte následující příkaz:

$SERVICE_ACCOUNT_ISSUER =$(az connectedk8s show --n $aks_cluster_name --resource-group $resource_group_name --query "oidcIssuerProfile.issuerUrl" --output tsv)

Krok 1: Vytvoření účtu služby Kubernetes a jeho vytvoření vazby ke spravované identitě Azure

Nejprve zavolejte příkaz az identity create a vytvořte spravovanou identitu:

az identity create --name $MSIName --resource-group $resource_group_name --location $Location --subscription $AZSubscriptionID

Dále vytvořte proměnné pro ID klienta spravované identity:

$MSIId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'clientId' --output tsv)  
$MSIPrincipalId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'principalId' --output tsv)

Vytvoření účtu služby Kubernetes

Vytvořte účet služby Kubernetes a označte ho ID klienta spravované identity, kterou jste vytvořili v předchozím kroku. Zkopírujte a vložte následující příkazy Azure CLI:

$yaml = @" 
apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: $MSIId 
  name: $SERVICE_ACCOUNT_NAME 
  namespace: $SERVICE_ACCOUNT_NAMESPACE 
"@ 

# Replace variables within the YAML content 
$yaml = $yaml -replace '\$MSIId', $MSIId ` 
              -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` 
              -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE 

# Apply the YAML content to Kubernetes 
$yaml | kubectl apply -f -

Následující výstup ukazuje úspěšně vytvořenou identitu úlohy:

serviceaccount/workload-identity-sa created

Krok 2: Vytvoření federovaných přihlašovacích údajů pro spravovanou identitu pro vztah důvěryhodnosti vystavitele OIDC

Pokud chcete vytvořit přihlašovací údaje federované identity mezi spravovanou identitou, vystavitelem účtu služby a předmětem, zavolejte příkaz az identity federated-credential create . Další informace o přihlašovacích údajích federované identity v Microsoft Entra najdete v tématu Přehled přihlašovacích údajů federované identity v Microsoft Entra ID.

# Create a federated credential 
az identity federated-credential create --name $FedIdCredentialName --identity-name $MSIName --resource-group $resource_group_name --issuer $SERVICE_ACCOUNT_ISSUER --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}" 

# Show the federated credential 
az identity federated-credential show --name $FedIdCredentialName --resource-group $resource_group_name --identity-name $MSIName

Poznámka:

Po přidání přihlašovacích údajů federované identity trvá šíření několik sekund. Žádosti o tokeny provedené okamžitě poté můžou selhat, dokud se mezipaměť neaktualizuje. Pokud chcete tomuto problému zabránit, zvažte přidání krátkého zpoždění po vytvoření přihlašovacích údajů federované identity.

Krok 3: Nasazení aplikace

Když nasadíte pody aplikace, měl by manifest odkazovat na účet služby vytvořený v kroku Vytvoření účtu služby Kubernetes. Následující manifest ukazuje, jak odkazovat na účet, konkrétně na metadata\namespace vlastnosti a spec\serviceAccountName vlastnosti. Nezapomeňte zadat image pro image a název kontejneru pro containerName:

$image = "<image>"  # Replace <image> with the actual image name 
$containerName = "<containerName>"  # Replace <containerName> with the actual container name 

$yaml = @" 
apiVersion: v1 
kind: Pod 
metadata: 
  name: sample-quick-start 
  namespace: $SERVICE_ACCOUNT_NAMESPACE 
  labels: 
    azure.workload.identity/use: "true" # Required. Only pods with this label can use workload identity. 
spec: 
  serviceAccountName: $SERVICE_ACCOUNT_NAME 
  containers: 
    - image: $image 
      name: $containerName 
"@ 

# Replace variables within the YAML content 
$yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` 
                -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME 

# Apply the YAML configuration 
$yaml | kubectl apply -f - 

Důležité

Ujistěte se, že pody aplikací používající identitu úloh obsahují popisek azure.workload.identity/use: "true" ve specifikaci podu. Jinak se pody po restartování nezdaří.

Příklad: Udělení oprávnění pro přístup ke službě Azure Key Vault

Pokyny v tomto kroku popisují, jak získat přístup k tajným kódům, klíčům nebo certifikátům v trezoru klíčů Azure z podu. Příklady v této části konfiguruje přístup k tajným kódům v trezoru klíčů pro identitu úlohy, ale můžete provést podobné kroky ke konfiguraci přístupu ke klíčům nebo certifikátům.

Následující příklad ukazuje, jak pomocí modelu oprávnění řízení přístupu na základě role (Azure RBAC) Azure udělit podu přístup k trezoru klíčů. Další informace o modelu oprávnění Azure RBAC pro Azure Key Vault najdete v tématu Udělení oprávnění aplikacím pro přístup k trezoru klíčů Azure pomocí Azure RBAC.

  1. Vytvořte trezor klíčů s povolenou ochranou před vymazáním a autorizací RBAC. Existující trezor klíčů můžete použít také v případě, že je nakonfigurovaný pro ochranu před vymazáním i autorizaci RBAC:

    az keyvault create --name $KVName --resource-group $resource_group_name --location $Location --enable-purge-protection --enable-rbac-authorization
    
    # retrieve the key vault ID for role assignment
    $KVId=$(az keyvault show --resource-group $resource_group_name --name $KVName --query id --output tsv)
    
  2. Přiřaďte roli Správce tajných kódů RBAC služby Key Vault sami sobě, abyste mohli vytvořit tajný kód v novém trezoru klíčů. Rozšíření nových přiřazení rolí může trvat až pět minut, než se autorizační server aktualizuje.

    az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets Officer" --scope $KVId --assignee-principal-type ServicePrincipal
    
  3. Vytvořte tajný klíč v trezoru klíčů:

    az keyvault secret set --vault-name $KVName --name $KVSecretName --value "Hello!"
    
  4. Přiřaďte roli uživatele tajných kódů služby Key Vault spravované identitě přiřazené uživatelem, kterou jste vytvořili dříve. Tento krok poskytuje spravované identitě oprávnění ke čtení tajných kódů z trezoru klíčů:

    az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets User" --scope $KVId --assignee-principal-type ServicePrincipal
    
  5. Vytvořte proměnnou prostředí pro adresu URL trezoru klíčů:

    $KVUrl=$(az keyvault show --resource-group $resource_group_name --name $KVName --query properties.vaultUri --output tsv)
    
  6. Nasaďte pod, který odkazuje na účet služby a adresu URL trezoru klíčů:

    $yaml = @" 
    apiVersion: v1 
    kind: Pod
    metadata:
      name: sample-quick-start
      namespace: $SERVICE_ACCOUNT_NAMESPACE
      labels:
        azure.workload.identity/use: "true"
    spec:
      serviceAccountName: $SERVICE_ACCOUNT_NAME 
      containers:
        - image: ghcr.io/azure/azure-workload-identity/msal-go 
          name: oidc 
          env: 
          - name: KEYVAULT_URL 
            value: $KVUrl 
          - name: SECRET_NAME 
            value: $KVSecretName 
      nodeSelector:
        kubernetes.io/os: linux
    "@
    
    # Replace variables within the YAML content 
    $yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` 
                    -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` 
                    -replace '\$KVUrl', $KVUrl ` 
                    -replace '\$KVSecretName', $KVSecretName 
    
    # Apply the YAML configuration
    $yaml | kubectl --kubeconfig $aks_cluster_name apply -f -
    

Další kroky

V tomto článku jste ho nakonfigurovali tak, aby používala identitu úlohy při přípravě úloh aplikace k ověření pomocí těchto přihlašovacích údajů. Teď jste připraveni nasadit aplikaci a nakonfigurovat ji tak, aby používala identitu úloh s nejnovější verzí klientské knihovny Azure Identity.