存储桶策略中的条件,仅允许特定服务

时间:2019-05-17 12:51:02

标签: amazon-web-services amazon-s3 bucket

我正在寻找一个存储桶策略,其中我有一个完整帐户'arn:aws:iam :: 000000000000:root'的特定主体ID,该帐户可以写入我的存储桶。

我现在想实现一个条件,该条件仅使firehose作为服务可以写入我的存储桶。

我目前的想法是:

        {
            "Sid": "AllowWriteViaFirehose",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::000000000000:root"
            },
            "Action": "s3:Put*",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                #*#
            }
        }

其中#*#应该是特定条件。 我已经尝试过类似的东西:

{“ IpAddress”:{“ aws:SourceIp”:“ firehose.amazonaws.com”}} 我以为请求将来自AWS的流水线端点。但这似乎不是:-/

“条件”:{“ StringLike”:{“ aws:PrincipalArn”:“ * Firehose *”}} 我认为这会起作用,因为firehose用来写入文件的角色应该包含一个带有“ firehose”之类的会话名称。但这没有用。

有任何想法如何使其正常工作吗?

谢谢 本

2 个答案:

答案 0 :(得分:1)

请勿创建存储桶策略。

相反,将所需权限分配给 IAM角色,然后将该角色分配给您的Kinesis Firehose。

请参阅:Controlling Access with Amazon Kinesis Data Firehose - Amazon Kinesis Data Firehose

答案 1 :(得分:0)

此答案适用于目标S3存储桶位于其他帐户中的情况

AWS Developer Forums: Kinesis Firehose cross account write to S3中,方法是:

  1. 在帐户B中创建跨帐户角色,并启用帐户A的信任关系以承担帐户B的角色。
  2. 在帐户B中启用存储桶策略,以允许帐户A将记录写入帐户B。
  3. 将帐户B的S3存储桶映射到Firehose,必须创建该Firehose指向一个临时存储桶,然后使用AWS CLI命令更新帐户A中的S3存储桶。

CLI命令:

aws firehose update-destination --delivery-stream-name MyDeliveryStreamName --current-delivery-stream-version-id 1 --destination-id destinationId-000000000001 --extended-s3-destination-update file://MyFileName.json

MyFileName.json如下所示:

{
    "BucketARN": "arn:aws:s3:::MyBucketname",
    "Prefix": ""
}