You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现AKS部署容器与Azure Event Hub的认证授权?

问题描述

本人对Azure安全知识有限(如Identity、Principal ID、Entra ID等),若问题浅显还请见谅。此前在容器应用模型中,我已创建身份并用于Event Hub角色分配,该流程可行。

当前场景:我拥有一个AKS集群,镜像存储于ACR注册表,通过命令kubectl create deployment <> --image=my.azureacr.io/imagename:v3创建部署,显示deployment.apps/somename已创建,但执行kubectl get deployment返回可用实例数为0(工作负载显示黄色三角标识),且我不知道如何查看日志。

我的应用配置如下:

spring.cloud.azure.eventhubs.namespace=hents
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name=mynd
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name=temckpoint

spring.cloud.stream.bindings.supply-out-0.destination=sb

spring.cloud.function.definition=supply;
spring.cloud.stream.poller.initial-delay=0
spring.cloud.stream.poller.fixed-delay=1000

配置中未使用连接字符串或共享访问签名。现咨询:如何实现AKS部署的应用与Azure Event Hub之间的认证、授权及信任关系?


解决方案

一、先排查AKS部署异常(解决可用实例数为0的问题)

  1. 查看Pod状态与事件
    先找到部署对应的Pod:

    kubectl get pods -l app=<你的部署名称>
    

    再查看Pod的详细状态和启动事件,定位失败原因(比如镜像拉取权限不足、配置错误等):

    kubectl describe pod <Pod名称>
    
  2. 查看容器日志
    如果Pod已创建但无法正常启动,直接查看容器日志:

    kubectl logs <Pod名称>
    

    若包含多个容器,需指定容器名称:

    kubectl logs <Pod名称> -c <容器名称>
    

二、实现AKS应用与Azure Event Hub的认证授权(基于Azure工作负载身份)

推荐使用Azure工作负载身份(替代传统托管身份),适配AKS场景的身份认证需求,步骤如下:

1. 启用AKS集群的工作负载身份功能

确保AKS集群已开启OIDC issuer和工作负载身份:

az aks update -n <AKS集群名称> -g <资源组名称> --enable-oidc-issuer --enable-workload-identity

获取集群的OIDC issuer URL(后续步骤会用到):

az aks show -n <AKS集群名称> -g <资源组名称> --query "oidcIssuerProfile.issuerUrl" -o tsv

2. 创建Azure AD应用与服务主体

  • 创建Azure AD应用,记录返回的appId(客户端ID)和id(对象ID):
    az ad app create --display-name <自定义应用名称>
    
  • 关联创建服务主体:
    az ad sp create --id <上面获取的appId>
    

3. 为服务主体分配必要权限

根据应用需求(发送/接收Event Hub事件、操作存储账户checkpoint),分配对应Azure角色:

  • 发送Event Hub事件:分配Azure Event Hubs Data Sender角色
  • 接收Event Hub事件:分配Azure Event Hubs Data Receiver角色
  • 操作存储账户Blob:分配Storage Blob Data Contributor角色

执行角色分配命令:

# 分配Event Hub命名空间权限
az role assignment create \
  --role "Azure Event Hubs Data Sender" \
  --assignee <服务主体对象ID> \
  --scope "/subscriptions/<订阅ID>/resourceGroups/<资源组名称>/providers/Microsoft.EventHub/namespaces/<Event Hub命名空间>"

# 分配存储账户权限
az role assignment create \
  --role "Storage Blob Data Contributor" \
  --assignee <服务主体对象ID> \
  --scope "/subscriptions/<订阅ID>/resourceGroups/<资源组名称>/providers/Microsoft.Storage/storageAccounts/<存储账户名称>"

4. 绑定AKS服务账户与Azure AD应用

  • 在AKS中创建服务账户:
    kubectl create serviceaccount <自定义服务账户名称> -n <应用所在命名空间>
    
  • 建立AKS服务账户与Azure AD应用的信任关系:
    az ad app federated-credential create \
      --id <Azure AD应用对象ID> \
      --parameters '{
        "name": "<自定义凭证名称>",
        "issuer": "<之前获取的AKS OIDC issuer URL>",
        "subject": "system:serviceaccount:<应用所在命名空间>:<服务账户名称>",
        "description": "AKS workload identity credential",
        "audiences": ["api://AzureADTokenExchange"]
      }'
    

5. 修改AKS部署配置,启用工作负载身份

编辑部署YAML(或执行kubectl edit deployment <部署名称>),添加服务账户和环境变量:

spec:
  template:
    spec:
      serviceAccountName: <你的服务账户名称>
      containers:
      - name: <容器名称>
        image: my.azureacr.io/imagename:v3
        env:
        - name: AZURE_CLIENT_ID
          value: <Azure AD应用的appId>
        - name: AZURE_TENANT_ID
          value: <你的Azure租户ID>

6. 验证Spring Boot应用配置

你的现有配置已采用无连接字符串的方式,Spring Cloud Azure会自动通过工作负载身份获取访问令牌,只需确保项目依赖中包含spring-cloud-azure-starter-eventhubs和spring-cloud-azure-starter-storage-blob相关依赖,版本与Spring Boot版本匹配即可。


内容的提问来源于stack exchange,提问作者Kris Swat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:00:58