我正在使用 bitbucket 管道,并且想讨论如何通过 bitbucket 管道在 AWS 上进行部署。我正在使用 OIDC 连接。 我想提出一个条件,即部署必须仅针对“主”分支进行。 在我的 IAM 角色中,我为分支添加了以下条件:
"StringEquals"
{
"api.bitbucket.org/2.0/workspaces/<workspace>/pipelines-config/identity/oidc:branchName": "main"
}
在AWS上添加此条件后,bitbucket管道无法连接到AWS。
任何关于 AWS IAM 上不满足此条件的建议。或者任何安全的方法来做到这一点。
不幸的是,AWS 只允许在信任策略中使用一组声明(即
aud
和sub
)。下面的配置将允许 yyyyyyy
工作区下的任何存储库承担 bitbucket-oidc
角色。
访问控制策略文档(您的 IAM 角色的信任关系):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::xxxxxxx:oidc-provider/api.bitbucket.org/2.0/workspaces/yyyyyyy/pipelines-config/identity/oidc"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"api.bitbucket.org/2.0/workspaces/yyyyyyy/pipelines-config/identity/oidc:aud": "ari:cloud:bitbucket::workspace/zzzzzz"
}
}
}
]
}
bitbucket-pipelines.yml:
image: amazon/aws-cli
pipelines:
branches:
main:
- step:
name: Test OpenID Connect provider with AWS
oidc: true
script:
- export AWS_REGION=eu-central-1
- export AWS_ROLE_ARN=arn:aws:iam::xxxxxxx:role/bitbucket-oidc
- export AWS_WEB_IDENTITY_TOKEN_FILE=$(pwd)/web-identity-token
- echo $BITBUCKET_STEP_OIDC_TOKEN > $(pwd)/web-identity-token
- aws sts get-caller-identity
- aws s3 ls
这里:
123456789
pavel-maslov
aa80e976-01e0-4228-99f6-9d6098e147a4
请参阅完整文档此处。
附注 您可以进一步限制您的角色,例如仅由工作区中的某个存储库假定(但仅此而已,因此没有分支过滤,抱歉):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::xxxxxxx:oidc-provider/api.bitbucket.org/2.0/workspaces/yyyyyyy/pipelines-config/identity/oidc"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"api.bitbucket.org/2.0/workspaces/yyyyyyy/pipelines-config/identity/oidc:sub": "{1a779bcb-1aa4-430e-8f66-128b5fef4183}:*"
}
}
}
]
}
其中
1a779bcb-1aa4-430e-8f66-128b5fef4183
是您的存储库 UUID。