Earthly 构建中的 AWS OIDC 认证配置与源码原理全解
Earthly 构建中的 AWS OIDC 认证配置与源码原理全解【免费下载链接】earthlySuper simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.项目地址: https://gitcode.com/gh_mirrors/ea/earthlyEarthly 的 OpenID Connect (OIDC) 认证能力允许构建过程直接向第三方云厂商目前支持 AWS换取临时凭证从而在 CI 中无需存储任何长期密钥也无需本地环境凭据。本指南以 docs/cloud/oidc.md 为主线完整覆盖 AWS IAM OIDC Provider 与信任策略的配置步骤、RUN --aws --oidc的实战用法并结合当前仓库源码剖析 OIDC 规格解析、特性开关与凭证注入的底层实现帮助读者在 CI尤其是强制 MFA 的场景中安全地让构建访问 AWS 资源。为什么需要 OIDC摆脱 CI 中的密钥存储与 MFA 困境在常规的 CI 流水线中要让构建访问 AWS 资源通常有两种做法把 AWS Access Key 作为明文 secret 存进 CI 环境或者把本地环境的临时凭证带入构建。这两种方式都存在明显短板长期密钥一旦泄露影响范围大且难以追踪本地凭据与 CI 环境耦合可移植性差在强制启用 MFA多因素认证的团队中CI 无法像人一样完成交互式二次认证导致自动化受阻。OIDC 协议恰好解决了这一问题构建过程中由 Earthly Cloud 签发的 ID Token 直接向 AWS 换取短期临时凭证全程无需在 CI 或本地存储任何长期凭据。这也正是该特性被设计为面向 CI 场景的主要原因其完整说明位于 oidc.md。当前仓库中该能力只对 AWS 提供支持源码注释// we currently only support oidc for AWS明确此点其他云厂商的接入属于未来扩展方向。配置流程总览在 Earthfile 中使用 AWS OIDC 前需要完成两部分工作AWS 侧配置一次性在 AWS IAM 中注册 Earthly 作为 OIDC Provider并创建可被该 Provider 承担的 IAM RoleEarthfile 侧配置开启VERSION --run-with-aws --run-with-aws-oidc 0.8特性并在RUN命令中使用--aws --oidc标志。第一步在 AWS IAM 中注册 Earthly OIDC Provider参照 AWS IAM 官方文档创建 OIDC identity provider关键配置如下配置项值Provider URLhttps://api.earthly.devAudiencests.amazonaws.com即Earthly Cloud 的令牌签发端点https://api.earthly.dev作为受信任的身份源sts.amazonaws.com作为 audience受众表示这些令牌专门用于调用 AWS STS 服务。第二步创建或复用IAM Role 并配置信任策略创建一个新的 IAM Role或复用已有的 Role并注意两点限制权限Role 所附的策略决定了承担该角色后能执行哪些操作务必遵循最小权限原则限制谁可以承担通过信任策略trust policy精确指定允许承担的 Earthly 组织/项目成员。一个典型的信任策略示例如下{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: { Federated: oidc-provider-name }, Action: sts:AssumeRoleWithWebIdentity, Condition: { StringEquals: { api.earthly.dev:aud: sts.amazonaws.com, api.earthly.dev:sub: earthly-org/earthly-project } } } ] }其中各占位符含义如下oidc-provider-name第一步中创建的 OIDC Provider 的 ARNearthly-org用户所属的 Earthly 组织在 Earthfile 的PROJECT指令或构建执行参数中指定下文详述earthly-project用户拥有读取权限的 Earthly 项目权限等级详见 managing-permissions.md同样在PROJECT指令或构建执行参数中指定。信任策略的灵活组合信任策略的Condition部分支持多种规则可以按需混合搭配精确控制团队内谁能承担该 Role允许整个组织所有成员访问使用StringLike 通配符Condition: { StringLike: { api.earthly.dev:sub: earthly-org/* } }仅允许指定用户访问基于与 Earthly 账号绑定的邮箱Condition: { StringEquals: { api.earthly.dev:email: user-email } }其中user-email是该用户 Earthly 账号对应的邮箱地址。第三步在 Earthfile 中使用 OIDC 访问 AWSOIDC 配置完成后即可在构建中访问 AWS 资源。原文档给出了一个列出 S3 对象的完整示例VERSION --run-with-aws --run-with-aws-oidc 0.8 PROJECT your-org/your-project aws: FROM amazon/aws-cli LET OIDCrole-arnarn:aws:iam::1234567890:role/your-oidc-role,session-namemy-session,regionus-east-1 RUN --aws --oidc$OIDC aws s3 ls逐行解读这个示例VERSION --run-with-aws --run-with-aws-oidc 0.8同时开启两个实验特性。--run-with-aws允许RUN命令使用 AWS 凭据features.go--run-with-aws-oidc则允许通过 OIDC Provider 获取 AWS 凭据features.goPROJECT your-org/your-project声明本次构建所属的 Earthly 组织与项目信任策略中的api.earthly.dev:sub即与此对应LET OIDC...以逗号分隔的键值对定义 OIDC 规格支持 ARG 展开RUN --aws --oidc$OIDC aws s3 ls执行命令前Earthly 通过 OIDC 换取临时 AWS 凭据并注入命令环境。--oidc规格详解四个可配置键RUN --aws --oidcoidc-spec中的oidc-spec是一串逗号分隔的键值对允许的键及含义见 earthfile.md键说明示例session-name出现在 AWS 日志中的会话名称。若多个RUN ... --oidc命令使用相同session-name它们将共享同一个临时令牌session-namemy-sessionrole-arn要为其获取凭据的 AWS Role 的 ARNrole-arnarn:aws:iam::123456789012:role/some-roleregion获取凭据时连接的 AWS 区域同时也是后续 AWS 命令默认使用的区域可在命令中覆盖不指定则使用 AWS 全局端点regionus-east-1session-duration临时凭据的有效时长默认取 AWS 最小值 15 分钟session-duration20m源码中的解析与校验规则oidc-spec的解析实现在 util/oidcutil/aws.go其行为可以作为上述表格的补充证据ParseAWSOIDCInfoaws.go首先把字符串解析为键值映射再通过mapstructure解码为AWSOIDCInfo结构体aws.gorole-arn与session-name是必填项缺失会直接报错requiredFields定义于 aws.go出现未知键同样报错key(s) [...] are invalidrole-arn必须是iam服务且资源以role/开头的合法 ARNaws.gosession-duration必须落在900 秒15 分钟到 43200 秒12 小时之间aws.go超出范围会提示duration must be between 900s and 43200s。底层实现从 Earthfile 到临时凭据注入RUN --aws --oidc的完整调用链横跨解释器与转换器两个模块理解它有助于排查问题。解释器阶段特性开关与前置校验earthfile2llb/interpreter.go的handleOIDC函数interpreter.go负责处理该标志依次执行若未开启--run-with-aws-oidc特性报错RUN --aws-oidc requires the --run-with-aws-oidc feature flag若未同时使用--aws报错RUN --oidc also requires the --aws RUN flag对oidc-spec执行 ARG 展开expandArgs因此LET OIDCrole-arn$ROLE_ARN,...这类引用变量的写法是合法的调用oidcutil.ParseAWSOIDCInfo完成上节所述的解析与校验。转换器阶段以 Secret 形式注入 AWS 凭据earthfile2llb/converter.go的awsSecrets函数converter.go负责将凭据接入构建当OIDCInfo非空时把 OIDC 信息编码进 secret ID 的查询参数secretprovider.SetURLValuesFunc为每个 AWS 凭据项secretprovider.AWSCredentials创建 LLB secret挂载到/run/secrets/name权限0444同时生成对应的环境变量赋值如AWS_ACCESS_KEY_ID$(cat /run/secrets/...)注入命令环境。也就是说OIDC 换取到的临时凭据最终是以构建内 secret 环境变量的形式提供给RUN命令的命令本身并不接触任何明文密钥。与其他命令的联动OIDC 信息不仅作用于普通RUN也会传递到WITH DOCKER场景解释器在handleOIDC后将其写入i.withDocker.OIDCInfointerpreter.go并在WITH DOCKER的四种执行路径本地 registry、本地 tar、远程 registry、远程 tar中一并传入参见 with_docker_run_local_reg.go、with_docker_run_local_tar.go、with_docker_run_reg.go、with_docker_run_tar.go即 Docker 容器内执行命令时同样可以拿到 AWS 临时凭据。集成测试仓库如何验证该能力仓库的 tests/oidc 目录提供了完整的集成测试可作为可复现的参考用例aws.earth以VERSION --run-with-aws --run-with-aws-oidc 0.8开头声明PROJECT other-serviceoidc-ci-test/my-project。oidc目标先用普通RUN验证环境变量中没有任何AWS_前缀变量基线为 0再通过RUN --aws --oidc$OIDC验证环境变量数量变为 4即临时凭据已注入oidc-with-docker目标在WITH DOCKER块内重复同样的断言验证容器内凭据注入同样生效test-aws.sh 驱动测试执行Earthfile 中test-aws-failure目标则验证了信任策略错误时的失败行为——使用一个不存在的 Role ARN断言输出中包含make sure the role ... has a valid trust policy configured in AWS的提示。注意事项与限制实验特性RUN --aws与RUN --oidc均为 experimental 状态必须通过VERSION --run-with-aws --run-with-aws-oidc 0.8显式开启对应源码 features.go 中标记为 unreleased 的特性开关仅支持 AWS当前实现只覆盖 AWS--oidc也只能与--aws组合使用单独使用会直接报错PROJECT 声明的重要性信任策略通过api.earthly.dev:suborg/project与api.earthly.dev:email进行条件匹配因此 Earthfile 中的PROJECT指令必须与实际组织/项目一致否则 STS 换证会失败凭据为短期令牌默认有效期 15 分钟可通过session-duration延长至最多 12 小时令牌过期后需要重新换取最小权限原则Role 的权限策略与信任策略应尽量收紧仅授予构建实际需要的 AWS 操作。小结Earthly 的 AWS OIDC 集成让构建可以无密钥地访问云资源AWS 侧注册 Provider、配置信任策略Earthfile 侧开启特性并声明PROJECT再以RUN --aws --oidc换取短期临时凭据。从 oidc.md 的配置指南到 oidcutil/aws.go 的严格校验再到 converter.go 的 secret 注入整条链路在仓库中均有清晰的实现与测试佐证适合作为 CI 安全访问 AWS 的落地模板。【免费下载链接】earthlySuper simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.项目地址: https://gitcode.com/gh_mirrors/ea/earthly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LDR6028 USB-C协议协处理器硬件设计与PPS实现指南

