华为云UCS-使用工作负载Identity安全访问云服务:获取IAM Token

时间:2024-10-22 15:52:22

获取IAM Token

  1. 创建 ServiceAccount,此处 ServiceAccount 的名称需要与2时填写的 ServiceAccountName 保持一致。

    apiVersion: v1 
    kind: ServiceAccount 
    metadata: 
     name: test_sa_name # 与配置身份转换规则处保持一致

  2. 如下所示,在工作负载中新增 ServiceAccount 以及 Volume 相关配置。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
          version: v1
      template:
        metadata:
          labels:
            app: nginx
            version: v1
        spec:
          containers:
          - name: container-1
            image: nginx:latest
            volumeMounts
            - mountPath: "/var/run/secrets/tokens" # 将Kubernetes生成的ServiceAccountToken 挂载到 /var/run/secrets/tokens/token_path 文件内
              name: token-volume
          imagePullSecrets:
          - name: default-secret
          serviceAccountName: test_sa_name   # 上一步创建的ServiceAccount的名称
          volumes:
          - name: token-volume
            projected:
              defaultMode: 420
              sources:
              - serviceAccountToken:
                  audience: ucs-cluster-identity   # 此处取值必须为身份提供商的客户端ID
                  expirationSeconds: 7200     # 过期时间
                  path: token_path     # 路径名称,可自定义

  3. 创建完成后,登录到容器中获取 Token。

  4. 构造请求体数据,项目ID的获取请参见获取项目ID

    {
        "auth" : { 
          "id_token" : { 
            "id" : "eyJhbGciOiJSUzIXXXXX"   // 上一步获得的 token 内容
          },
          "scope": {
            "project" : {
              "id" : "05495693df80d3c92fa1c01795c2be02",  // 项目 ID
              "name" : "cn-north-7"  
            }
          }
        }
      }

  5. 请求IAM接口以获取IAM Token,IAM的Endpoint信息请参见地区和终端节点

    curl -i --location --request POST 'https://{{iam endpoint}}/v3.0/OS-AUTH/id-token/tokens'  --header 'X-Idp-Id: {{workload_identity}}'  --header 'Content-Type: application/json'  --data @token_body.json
    • workload_identity为1中注册的身份提供商名称,此示例内为 ucs-cluster-identity。
    • token_body.json 为构造的请求体数据文件。

  6. 返回体内获取IAM Token,响应消息头中 X-Subject-Token 字段即为 IAM Token。

support.huaweicloud.com/bestpractice-ucs/ucs_03_0007.html