Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Konfigurera identitetsbindningar i dina AkS-kluster (Azure Kubernetes Service) för att mappa en användartilldelad hanterad identitet (UAMI) över flera kluster när du använder en enda federerad identitetsautentisering (FIC). Den här konfigurationen hjälper dig att skala Microsoft Entra-autentisering för arbetsbelastningar utan att överskrida FIC-gränserna.
Förutsättningar
- Granska begrepp för identitetsbindningar för att förstå hur identitetsbindningar fungerar.
- Azure CLI version 2.73.0 eller senare. Om du vill kontrollera din version använder du
az versionkommandot . Information om hur du installerar eller uppdaterar Azure CLI finns i Installera Azure CLI. - Du behöver följande Azure-behörigheter för identitets- och klusteromfånget:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeochMicrosoft.ContainerService/managedClusters/write. - Du behöver Behörigheter för Kubernetes-klusteradministratör (eller motsvarande) för att skapa
ClusterRoleochClusterRoleBindingresurser.
Begränsningar
- Identitetsbindningar stöds ännu inte i kluster som konfigurerats med API Server VNet-integrering.
Skapa testresurser
Skapa en Azure-resursgrupp med kommandot
az group create.export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONSkapa ett AKS-kluster med aktiverad arbetsbelastningsidentitet och OIDC-utfärdare med hjälp av
az aks create-kommandot och flaggorna--enable-workload-identityoch--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerSkapa en användartilldelad hanterad identitet (UAMI) med kommandot
az identity create.export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Hämta UAMI-ID:t
Hämta resurs-, huvud-, klient- och klient-ID:t för UAMI och ange dem som miljövariabler med hjälp av följande
az identity showkommandon:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Skapa en identitetsbindning
Mappa UAMI till AKS-klustret med en identitetsbindning med kommandot
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDAnmärkning
När du skapar en identitetsbindning skapar AKS automatiskt en federerad identitetsautentisering (FIC) med namnet
aks-identity-bindingunder UAMI. Den här autentiseringsuppgiften hanteras av AKS. Ändra eller ta inte bort den när identitetsbindningar används. Den FIC som skapats för identitetsbindningar delas över alla identitetsbindningar som refererar till samma UAMI.
Hämta OIDC-utfärdarens URL för UAMI
Hämta url:en för OIDC-utfärdaren som är associerad med UAMI genom att granska identitetsbindningen med kommandot
az aks identity-binding show.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Komprimerade exempelutdata:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Ansluta till AKS-klustret
Hämta autentiseringsuppgifterna för AKS-klustret med kommandot
az aks get-credentialsoch spara dem i en separat kubeconfig-fil:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"KUBECONFIGAnge miljövariabeln så att den pekar på den nya kubeconfig-filen:export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Auktorisera namnområden och tjänstkonton
Konfigurera rollbaserad åtkomstkontroll (RBAC) för att ge specifika entiteter behörighet att använda den hanterade identiteten via identitetsbindning genom att tillämpa följande manifest med kommandot
kubectl apply.Anmärkning
Följande exempel refererar uttryckligen till
demotjänstkontot idemonamnområdet. Det är ett alternativ att uttryckligen referera till ett specifikt tjänstkonto, men det är också möjligt att referera till en samling tjänstkonton undersubjects. Mer information finns i Referera till ämnen i Kubernetes-dokumentationen.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Skapa ett nyckelvalv med rensningsskydd och Azure RBAC-auktorisering
Skapa ett nyckelvalv med rensningsskydd och Azure RBAC-auktorisering aktiverat med kommandot
az keyvault createmed flaggorna--enable-purge-protectionoch--enable-rbac-authorization. Du kan också använda ett befintligt nyckelvalv om det är konfigurerat för både rensningsskydd och Azure RBAC-auktorisering.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Hämta resurs-ID och URL för nyckelvalvet
Hämta resurs-ID:t för nyckelvalvet med kommandot
az keyvault showoch ange det som en miljövariabel:export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Hämta key vault-URL:en med kommandot
az keyvault showoch ange den som en miljövariabel:export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Konfigurera åtkomst till key vault och skapa hemlighet
Följande steg visar hur du kommer åt hemligheter, nycklar eller certifikat i Azure Key Vault från podden. Exemplen i det här avsnittet konfigurerar åtkomst till hemligheter i nyckelvalvet för arbetsbelastningsidentiteten, men du kan utföra liknande steg för att konfigurera åtkomst till nycklar eller certifikat.
I följande exempel visas hur du använder Azure RBAC-behörighetsmodellen för att ge podden åtkomst till nyckelvalvet. Mer information om Azure RBAC-behörighetsmodellen för Azure Key Vault finns i Bevilja behörighet till program för åtkomst till Azure Key Vault med hjälp av Azure RBAC.
Hämta objekt-ID för den inloggade användaren med kommandot
az ad signed-in-user showoch ange det som en miljövariabel:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Tilldela dig själv rollen Azure RBAC Key Vault Secrets Officer i nyckelvalvet med hjälp av
az role assignment createkommandot .az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDSkapa en hemlighet i nyckelvalvet med kommandot
az keyvault secret set.export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Tilldela rollen Key Vault Secrets User till UAMI med hjälp av
az role assignment createkommandot .az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Kommentera tjänstkonto
Kommentera tjänstkontot med det hanterade identitetsklient-ID:t med hjälp av
kubectl annotatekommandot .kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDKommentera tjänstkontot med det hanterade identitetsklient-ID:t med hjälp av
kubectl annotatekommandot .kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Distribuera exempelprogram
Distribuera exempelpodden som använder identitetsbindning för att hämta en åtkomsttoken för den hanterade identiteten för att få åtkomst till Azure Key Vault med hjälp av följande
kubectl applykommando:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Kontrollera åtkomsten till nyckelvalvet från exempelprogrammet
Beskriv podden och bekräfta att miljövariabler och projicerade tokenvolymmonteringar finns med kommandot
kubectl describe pod.kubectl describe pod demo -n demoFörväntade utdata ska innehålla värden för
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_FEDERATED_TOKEN_FILE,AZURE_AUTHORITY_HOST,AZURE_KUBERNETES_TOKEN_PROXY.AZURE_KUBERNETES_SNI_NAME, ochAZURE_KUBERNETES_CA_FILE.Kontrollera att podden kan hämta en token och komma åt resursen med hjälp av
kubectl logskommandot .kubectl logs demo -n demoOm det lyckas bör utdata likna följande exempel:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Skala identitetsbindningar över flera kluster
Med identitetsbindningar kan du mappa flera AKS-kluster till samma UAMI medan du fortfarande använder en enda FIC. Om du vill skala identitetsbindningar mellan flera kluster kan du upprepa stegen från Skapa en identitetsbindning genom att verifiera åtkomsten till nyckelvalvet från exempelprogrammet för varje extra kluster som du vill mappa till samma UAMI (skapa en ny identitetsbindning per kluster).
Rensa resurser
Om du inte längre behöver de resurser som du skapade i den här artikeln kan du rensa dem för att undvika framtida kostnader.
Ta bort podden med kommandot
kubectl delete pod.kubectl delete pod demo -n demoTa bort namnområdet med kommandot
kubectl delete ns.kubectl delete ns demoTa bort resursgruppen och alla relaterade resurser med kommandot
az group delete.az group delete --name $RESOURCE_GROUP --yes --no-wait