LDR6028 USB-C协议协处理器硬件设计与PPS实现指南

简介:本资源为LDR6028 USB PD通信芯片最新版官方规格书(V2.8),面向嵌入式硬件工程师、无线音频设备开发者及电源管理方案设计人员,解决无线领夹麦克风等便携式音频设备的USB Type-C快充协议兼容性与安全电源管理难题。…

2026/9/23 13:09:55 阅读更多 →
手写实现蒙古海军司令:3个避坑点搞定复杂逻辑

手写实现蒙古海军司令:3个避坑点搞定复杂逻辑

手写实现蒙古海军司令:3个避坑点搞定复杂逻辑 报错堆栈里满屏的 NullPointerException 和 IndexOutOfBoundsException…

2026/9/23 13:09:54 阅读更多 →
H100 Datasheet 深度解读:PCIe带宽、HBM3利用率与NVLink调优实战

H100 Datasheet 深度解读:PCIe带宽、HBM3利用率与NVLink调优实战

简介:本资源为NVIDIA官方发布的H100 Tensor Core GPU技术规格白皮书(Datasheet),面向AI工程师、高性能计算研发人员及数据中心架构师,用于深入理解该旗舰GPU的硬件特性、加速能力与部署适配要点。文档全面涵盖Hopper™…

2026/9/23 13:09:53 阅读更多 →

