天道酬勤,学无止境

AWS S3 Web Console overriding bucket policy

Currently I have a policy applied to a test bucket that is designed to prevent users from uploading s3objects with "public-read" and "public-read-write" ACLs.

When I try to upload via command line the requests are successfully blocked with "Access Denied" as expected:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -cannedACLName public-read  

Same result with "public-read-write":

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -CannedACLName public-read-write 

But when I access the s3bucket via the Web Console GUI I am able to upload public objects. Along with manipulating an existing "private" object to public via the "make public" button.

Here is the bucket policy:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "DenyPublic",
        "Effect": "Deny",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": "arn:aws:s3:::testbucket/*",
        "Condition": {
            "StringEquals": {
                "s3:x-amz-acl": [
                    "public-read",
                    "public-read-write"
                ]
            }
        }
    }
]

Also here is the policy for s3 access from the user:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "*"
    }
]

}

I feel like the fix or logic is really simple. I just cannot put my finger on it.

评论

I think what's going on here is that the AWS Console is not triggering your Deny policy, because it's not using canned ACLs. Instead, it's explicitly granting the READ_ACP permission to the AllUsers group (using the x-amz-grant-read header), after uploading the file.

I set up a similar policy and tested the canned ACL approach on PutObject (it failed):

$ aws s3 cp myfile s3://B/K --acl public-read
Result: Access Denied

Then I tested a non-ACL copy, followed by an ACL update to the object using the canned ACL approach (the upload succeeded, but the ACL update failed):

$ aws s3 cp myfile s3://B/K
Result: OK

$ aws s3api put-object-acl --bucket B --key K --acl public-read
Result: Access Denied

Then I tried the grant approach with the AllUsers group (it succeeded):

$ aws s3 cp myfile s3://B/K
Result: OK

$ aws s3api put-object-acl --bucket B --key K --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers
Result: OK

The last two tests attempt to do the same thing (upload an object and make it world-readable) but they do it in different ways and one is denied by your policy while the other is not.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 限制特定用户的存储桶列表(Restrict List of Buckets for a Specific User)
    问题 我已经能够生成仅允许访问特定存储桶的用户策略,但是在尝试了一切之后(包括这篇文章:是否有一个S3策略用于将访问限制为仅查看/访问一个存储桶?)。 问题:我无法将存储桶的列表限制为仅一个存储桶。 由于多种原因,我不希望清单显示除指定的桶以外的任何桶。 我尝试了各种政策,但没有成功。 这是我最新的策略JSON,它在限制操作方面有效,但未列出: { "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Deny", "Action": [ "s3:ListBucket" ], "NotResource": [ "arn:aws:s3:::acgbu-acg", "arn:aws:s3:::acgbu-acg/*" ] }, { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::acgbu-acg", "arn:aws:s3:::acgbu-acg/*" ] } ] } 任何帮助将不胜感激。 我开始怀疑这是否有可能。 回答1
  • Excon ::错误::禁止(预期(200)<=>实际(403禁止)(Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden))
    问题 当我尝试将图片上传到“汽车”对象时,我被拒绝访问S3。 但是,自从我添加S3以来,资产文件夹中的站点图像显示得很好。 我得到的具体错误是这样的: 2015-02-17T14:40:48.459629+00:00 app[web.1]: Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden) 2015-02-17T14:40:48.459630+00:00 app[web.1]: excon.error.response 2015-02-17T14:40:48.459635+00:00 app[web.1]: "Connection" => "close" 2015-02-17T14:40:48.459637+00:00 app[web.1]: "Content-Type" => "application/xml" 2015-02-17T14:40:48.459639+00:00 app[web.1]: "Date" => "Tue, 17 Feb 2015 14:40:48 GMT" 2015-02-17T14:40:48.459640+00:00 app[web.1]: "Server" => "AmazonS3" 2015-02-17T14:40:48.459632+00:00 app[web.1
  • 无法从 Amazon S3 中删除目录(Can't delete directory from Amazon S3)
    问题 我正在使用 Amazon S3 的 Web 界面,当我右键单击文件夹 X 并选择删除时,X 似乎被删除了。 然后当我刷新界面时,X 可能会消失或保留; 如果我一直单击刷新,则该文件夹可能丢失或存在。 这是一个错误,还是我做错了什么? 该文件夹仍然存在,据我可以告诉; 我的 EMR 作业之一抱怨输出文件夹 X 仍然存在。 回答1 在 AWS 命令​​行 (CLI) 删除存储桶中的“递归”文件夹后,我在 AWS Web 界面中遇到了同样的问题。 Web 界面中随机重新出现了一些对象(不是文件,而是“文件夹”)。 即使我尝试在Web界面中删除这些文件夹,它们仍然存在(界面说操作成功......) 在 AWS Web 界面中对我有用的解决方案:右键单击文件夹 -> 剪切,然后粘贴到另一个文件夹中。 效果很好,然后删除了新文件夹。 没了! 回答2 尝试与 Kristoffer 的回答相同,但 CUT/PASTE 到另一个文件夹使新文件夹不可删除。 进一步的黑客攻击:创建一个新的临时存储桶。 将文件夹剪切/粘贴到此存储桶并删除存储桶。 回答3 S3 实际上并不使用文件夹。 相反,对象路径中的路径分隔符被视为文件夹。 如果要删除文件夹,则必须删除该文件夹的所有内容。 如果删除所有内容有任何延迟,文件夹可能会继续存在。 回答4 截至 2017 年 3 月,AWS 控制台 UI 已更改
  • Is aws:SourceVpc condition key present in the request context when interacting with S3 over web console?
    I have a Bucket Policy (listed below) that is supposed to prevent access to an S3 bucket when accessed from anywhere other than a specific VPC. I launched an EC2 instance in the VPC, tested and confirmed that S3 access works fine. Now, when I access the same S3 bucket over web console, I get 'Error - Access Denied' message. Does this mean that aws:SourceVpc condition key is present in the request context when interacting with S3 over web console as well? My assumption is that it is present in the request context as otherwise policy statement would have failed such that the statement's "Effect"
  • 从客户端浏览器直接上传Amazon S3文件-私钥披露(Amazon S3 direct file upload from client browser - private key disclosure)
    问题 我正在使用REST API通过REST API实现从客户端计算机到Amazon S3的直接文件上传,而没有任何服务器端代码。 一切正常,但有一件事让我担心。 当我向Amazon S3 REST API发送请求时,我需要对请求进行签名并将签名放入Authentication标头中。 要创建签名,我必须使用我的密钥。 但是所有事情都是在客户端发生的,因此,可以很容易地从页面源中揭示密钥(即使我混淆/加密了源)。 我该如何处理? 这是一个问题吗? 也许我只能将特定私钥的使用限制为仅来自特定CORS Origin的REST API调用,以及仅PUT和POST方法,或者仅将链接链接至S3和特定存储桶? 可能还有另一种身份验证方法? “无服务器”解决方案是理想的选择,但是我可以考虑进行一些服务器端处理,而不是将文件上传到服务器,然后再发送到S3。 回答1 我认为您想要的是使用POST的基于浏览器的上传。 基本上,您确实需要服务器端代码,但是它所做的只是生成签名的策略。 一旦客户端代码具有签名策略,就可以使用POST直接将其上传到S3,而数据不会通过您的服务器。 这是官方文档链接: 图表:http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html 示例代码:http://docs.aws.amazon.com
  • 尝试设置Amazon的S3存储桶:403禁止的错误和设置权限(Trying to set up Amazon's S3 bucket: 403 Forbidden error & setting permissions)
    问题 我关注Hartl的railstutorial.org,并已到达11.4.4:正在生产图像。 我所做的: 注册Amazon Web Services 在Amazon Identity and Access Management中,我创建了一个用户。 用户已成功创建。 在Amazon S3中,我创建了一个新存储桶。 在新存储桶上设置权限: 权限:本教程指示“授予上一步创建的用户读写权限”。 但是,在存储区的“权限”下,未提及新用户的名称。 我只能在“所有人”,“经过身份验证的用户”,“日志传送”,“我”和用户名之间进行选择,亚马逊似乎是用我的名字和数字创建了自己。 我已经通过选择“经过身份验证的用户”进行了尝试,并选中了“上载/删除和查看”权限(而不是选择“列表”和“编辑”权限)。 我还通过选择“所有人”进行了尝试,并选中了所有四个框。 结果是相同的。 我按照教程的说明在Rails应用程序中实现了(我不相信那里有什么不对的地方,所以这里没有包括那些步骤,以免使时间太长)。 初始化程序carrier_wave.rb设置为以下代码。 我在初始值设定项中添加了region: 'eu-west-1' (这是我从这里得到的一个主意),以消除connecting to the matching region will be more performant的消息connecting to
  • 弹性beantalk检索S3文件时权限被拒绝(Permission denied while elastic beanstalk is retrieving S3 file)
    问题 我将文件存储在S3上并编写了.ebextensions配置,以将其自动复制到新实例。 我在Elastic Beanstalk控制台中收到此错误: [实例: INSTANCEID模块:AWSEBAutoScalingGroup ConfigSet:空]实例上的命令失败。 返回码:1输出:[CMD-AppDeploy / AppDeployStage0 / EbExtensionPreBuild]命令失败,错误代码1:构建期间发生错误:无法检索https://s3-us-west-1.amazonaws.com/MyBucket/MyFolder/ _MyFile.txt:HTTP错误403: AccessDenied 我的.ebextension配置文件包含以下部分: files: "/target/file/path" : mode: "000777" owner: ec2-user group: ec2-user source: https://s3-us-west-1.amazonaws.com/_MyBucket_/_MyFolder_/_MyFile.txt 在尝试进行此文件复制时,我还通过赋予弹性beantalk IAM角色所有S3的标准只读访问策略来放宽权限。 它的政策是这样的: { "Effect": "Allow", "Action": [ "s3:Get*"
  • 限制S3存储桶对VPC的访问(Restricting S3 bucket access to a VPC)
    问题 我试图应用以下策略以限制my_bucket对特定VPC的访问。 当我尝试将此策略应用为存储桶策略时,得到的Policy has an invalid condition key - ec2:Vpc 。 我该如何纠正? { "Version":"2012-10-17", "Statement":[ { "Effect":"Deny", "Principal": { "AWS": "*" }, "Action":"*", "Resource":"arn:aws:s3:::my_bucket/*", "Condition":{ "StringNotEquals":{ "ec2:Vpc":"arn:aws:ec2:region:account:vpc/vpc-ccccccc" } } } ] } 回答1 我刚刚得到这个工作。 我必须做两件事。 1)在S3存储桶上创建存储桶策略,2)创建“ VPC端点” 我的S3存储桶策略如下所示(当然会在存储桶名称和VPC标识符中输入): { "Version": "2012-10-17", "Id": "Policy1234567890123", "Statement": [ { "Sid": "Stmt1234567890123", "Effect": "Allow", "Principal": "*", "Action": "s3:*",
  • 通过 Web 浏览器访问存储在 Amazon S3 上的文件(Access files stored on Amazon S3 through web browser)
    问题 现在的情况 我在 Github 上有一个项目,它在 Travis-CI 上的每次提交之后构建。 每次成功构建后,Travis 都会将工件上传到 S3 存储桶。 有什么方法可以让我轻松地让任何人访问存储桶中的文件? 我知道我可以生成只读访问密钥,但用户通过他们的网络浏览器访问文件会更容易。 我已经启用了“.”根文件的网站托管。 放。 但是,在尝试转到存储桶的端点时,我仍然收到 403 Forbidden。 问题 如何让用户从他们的 Web 浏览器轻松浏览和下载存储在 Amazon S3 上的工件? 最好没有第三方客户端。 回答1 我发现了这个相关的问题:S3 静态网站中的目录列表 事实证明,如果您为整个存储桶启用公共读取,则 S3 可以提供目录列表。 问题是它们是 XML 而不是 HTML,所以不是很用户友好。 您可以通过三种方式生成列表: 为自己电脑上的每个目录生成 index.html 文件,将它们上传到 s3,并在向目录添加新文件时更新它们。 技术含量极低。 由于您是说直接从 Travis 上传构建文件,因此这可能不太实用,因为它需要在那里做额外的工作。 使用客户端 S3 浏览器工具。 Rufus Pollock 的 s3-bucket-listing Adam Pritchard 的 s3-file-list-page 使用服务器端浏览器工具。 s3browser
  • 我如何在客户端将可见文件上传到Amazon S3?(How do I client-side upload a viewable file to Amazon S3?)
    问题 首先,我通常不愿发布这些问题,因为我一直觉得互联网上的所有内容都有答案。 在花了无数小时寻找这个问题的答案之后,我终于放弃了这个声明。 假设 这有效: s3.getSignedUrl('putObject', params); 我想做什么? 使用getSignedUrl方法通过PUT(从客户端)将文件上传到Amazon S3 允许任何人查看上载到S3的文件 注意:如果有一种更简便的方法允许客户端(iPhone)使用预签名的URL(并且不暴露客户端的凭据)将其上传到Amazon S3,我将不知所措。 主要问题* 在查看AWS管理控制台时,上传的文件具有空白的权限和元数据集。 查看上载的文件时(即通过在AWS管理控制台中双击文件),出现AccessDenied错误。 我尝试了什么? 尝试#1:我的原始代码 在NodeJS中,我生成一个预签名的URL,如下所示: var params = {Bucket: mybucket, Key: "test.jpg", Expires: 600}; s3.getSignedUrl('putObject', params, function (err, url){ console.log(url); // this is the pre-signed URL }); 预签名的URL如下所示: https://mybucket.s3
  • s3中的getObject时,aws lambda函数获得的访问被拒绝(aws lambda function getting access denied when getObject from s3)
    问题 我在Lambda函数上收到来自S3 AWS服务的拒绝访问错误。 这是代码: // dependencies var async = require('async'); var AWS = require('aws-sdk'); var gm = require('gm').subClass({ imageMagick: true }); // Enable ImageMagick integration. exports.handler = function(event, context) { var srcBucket = event.Records[0].s3.bucket.name; // Object key may have spaces or unicode non-ASCII characters. var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); /* { originalFilename: <string>, versions: [ { size: <number>, crop: [x,y], max: [x, y], rotate: <number> } ] }*/ var fileInfo; var dstBucket = "xmovo
  • 在AWS上执行“ PutObject”时出错,上传失败(Error executing “PutObject” on AWS, upload fails)
    问题 我已经建立了一个AWS acct。 并尝试将我的第一个程序化PUT放入S3。 我已经使用控制台创建了一个存储桶并将其放置在其中。 我还创建了一个子目录(myFolder)并将其公开。 我创建了我的.aws / credentials文件,并尝试使用示例代码,但出现以下错误: 在“ https://s3.amazonaws.com/gps-photo.org/mykey.txt”上执行“ PutObject”时出错; AWS HTTP错误:客户端错误: PUT https://s3.amazonaws.com/gps-photo.org/mykey.txt导致403 Forbidden响应: AccessDenied访问被拒绝FC49CD(被截断...)AccessDenied(客户端):访问被拒绝- AccessDenied访问DeniedFC49CD15567FB9CD1GTYxjzzzhcL + YyYsuYRx4UgV9wzTCQJX6N4jMWwA39PFaDkK2B9R + FZf8GVM6VvMXfLyI / 4abo = 我的代码是 <?php // Include the AWS SDK using the Composer autoloader. require '/home/berman/vendor/autoload.php'; use Aws\S3
  • 尝试下载文件时从s3获取403禁止(Getting 403 forbidden from s3 when attempting to download a file)
    问题 我在s3上有一个存储桶,并且已授予用户对该存储桶的完全访问权限。 我可以执行ls命令并查看存储桶中的文件,但是下载失败,并显示以下内容: A client error (403) occurred when calling the HeadObject operation: Forbidden 我还尝试过通过IAM控制台授予完全S3权限的用户进行此操作。 同样的问题。 供参考,这是我拥有的IAM政策: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*" ] } ] } 我还尝试添加存储桶策略,甚至将存储桶公开,但仍然无法进行...另外,从控制台,我尝试对存储桶中的文件设置单独的权限,并收到一条错误消息,提示我无法查看存储桶,这很奇怪,因为当消息出现时我正在控制台中查看它,并且可以ls存储桶中的任何内容。 编辑我的存储桶中的文件
  • AWS Kinesis Firehose不在Redshift中插入数据(AWS Kinesis Firehose not inserting data in Redshift)
    问题 我尝试让Kinesis Firehose在Redshift表中推送数据。 firehose流正在运行并将数据放入S3。 但是没有任何东西到达Redshift的目标表中。 在度量标准中,DeliveryToRedshift成功为0(DeliveryToRedshift记录为空) 加载日志(redshift Web控制台)和STL_LOAD_ERRORS表为空。 我检查了Firehose是否能够连接到Redshift(我在STL_CONNECTION_LOG中看到了连接) 我该如何解决? 回答1 最后,我通过删除并重新创建Firehose流使其工作:-//可能通过Web控制台进行的重复编辑使事情变得不稳定。 但是这里是故障排除指南: 此过程是一个很好的起点:http://docs.aws.amazon.com/firehose/latest/dev/troubleshooting.html 检查数据是否在S3中到达消防水带必须具有IAM角色,并且消防水带服务与该角色之间具有信任关系此IAM角色必须具有S3访问策略请在此处查看政策json:http://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3 此时,Firehose监视中的“ DeliveryToS3成功”指标应为非零
  • 自动为整个S3存储桶设置缓存控制(使用存储桶策略?)(Set cache-control for entire S3 bucket automatically (using bucket policies?))
    问题 我需要为整个s3存储桶(现有文件和将来的文件)设置缓存控制标头,并希望在存储桶策略中做到这一点。 我知道我可以编辑现有文件,而且如果我自己上传它们,我知道如何指定它们,但是不幸的是,上传它们的应用程序无法设置标头,因为它使用s3fs在此处复制文件。 回答1 现在有3种方法来完成此任务:通过AWS控制台,通过命令行或通过s3cmd命令行工具。 AWS控制台说明 现在,这是推荐的解决方案。 这很简单,但是可能需要一些时间。 登录到AWS管理控制台进入S3存储桶按路线选择所有文件从菜单中选择“更多” 选择“更改元数据” 在“键”字段中,从下拉菜单中选择“缓存控制” max-age = 604800输入(7天)作为值按“保存”按钮 (感谢@biplob-请在下面给他一些爱) AWS命令行解决方案 最初,当我创建此存储桶策略时,是不行的,因此我想出了如何使用aws-cli来执行此操作,并且它非常漂亮。 在研究时,我找不到任何示例,所以我想我会发布一些解决方案来帮助有需要的人。 注意:默认情况下,即使您指定了新的元数据,aws-cli也仅复制文件的当前元数据。 要使用在命令行上指定的元数据,您需要添加'--metadata-directive REPLACE'标志。 这里有一些例子。 对于单个文件 aws s3 cp s3://mybucket/file.txt s3:/
  • IAM Policy for S3 folder access based on Cognito ID
    I have created an IAM policy to allow Cognito users to write to my S3 bucket, but I would like to restrict them to folders based on their Cognito ID. I've followed Amazon's instructions here and created a policy that looks like this: { "Effect": "Allow", "Action": ["s3:PutObject","s3:GetObject"], "Resource": [ "arn:aws:s3:::mybucket/myappfolder/${cognito-identity.amazonaws.com:sub}*" ] } But when I try to upload using the v2 of the AWS iOS SDK I get an access denied error. If I modify the last path component of the resource to replace ${cognito-identity.amazonaws.com:sub} with the explicit
  • Amazon S3 copyObject 权限(Amazon S3 copyObject permission)
    问题 我有拥有所有权限的用户。 { "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] } 我正在使用 aws-sdk-php-2 在存储桶中放置和复制对象。 http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html 把代码完美运行 $client->putObject(array( 'Bucket' => 'kiosk', 'Key' => 'test/orders/test.csv', 'SourceFile' => $sourcePath, )); 检查是否通过 https://console.aws.amazon.com/s3 在 S3 上创建对象后,我正在执行下一个脚本。 $result = $client->copyObject(array( 'Bucket' => 'kiosk', 'CopySource' => 'test/orders/test.csv', 'Key' => 'test/test.csv', )); 我收到了致命错误: Fatal error: Uncaught Aws\S3\Exception\S3Exception: AWS Error Code
  • 亚马逊 S3 存储桶勒索软件***详解(上)
    李白 嘶吼专业版***向量简介通过我们的云安全研究,我们在犀牛安全实验室(Rhino Security Lab)开发出了一个概念验证的”云勒索软件",该勒索软件使用 KMS 加密亚马逊 S3存储桶内的 AWS 帐户对象。***者利用这个勒索软件获得对受害者系统的访问控制权限,并对受害者系统上的敏感数据进行加密。与此同时,***者还会威胁受害者,告知受害者,如果受害者不在某一时限内付款,就会删除或公开发布数据。通常,这些***的目标是服务器、工作站和类似的设置,但与许多***一样,这种***也有"云等效"的性质。S3勒索软件是非常具有破坏性的,我们的研究和博客文章并不打算以任何方式协助***者实施***。由于这个原因,本博客只发布一个缓慢的概念验证脚本,因此辩护者可以测试他们的防御。对于防御者和蓝队,我们在这篇文章的第二部分中讨论了如何防止和防御 S3勒索软件。亚马逊 S3 和 AWS KMS对于那些不熟悉 Amazon S3 的用户来说,你们可以将 Amazon Simple Storage Service (简称 Amazon S3)理解为是一种通过 Amazon Web Services 提供的一个健壮的静态文件托管服务。亚马逊表示,S3可以用于"存储和保护任何数量的数据,用于一系列用例,如网站、移动应用程序、备份和恢复、存档、企业应用程序、物联网设备和大数据分析"
  • 是否可以使用AWS CLI在AWS账户之间进行复制?(Is it possible to copy between AWS accounts using AWS CLI?)
    问题 是否可以使用AWS CLI在AWS账户之间复制S3存储桶的内容? 我知道可以在同一账户的存储桶之间复制/同步,但是我需要将旧的AWS账户的内容转换为新的账户。 我已经为AWS CLI配置了两个配置文件,但是我看不到如何在单个copy / sync命令中同时使用两个配置文件。 回答1 很简单的。 比方说: 旧的AWS账户= old@aws.com 新的AWS账户= new@aws.com Loginto的AWS控制台old@aws.com 转到您选择的存储桶,然后应用以下存储桶政策: { "Statement": [ { "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::bucket_name", "Principal": { "AWS": [ "account-id-of-new@aws.com-account" ] } }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::bucket_name/*", "Principal": { "AWS": [ "account-id-of-new@aws.com-account" ] } } ]
  • 创建允许访问 Cloudfront 但限制其他任何人访问的 S3 存储桶策略(Creating an S3 bucket policy that allows access to Cloudfront but restricts access to anyone else)
    问题 我有以下政策: { "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "Stmt1395852960432", "Action": "s3:*", "Effect": "Deny", "Resource": "arn:aws:s3:::my-bucket/*", "Principal": { "AWS": [ "*" ] } }, { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1IYJC432545JN" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/*" } ] } 但是,这拒绝了所有请求者的请求,甚至是 Cloudfront。 这样做的正确方法是什么? 问题是对象是由客户端通过公共读取创建的。 我目前无法立即控制客户端来更改此设置。 所以我想要的是有一个覆盖单个对象 ACL 的策略。 所以这里的默认拒绝不起作用。 回答1 S3 策略看起来像这样: { "Version