AWS CodeBuild列出其他AWS账户的S3存储桶

3

enter image description here我有一个建立在账户A上的代码构建,以及一个存在于账户B上的S3存储桶。我尝试在账户B上设置了一个受信任的IAM STS角色和策略,并在账户A上包含了账户B的IAM角色,将此策略附加到我的codebuild服务角色上。但是,我的codebuild仍然显示s3上的存储桶。我在这里做错或配置了什么吗?

在账户B上拥有信任关系的角色

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Account:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]

Account A的政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::Account B:role/testcli"
        }
    ]
}

CodeBuild BuildSpec.yml

version: 0.2

env:
  variables:
    TF_VERSION: "0.12.28"

phases:
  install:
    commands:
#       install required binary
      - echo test
  pre_build:
    commands:
      - echo print s3 buckets
      - aws s3 ls

  post_build:
    commands:
      - echo test1

你能提供更多细节吗?具体的策略、IAM角色以及你的buildspec.yml文件? - Marcin
@Marcin已更新问题并提供了所请求的信息。 - patrick
您是否想从CodeBuild访问Acc B中的特定存储桶?如果是,那么您可以通过存储桶策略启用此功能。 - Marcin
@Marcin 我认为在存储桶中添加策略可能会起作用,但如果有10个帐户访问特定的存储桶,每当添加新帐户时,我都必须去更新存储桶策略。 - patrick
我知道了。那么你就需要在 buildspec.yml 中显式地扮演角色。我可以提供附加细节的答案。 - Marcin
1个回答

3
假设您的CodeBuild(CB)具有sts:AssumeRole权限,则在buildspec.yml中,您需要明确地扮演Acc B中的角色。
两种方法可以实现这一点:
  • buildspec.yml中“手动”调用assume-role。调用将返回一组临时凭据。然后可以使用获取的凭据从CB执行AWS CLI命令。

  • 在CB容器中设置AWS CLI凭据文件,如此处此处所示,以扮演角色。

在两种情况下,CB服务角色都需要sts:AssumeRole权限。

在将buildspec.yml修改为使用sts:Assumerole后,我遇到了一个错误错误An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records. - patrick
1
commands: - echo print s3 buckets - aws sts assume-role --role-arn arn:aws:iam::Account B:role/testcli --role-session-name testx > cred.json - s=$(jq '.Credentials.AccessKeyId' cred.json) - y=$(jq '.Credentials.SecretAccessKey' cred.json) - z=$(jq '.Credentials.SessionToken' cred.json) - export AWS_ACCESS_KEY_ID=$s - export AWS_SECRET_ACCESS_KEY=$y - export AWS_SESSION_TOKEN=$z - aws s3 ls - echo $y``` Part of buildspec that's calling ```sts:Assumerole``` - patrick
@patrick,您能否编辑问题并添加新信息? - Marcin
1
我找出了问题所在,当解析accessid和secretkey时,需要去掉引号。我能够获取帐户B上的存储桶列表。 - patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接