从 GitHub Actions 配置对 Google Cloud 的身份验证包括安全考虑,这些考虑使得看似合理的建议使用 GitHub 的不可变|唯一 ID(所有者|存储库)而不是名称进行绑定。
尽管 Google 建议使用 ID,但其文档中引用的是名称:
gcloud iam workload-identity-pools providers create-oidc "my-repo" \
--project="${PROJECT_ID}" \
--location="global" \
--workload-identity-pool="github" \
--display-name="My GitHub repo Provider" \
--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner" \
--attribute-condition="assertion.repository_owner == '${OWNER}'" \
--issuer-uri="https://token.actions.githubusercontent.com"
我知道如何修改--attribute-condition
以使用 ID,但是,我该如何更改--attribute-mapping
以合并它们呢?
天真地修改--attribute-mapping
价值观以例如attribute.repository_id=assertion.repository_id
匹配--attribute-condition
价值观assertion.repository_owner_id=="{OWNER_ID}"
是行不通的。
我知道 ID 声明已包含在内,这要感谢GitHub OIDC Debugger:
{
...
"repository": "{OWNER}/{REPO}",
"repository_id": "{REPO_ID}",
"repository_owner": "{OWNER}",
"repository_owner_id": "{OWNER_ID}",
...
}
解决方案似乎是:
--attribute-mapping
不变(必须包含repository
和repository_owner
)或添加(repository_id
和repository_owner_id
)--attribute-condition
(出于安全考虑)以及可选/冗余(!?)包括/保留名称谓词。最低限度:
除了 Azeem 的评论之外,您还需要确保保留单引号。我相信您在原始代码块中已经使用了它们。