当前位置: 首页 > news >正文

深入探究AKS Workload Identity

Azure Kubernetes 服务 (AKS) 提供了一项名为 Workload Identity 的强大功能,它可以增强安全性并简化在 Kubernetes 集群中运行的应用程序的身份验证。以下是 Workload Identity 在 AKS 环境中的工作原理概述:

AKS 中的 Workload Identity 允许 Pod 无需使用集群中存储的密钥或凭据即可针对 Azure 资源进行身份验证。相反,它利用 Entra ID (Azure AD) 和 OpenID Connect (OIDC) 来提供更安全、更易于管理的身份验证机制。

AKS Workload Identity 解决的问题


Azure Workload Identity 解决了云身份验证和安全方面的几个关键问题,尤其是在 Azure Kubernetes 服务 (AKS) 环境中。以下是 Workload Identity 解决的关键问题:

  1. 简化的凭据管理:

通过利用 Azure Active Directory (Azure AD) 和 OpenID Connect (OIDC),Workload Identity 简化了凭据管理流程。开发人员不再需要手动管理、轮换或存储密钥,从而减少了管理开销和潜在的人为错误。

    2. 增强的安全性:

工作负载身份通过使用短期令牌而非长期密钥,提供更安全的身份验证机制。这种方法最大限度地减少了凭据被盗用时潜在攻击者的可乘之机。


   3. 与 Azure 服务无缝集成:


工作负载身份可以与现有的 Azure 服务无缝集成,并轻松融入 CI/CD 流水线,使其成为现代云原生架构的理想之选。


   4. 可扩展性:
工作负载身份旨在在 Kubernetes 环境中常见的复杂多服务架构中有效扩展,为云原生应用程序提供更易于管理的身份和访问管理方法。


  5.从旧系统过渡:
工作负载身份为组织提供了一种摆脱较旧、安全性较低的身份验证方法(例如 AKS 中现已弃用的 Pod Identity)的途径。


工作负载身份的工作原理


工作原理如下:

  1. 启用 OIDC 颁发者:创建或更新 AKS 集群时,需要启用 OIDC 颁发者。在使用 Azure CLI 时,可以使用 --enable-oidc-issuer 和 --enable-workload-identity 标志来完成此操作。
  2. 创建托管身份:您需要在 Azure 中创建一个用户分配的托管身份,您的应用程序将使用它来访问 Azure 资源。
  3. 配置服务帐户:在您的 Kubernetes 集群中,创建一个服务帐户,并使用托管身份的客户端 ID 对其进行注释。
  4. 设置 Pod 配置:将您的 Pod 配置为使用服务帐户,并添加必要的标签 azure.workload.identity/use: "true" 以启用 Workload Identity。
  5. 身份验证和使用:更新您的应用程序以使用支持 Workload Identity 身份验证的 Azure SDK 库。最新版本的 Azure CLI 也支持使用工作负载身份进行身份验证。

分步演示:在 AKS 中实现工作负载身份


先决条件:

  • 已安装并登录 Azure CLI
  • 已安装并配置 kubectl
  • 现有 AKS 集群(版本 1.22 或更高版本)

步骤 1:在 AKS 集群上启用 OIDC issuer


首先,在 AKS 集群上启用 OpenID Connect (OIDC) 颁发器,以允许工作负载身份验证。 

az aks update -g aks-workload-identity-rg-01 -n my-aks-cluster-01 \ 
--enable-oidc-issuer --enable-workload-identity

设置 OIDC issuer URL变量:

export AKS_OIDC_ISSUER="$(az aks show -g aks-workload-identity-rg-01 \-n my-aks-cluster-01 --query "oidcIssuerProfile.issuerUrl" -otsv)"

第 2 步:创建用户分配的托管身份

如果你不熟悉托管身份,请参考我的另外一篇博文:Azure 应用的托管身份与服务主体
创建用户分配的托管身份,您的工作负载将使用该身份访问 Azure 资源并导出其 CLIENT_ID

az identity create --name aks-user-assigned-ma \ 
--resource-group aks-workload-identity-rg-01 --location westus2export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--name aks-user-assigned-ma --resource-group aks-workload-identity-rg-01 --query 'clientId' -otsv)"

步骤 3:创建 Kubernetes 服务帐号


创建一个 Kubernetes 服务帐号,并使用托管身份的客户端 ID 进行注释。创建一个名为 service-account.yaml 的文件 

 

apiVersion: v1
kind: ServiceAccount
metadata:annotations:azure.workload.identity/client-id: "5cee0ff9-0208-4555-93b8-b37eb6f239a9" #Update with your client_idname: "workload-identity-sa"namespace: "default"

 步骤 4:创建 Entra ID 联合身份凭证


创建联合身份凭证,以在 Entra ID 和 Kubernetes 服务帐户之间建立信任。

