我期望的工作流程看起来像这样。
Terraform 存储在 Bitbucket 中。推送触发器,Jenkins 作业。(但 Jenkins 代理的默认 IAM 角色无法执行某些操作。例如写入 IAM 对象)。
我想创建一个我的 Jenkins 盒子可以承担的角色,但前提是代码的推送者以某种方式得到验证。Bitbucket 不支持 GPG 密钥。
我觉得角色信任关系中应该有一些东西是我无法通过脚本来欺骗的,这是 Bitbucket 提交和角色假设之间的握手。
我就是不知道该做什么。
答案1
我认为这是不可能的。
请记住,在 git 中,提交代码和推送代码是两个不同的操作,可以由不同的用户执行。用户可以推送任何其他用户已提交的代码。
但是,Jenkins 只知道提交的作者,不知道将这些提交推送到 Bitbucket 的用户。此外,在 git 中,提交的作者/电子邮件可能会被伪造。因此,Jenkins 永远无法 100% 确定谁提交了代码或谁推送了代码。
对于我们的 Terraform 存储库,我们通过限制允许合并到主分支的用户(未经授权的用户需要打开 PR)解决了此问题。当然,只有推送到主分支才会触发 Terraform 运行。