能否在sts:AssumeRoleWithWebIdentity信任策略中使用自定义断言?
问题:GitLab OIDC角色信任策略能否使用自定义environment断言?
我通过GitLab流水线,使用OpenID Connect(sts:AssumeRoleWithWebIdentity)扮演角色访问AWS资源。目前已通过sub断言将策略限制到特定项目和分支,GitLab的sub格式为project_path:{group}/{project}:ref_type:{type}:ref:{branch_name}。
我希望把JWT负载中包含的environment自定义断言也加入角色信任策略的条件,已完成https://gitlab.com作为OIDC身份提供商的配置。
当前的信任策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::0123456789:oidc-provider/gitlab.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "gitlab.com:sub": "project_path:my-group/my-project:ref_type:branch:ref:main" } } } ] }
我想使用的策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::0123456789:oidc-provider/gitlab.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "gitlab.com:sub": "project_path:my-group/my-project:ref_type:branch:ref:main", "gitlab.com:environment": "production" } } } ] }
请问是否可以在信任策略中使用这类自定义断言?
回答
完全可以在IAM角色信任策略中使用environment这类自定义断言作为条件,只需满足两个前提:
GitLab签发的JWT负载中确实包含该断言:你需要确认GitLab在流水线生成的JWT里已经加入
environment字段。可以在流水线中添加步骤验证:echo $CI_JWT_V2 | base64 -d | jq执行后检查输出的JSON结构,确认
environment字段存在且值符合预期。条件键格式正确:你给出的策略中使用
gitlab.com:environment作为条件键是正确的——AWS会自动将OIDC提供商的域名作为自定义断言的命名空间前缀,确保断言的唯一性。
你提供的目标信任策略是完全有效的,直接应用即可实现同时通过sub和environment断言限制角色的访问权限。
内容的提问来源于stack exchange,提问作者Marcelotsvaz
相关产品推荐
相关产品推荐