export SERVICE_ACCOUNT_NAMESPACE="default"
export SERVICE_ACCOUNT_NAME="workload-identity-sa"az identity federated-credential create --name aks-user-assigned-ma-fed-identity \
--identity-name aks-user-assigned-ma --resource-group aks-workload-identity-rg-01 \
--issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \
--audience api://AzureADTokenExchange

 步骤 5:创建具有工作负载身份的 Pod


部署一个使用已配置工作负载身份的服务帐户的 Pod。创建一个名为 azure-cli.yaml 的文件:

 

apiVersion: v1
kind: Pod
metadata:name: azure-cli-workload-identitynamespace: defaultlabels:azure.workload.identity/use: "true"  # Required. Only pods with this label can use workload identity.
spec:serviceAccountName: workload-identity-sacontainers:- image: mcr.microsoft.com/azure-cliname: azure-clicommand: ["sleep"]args: ["3600"]

步骤 6:检查工作负载身份环境变量


设置工作负载身份并部署 Pod 后,我们可以检查自动注入到 Pod 中的环境变量。这些变量对于工作负载身份认证过程至关重要。 

kubectl exec -it azure-cli-workload-identity -- /bin/bash

 

以下环境变量对于工作负载身份认证过程至关重要:

  • AZURE_TENANT_ID:与工作负载身份关联的 Azure Active Directory 租户 ID。
  • AZURE_FEDERATED_TOKEN_FILE:包含用于身份验证的联合令牌的文件路径。
  • AZURE_AUTHORITY_HOST:用于身份验证的 Azure AD 授权主机 URL。
  • AZURE_CLIENT_ID:与工作负载关联的托管身份的客户端 ID。

这些变量由工作负载身份系统自动注入到 Pod 中,使应用程序能够无缝地进行身份验证,而无需直接管理凭据。这些变量的存在表明已为 Pod 正确配置了工作负载身份。

 

步骤 7:添加角色分配并测试身份验证/授权


让我们向托管身份添加“读取者”角色分配并测试 Azure CLI 身份验证。 

az role assignment create --assignee $USER_ASSIGNED_CLIENT_ID --role Reader \--scope /subscriptions/xxxx-xxxx-xxxx

让我们登录到 Pod,并使用 Azure CLI 向 Azure 进行身份验证。您可以使用 az login --federated-token 通过工作负载身份进行身份验证。

az login --federated-token "$(cat $AZURE_FEDERATED_TOKEN_FILE)" \
--service-principal -u $AZURE_CLIENT_ID -t $AZURE_TENANT_ID

 总结

Azure Kubernetes服务(AKS)的WorkloadIdentity功能通过利用Azure Active Directory(Azure AD)和OpenID Connect(OIDC),提供了一种更安全、更简化的身份验证机制,允许Pod无需存储密钥或凭据即可访问Azure资源。该功能解决了凭据管理复杂、安全性不足、与Azure服务集成困难、可扩展性差以及从旧系统过渡的问题。实现WorkloadIdentity的步骤包括启用OIDC颁发者、创建托管身份、配置Kubernetes服务账户、设置Pod配置、创建EntraID联合身份凭证、部署Pod并检查环境变量,最后进行角色分配和身份验证测试。这一过程显著提升了AKS环境中的安全性和管理效率。

http://www.xdnf.cn/news/524629.html

相关文章:

  • 【数据结构篇】排序1(插入排序与选择排序)
  • 「数智化聚合分销生态系统」定制开发:重构全渠道增长引擎
  • 高项-挣值管理TCPI
  • Git本地使用小Tips
  • Docker项目部署深度解析:从基础命令到复杂项目部署
  • NFT市场开发技术全解析:从架构设计到实现
  • 自动化测试框架搭建步骤
  • java基础-抽象类和抽象方法
  • 【成品设计】基于STM32的自动售卖机
  • day30 python 模块、包与库的高效使用指南
  • HTTP由浅入深
  • 前端工程的相关管理 git、branch、build
  • AI日报 - 2025年5月20日
  • GStreamer (二)常⽤命令
  • 人工智能(AI)与BIM:建筑业创新实践的深度融合
  • IPD流程实战:TR技术评审点
  • Ubuntu 20.04之Docker安装ES7.17.14和Kibana7.17.14
  • 【C#】用 DevExpress 创建带“下拉子表”的参数表格视图
  • 电子电路:什么是偏置电路?
  • QT6 源(111):阅读与注释菜单栏 QMenuBar,进行属性与成员函数测试,信号与槽函数测试,并给出源码
  • 力扣每日一题5-18
  • 【神经网络与深度学习】model.eval() 模式
  • Windows环境使用NVM高效管理多个Node.js版本
  • 【数据结构】AVL树的实现
  • CI/CD 深度实践:灰度发布、监控体系与回滚机制详解
  • 嵌入式学习笔记DAY23(树,哈希表)
  • 自学嵌入式 day20-数据结构 链表
  • Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
  • 【android bluetooth 协议分析 01】【HCI 层介绍 7】【ReadLocalName命令介绍】
  • day53—二分法—搜索旋转排序数组(LeetCode-81)