当前位置: 首页 > 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环境中的安全性和管理效率。

相关文章:

  • AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解
  • Linux多进程 写时拷贝 物理地址和逻辑地址
  • MATLAB中NLP工具箱支持聚类算法
  • 第 1 章:数字 I/O 与串口通信(GPIO UART)
  • 音视频之H.265/HEVC率失真优化
  • 7-2 银行业务队列简单模拟
  • HarmonyOS:应用及文件系统空间统计
  • 山东大学计算机图形学期末复习13——CG14上
  • 智能投影仪行业2025数据分析报告
  • 吉林省建筑工程专业技术人员职称评审实施办法
  • 牛客网 NC274692 题解:素世喝茶
  • 基于亚博K210开发板——安全散列算法加速器测试
  • Windows逆向工程提升之PE文件的基本概念
  • YOLOV3 深度解析:目标检测的高效利器
  • 大语言模型怎么进行记忆的
  • TDengine 安全部署配置建议
  • 人工智能、机器学习与深度学习:概念解析与内在联系
  • ALTER CONVERSION使用场景
  • 树莓派(Raspberry Pi)中切换为国内的软件源
  • CSS- 4.6 radiu、shadow、animation动画
  • 王毅同德国外长瓦德富尔通电话
  • 男子服用头孢后饮酒应酬致昏迷在家,救援人员破门施救后脱险
  • 外交部驻港公署正告美政客:威胁恫吓撼动不了中方维护国家安全的决心
  • 中方是否计划解除或调整稀土出口管制?外交部回应
  • “AD365特应性皮炎疾病教育项目”启动,助力提升认知与规范诊疗
  • 刘强东坐镇京东一线:管理层培训1800人次,最注重用户体验