Authentication 如何仅从我的应用程序中授予对amazon s3 bucket的访问权限?

Authentication 如何仅从我的应用程序中授予对amazon s3 bucket的访问权限?,authentication,coldfusion,amazon-s3,download,acl,Authentication,Coldfusion,Amazon S3,Download,Acl,我不确定这是否可行,因为我刚刚开始使用AmazonS3 我有一个应用程序,用户可以上传图像文件到S3。我希望这些图像文件只能被应用程序用户访问,因此如果用户登录并请求图像,它将显示出来,但当我试图通过直接输入图像的url来访问图像时,我无法获取图像 我使用的是s3 Coldfusion处理程序,但我不确定如何正确设置ACL,因为只有上传用户才能访问bucket,而将ACL设置为public read不会阻止非应用程序用户访问文件 问题: 是否可以基于应用程序授予ACL?您可以放置只允许通过传递空

我不确定这是否可行,因为我刚刚开始使用AmazonS3

我有一个应用程序,用户可以上传图像文件到S3。我希望这些图像文件只能被应用程序用户访问,因此如果用户登录并请求图像,它将显示出来,但当我试图通过直接输入图像的url来访问图像时,我无法获取图像

我使用的是s3 Coldfusion处理程序,但我不确定如何正确设置
ACL
,因为只有上传用户才能访问bucket,而将ACL设置为
public read
不会阻止非应用程序用户访问文件

问题:

是否可以基于应用程序授予ACL?

您可以放置只允许通过传递空ACL字符串访问所有者的存储桶和对象。按所有者,我指的是拥有Amazon帐户的用户,而不是应用程序中的用户

本例创建一个bucket,然后将图像上载到子文件夹中

<cfscript>
s3 = createobject("component", "s3").init(accessKeyId, secretAccessKey);
s3.putBucket("myapps-bucket", "");

s3.putObject(
    bucketName="myapps-bucket", 
    fileKey="image.png", 
    contentType="image/png", 
    acl="",                         
    keyName="user1234/image.png"
);
</cfscript>

s3=createobject(“组件”,“s3”).init(accessKeyId,secretAccessKey);
s3.putBucket(“myapps bucket”);
s3.1对象(
bucketName=“myapps bucket”,
fileKey=“image.png”,
contentType=“image/png”,
acl=“”,
keyName=“user1234/image.png”
);
要向用户显示图像,您必须生成指向对象的签名链接,否则他们将从s3获得授权错误

<!--- signed link valid for 30 mins --->
<cfset link = s3.getObject(bucket, "user1234/image.png", 30) />
<cfoutput>
    <img src="#link#" />
</cfoutput>


目前,每个Amazon帐户只能有一个文件夹,因此我建议每个用户使用一个文件夹,而不是单独的存储桶。

您使用的是哪个CFML引擎和版本?仍在运行Coldfusion 8、MySQL 5.0.88。我知道这在CF9+中似乎更容易,但是我会坚持使用CF8一段时间。如果你想为你的应用程序的每个用户创建一个bucket,你能不能使用一个bucket并将每个用户的图像放在一个单独的文件夹中?嗯。现在我为每个用户创建一个bucket(不会太多)。这比在单个存储桶中为每个用户创建文件夹好还是坏?酷。谢谢你的信息。那么唯一“签署”链接的元素是tht 30(分钟)?开始查找文件夹信息:-)是,getObject()接受以分钟为单位的有效期。如果图像将立即显示,则可以将其设置为较低。关于文件夹。这不是S3的官方版本,是吗?我只是在上传虚拟文件来创建文件夹的地方找到东西。您是否有指向有效内容的链接?根据我上面的示例,只需在文件名中使用正斜杠(/),您将在AWS S3控制台中看到这些文件夹,因此它们是官方支持的