无法通过 Bitbucket Pipeline 的 OIDC 连接在 AWS 上获取“branchName”

问题描述 投票:0回答:1

我正在使用 bitbucket 管道,并且想讨论如何通过 bitbucket 管道在 AWS 上进行部署。我正在使用 OIDC 连接。 我想提出一个条件,即部署必须仅针对“主”分支进行。 在我的 IAM 角色中,我为分支添加了以下条件:

"StringEquals"

{

"api.bitbucket.org/2.0/workspaces/<workspace>/pipelines-config/identity/oidc:branchName": "main"

}

在AWS上添加此条件后,bitbucket管道无法连接到AWS。

任何关于 AWS IAM 上不满足此条件的建议。或者任何安全的方法来做到这一点。

amazon-web-services openid-connect bitbucket-pipelines
1个回答
2
投票

不幸的是,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

这里:

  • xxxxxxx :您的 AWS 帐号,例如
    123456789
  • yyyyyyy :Bitbucket 工作区名称,例如
    pavel-maslov
  • zzzzzzzz :工作区 UUID,例如
    aa80e976-01e0-4228-99f6-9d6098e147a4
  • bitbucket-oidc:Bitbucket 管道将承担的 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": {
        "StringLike": {
          "api.bitbucket.org/2.0/workspaces/yyyyyyy/pipelines-config/identity/oidc:sub": "{1a779bcb-1aa4-430e-8f66-128b5fef4183}:*"
        }
      }
    }
  ]
}

其中

1a779bcb-1aa4-430e-8f66-128b5fef4183
是您的存储库 UUID。

© www.soinside.com 2019 - 2024. All rights reserved.