我正在寻找一个存储桶策略,其中我有一个完整帐户'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”之类的会话名称。但这没有用。
有任何想法如何使其正常工作吗?
谢谢 本
答案 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中,方法是:
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": ""
}