如何仅从我的申请中授予对亚马逊s3桶的访问权限?

时间:2012-08-16 07:08:46

标签: authentication coldfusion amazon-s3 download acl

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

我有一个应用程序,用户可以将图像文件上传到S3。我希望这些图像文件只能由应用程序用户访问,因此如果用户登录并请求图像,它将会显示但是当我尝试通过直接输入图像来访问图像时,我没有得到图像。

我正在使用this s3 Coldfusion处理程序,但我不确定如何正确设置ACL,因为只有上传用户才能访问存储桶并设置ACL到public read不会阻止非应用程序用户访问文件。

问题:
是否可以在应用程序的基础上授予ACL?

1 个答案:

答案 0 :(得分:3)

您可以通过传递空的acl字符串来放置仅允许访问所有者的存储桶和对象。所有者我会引用拥有的亚马逊帐户,而不是您应用程序中的用户。

此示例创建一个存储桶,然后将图像上传到子文件夹中。

<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获得授权错误

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

目前每个亚马逊帐户只能有100 buckets,所以我建议每个用户使用一个文件夹而不是单独的存储桶。