Bitbucket Pipelines与AWS CodeArtifact OIDC集成遇401认证问题
问题解答
CodeArtifact 401认证错误排查与解决
你对OIDC集成的理解存在偏差:通过OIDC获取AWS临时凭证后,访问CodeArtifact的包管理客户端(如Maven)仍需单独生成授权令牌。两者的作用层级不同:
- OIDC认证是让Bitbucket Pipelines进程获得调用AWS API的权限
- CodeArtifact的Maven客户端需要的是专属仓库授权令牌,必须用已获取的AWS凭证调用
aws codeartifact get-authorization-token生成
你需要在部署Maven构件的Pipeline步骤中补充以下操作:
- 确保已通过OIDC完成AWS身份 Assume(Bitbucket Pipelines中可通过
aws sts assume-role-with-web-identity实现,或遵循官方OIDC集成流程配置) - 生成CodeArtifact授权令牌:
export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain <你的CodeArtifact域名> --domain-owner <AWS账户ID> --region $AWS_REGION --query authorizationToken --output text) - 在Maven部署命令中注入令牌作为仓库密码,示例:
mvn deploy -DaltRepository.codeartifact.url=https://<域名>-<账户ID>.d.codeartifact.$AWS_REGION.amazonaws.com/maven/<仓库名称>/ -DaltRepository.codeartifact.username=aws -DaltRepository.codeartifact.password=$CODEARTIFACT_AUTH_TOKEN
额外检查项:确认IAM角色的信任策略是否精准匹配Bitbucket OIDC的受众(aud)和仓库标识(sub),避免因权限范围限制导致令牌生成失败。
--role-session-name参数说明
build-session并非默认值,它是自定义的会话名称,用于在AWS CloudTrail日志中标识临时凭证的来源。你可以根据需求修改(比如改为bitbucket-release-pipeline),只要符合AWS命名规则(1-64字符,支持字母、数字、连字符、下划线、点号、@)即可;不修改也不影响功能,仅日志中的会话标识会沿用示例值。
内容的提问来源于stack exchange,提问作者Shvalb
相关产品推荐
相关产品推荐

