Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services bucket策略中的条件仅允许特定服务_Amazon Web Services_Amazon S3_Bucket - Fatal编程技术网

Amazon web services bucket策略中的条件仅允许特定服务

Amazon web services bucket策略中的条件仅允许特定服务,amazon-web-services,amazon-s3,bucket,Amazon Web Services,Amazon S3,Bucket,我正在寻找一个bucket策略,其中我有一个完整帐户的特定主体ID“arn:aws:iam::000000000000:root”,该帐户允许写入我的bucket 我现在想要实现一个条件,该条件只会使消防软管作为一种服务能够写入我的水桶 我目前的想法是: { "Sid": "AllowWriteViaFirehose", "Effect": "Allow", "Principal": {

我正在寻找一个bucket策略,其中我有一个完整帐户的特定主体ID“arn:aws:iam::000000000000:root”,该帐户允许写入我的bucket

我现在想要实现一个条件,该条件只会使消防软管作为一种服务能够写入我的水桶

我目前的想法是:

        {
            "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的firehose端点。但似乎并非如此:-/

“条件”:{“StringLike”:{“aws:PrincipalArn”:“*Firehose*”}} 我认为这是可行的,因为firehose用于编写文件的角色应该包含一个会话名称,其中包含类似“firehose”的内容。但它不起作用

你知道怎么让它工作吗

谢谢
Ben

不要创建存储桶策略

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


请参阅:

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

从中,方法是:

  • 在帐户B中创建跨帐户角色,并启用帐户A的信任关系以承担帐户B的角色
  • 在帐户B中启用Bucket策略以允许帐户A将记录写入帐户B
  • 将帐户B的S3 bucket映射到Firehose,必须创建Firehose以指向临时bucket,然后使用AWS CLI命令更新帐户a中的S3 bucket
  • 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": ""
    }
    

    您可以通过主体:“service”:“firehouse.amazonaws.com”来识别Kinesis Firehose服务。请看下面的示例-
    https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3
    这不起作用。服务主体肯定是一个很好的方法,但只会启用整个服务,而不受来自哪个帐户的任何限制。请记住,这是一个两个帐户的设置。这绝对是一个更好的方法。但这不起作用,因为kinesis fh在另一个帐户中。