将一个aws帐户拥有的s3的写访问权设置为另一个aws帐户所拥有的firehose流

时间:2018-06-04 05:21:29

标签: amazon-web-services amazon-s3 amazon-kinesis-firehose

我在帐户A下设置了一个Kinesis Firehose流。根据我们的要求,此流应该将数据写入不同aws帐户B拥有的s3存储桶,其中包括:

  1. s3存储桶应该在关联的firehose设置下拉列表中,
  2. 该firehose流应具有对给定s3存储桶的写入权限。
  3. 到目前为止,我已将以下政策添加到帐户B(ID 2)下的s3存储桶中,我希望从帐户A(ID 1)下的firehose写入。

    {
        "Version": "2008-10-17",
        "Statement": [
            {
                "Sid": "avs-bi-access",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::1:root"
                    ]
                },
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject",
                    “s3:PutObject”
                ],
                "Resource": [
                    "arn:aws:s3:::testBucket",
                    "arn:aws:s3:::testBucket/*"
                ]
            }
        ]
    }
    

    除此之外,在Firehose帐户A(id 1)下使用的角色中,信任关系如下:

    {
    "Version": "2012-10-17",
    "Statement": [
     {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com",
        "AWS": "arn:aws:iam::2:root"
      },
      "Action": "sts:AssumeRole"
      }
    ]
    }
    

    即使在那之后,我也无法在Firehose配置页面中选择给定的存储桶。我想,我错过了什么。

1 个答案:

答案 0 :(得分:0)

您应该按照以下说明进行操作:

基本上:

  • 您的S3策略应该有一个Principal指向Firehose使用的IAM角色
  • 示例在“角色主体”
  • 中未包含AWS

永远不会从控制台下拉列表中显示的其他帐户获取存储桶。相反,您需要在通过API / CLI调用创建Firehose传输流时选择存储桶,或者您可以使用update-destination API调用更改目标

aws firehose update-destination --delivery-stream-name foo --current-delivery-stream-version-id 1 --destination-id 'destinationId-000000000001' --extended-s3-destination-update '{"BucketARN":"arn:aws:s3:::YOUR-BUCKET"}'

您可以通过以下方式获取versiondestination-id

aws firehose describe-delivery-stream --delivery-stream-name foo

免责声明:我尝试了上述所有内容并设法选择了存储桶。但是,我没有将任何数据传送到存储桶。也许你会比我做得更多。