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

使用可复用工作流时Github Actions Docker无法获取凭证

问题描述

在被调用的GitHub Actions工作流中,使用aws-actions/configure-aws-credentials动作配置AWS凭证,再通过docker/login-action登录ECR时,抛出错误:

Error: Could not load credentials from any providers

相同逻辑在调用方工作流中可正常运行,怀疑问题与环境变量存储方式有关,第二个AWS凭证动作用于承担ECR仓库所在的角色。

调用方工作流代码:

jobs:
  build_and_deploy:
    uses: <Owner>/<repo>/.github/workflows/called_workflow.yml@master
    secrets: inherit
    with:
        environment: dev
        aws_account_number: 123456789123
        aws_region: us-east-1
        docker_image_name: thisisanimage
        aws_profile_name: bestprofile
        aws_role_arn: arn:aws:iam::<account>:role/<rolename>

被调用工作流代码:

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    environment: ${{ inputs.environment }}
 - name: Configure AWS Credentials
    uses: aws-actions/configure-aws-credentials@v2
    with:
      aws-region: <region>
      role-to-assume: arn:aws:iam::<account1>:role/<assumedrole1>
      role-skip-session-tagging: true
      role-duration-seconds: 1200
      mask-aws-account-id: false
 - name: Configure other AWS Credentials
    uses: aws-actions/configure-aws-credentials@v2
    with:
      aws-region: <region>
      role-to-assume: arn:aws:iam::<account2>:role/<assumedrole2>
      role-skip-session-tagging: true
      role-duration-seconds: 1200
      mask-aws-account-id: false
      role-chaining: true
  - name: Login to Docker
    uses: docker/login-action@v2
    with:
      registry: <account2>.dkr.ecr.<region>.amazonaws.com/<repository>
排查思路
  • 检查输入参数的正确引用
    被调用工作流中的<region>、<account1>、<account2>等占位符,必须替换为调用方传入的inputs变量(例如${{ inputs.aws_region }}、${{ inputs.aws_account_number }})。如果直接保留占位符,会导致凭证配置时没有有效的AWS账号和区域信息,进而引发登录失败。同时确认调用方传入的aws_role_arn是否在被调用工作流中正确引用,角色ARN是否匹配目标账号。

  • 验证角色链的权限配置
    第二个configure-aws-credentials动作启用了role-chaining: true,需确保第一个角色(的assumedrole1)的信任策略允许其扮演第二个角色(的assumedrole2);同时第二个角色的权限策略必须包含ecr:GetAuthorizationToken(ECR登录必备权限),以及其他必要的ECR操作权限(如ecr:BatchCheckLayerAvailability、ecr:PutImage等)。

  • 确认环境变量的存在与覆盖
    aws-actions/configure-aws-credentials会设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN三个核心环境变量。可在docker/login-action前添加调试步骤,打印变量是否存在(例如run: echo "AWS_ACCESS_KEY_ID starts with: ${AWS_ACCESS_KEY_ID:0:4}"),确认第二个凭证动作是否正确覆盖了这些变量,且在登录步骤执行时变量未丢失。

  • 检查工作流环境的权限设置
    被调用工作流指定了environment: ${{ inputs.environment }},需确认该环境是否允许继承调用方传入的secrets,以及被调用工作流所在仓库是否有额外的权限限制,导致AWS相关secrets无法正常传递。

  • 验证动作版本兼容性
    当前使用的aws-actions/configure-aws-credentials@v2和docker/login-action@v2版本可能存在兼容性问题,或在被调用工作流场景下有已知bug。尝试升级到最新稳定版本(如aws-actions/configure-aws-credentials@v4、docker/login-action@v3),观察问题是否解决。

  • 检查角色会话有效期
    两个角色的会话时长均设置为1200秒(20分钟),如果工作流执行时间过长,可能导致会话过期。可适当延长有效期(最长支持3600秒),或检查步骤执行时间是否超过了会话时长限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:10:19