最新新闻

VisiData Loader 开发指南:从 open_<filetype> 到 Saver 的完整实战教程

VisiData Loader 开发指南:从 open_<filetype> 到 Saver 的完整实战教程

数据分析CLI数据可视化 【免费下载链接】visidata A terminal spreadsheet multitool for discovering and arranging data 项目地址: https://gitcode.com/gh_mirrors/vi/visidata 点击查看 免费下载 本指南以 VisiData 官方 API 文档(docs/api/loader…

2026/9/25 7:15:41 阅读更多 →
PrusaSlicer slic3r-platform 跨平台渲染运行时架构解析:AbstractRenderModule 与 AbstractRenderCanvas 设计精读

PrusaSlicer slic3r-platform 跨平台渲染运行时架构解析:AbstractRenderModule 与 AbstractRenderCanvas 设计精读

桌面应用3D渲染 【免费下载链接】PrusaSlicer G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.) 项目地址: https://gitcode.com/gh_mirrors/pr/PrusaSlicer 点击查看 免费下载 导读:本文以 src/slic3r-platform/README.md 为骨架…

2026/9/25 7:15:41 阅读更多 →
cuDF pylibcudf.replace 模块指南:空值填充、查找替换与数值钳制(含 C++ 底层实现剖析)

cuDF pylibcudf.replace 模块指南:空值填充、查找替换与数值钳制(含 C++ 底层实现剖析)

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 pylibcudf.replace 是 cuDF GPU DataFrame 库(RAPIDS 生态)中负责列内数值与空值替换…

2026/9/25 7:15:41 阅读更多 →
Qt+MySQL教务系统毕业设计:从数据库设计到驱动避坑全指南

Qt+MySQL教务系统毕业设计:从数据库设计到驱动避坑全指南

简介:这是一套基于Qt框架与MySQL数据库的教务系统完整源码,包含学生、教师、管理员三种身份模块,覆盖课程管理、成绩录入与查询、用户权限区分等典型业务场景,面向计算机相关专业学生开展课程设计、毕业设计或项目初期演示使用&am…

2026/9/25 7:15:41 阅读更多 →
MCP不是协议,而是工具能力调用的统一接口规范

MCP不是协议,而是工具能力调用的统一接口规范

1. 先别急着查文档:MCP不是新协议,而是“能力调度员”的代号你搜“MCP”时,页面上跳出来的全是碎片:蓝湖MCP、Figma MCP、Playwright MCP、BurpSuite MCP、Workbuddy MCP……还有人问“手机怎么获取MCP服务”“Chrome扩展里启用MC…

2026/9/25 7:15:41 阅读更多 →
微信小程序省市县三级联动:数据驱动组件化实现

微信小程序省市县三级联动:数据驱动组件化实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 7:14:40 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →