扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
亚马逊简单存储服务(S3)因其基于对象存储数据而闻名,但是S3 bucket策略可以帮助AWS实现亚马逊S3资源的设置和管理复杂访问权限的时间节省。这篇技巧指南为开发者提供了基本的S3实践。需要指出的是S3通常用和亚马逊Identity and Access Management (IAM身份识别与管理)策略一起使用,IAM用来设置、捕捉和记录用户身份和授权。
你需要一个S3 bucket策略来访问你上传的文件。如果你没有这个文件,就会受到拒绝访问的错误信息:
“This XML file does not appear to have any style information associated with it. The document tree is shown below”
1 -<error>
2 <code>AccessDenied</code>
3 <message>Access Denied</message>
4 <requestid>F7A33F55E19C8BFA</requestid>
5 -<hostid>
6 UHwvZfsh+B9IczJIyrBQOKG1+JRVsybONoS8+pwo1DZSvscmdb9OIsnZw</hostid>
7 </error>
在你在属性窗口中点击了链接文件名后,弹出这个消息。为了查看这个窗口,点击右侧“All Buckets”窗口的属性标签。
为了解决这个问题,创建一个S3 bucket策略。使用AWS Policy Generator来生成一个脚本,允许你访问你的文件。
我这里有两个脚本示例展示给你如何设置权限。第一个示例是允许任何人访问我的文件的简单脚本。第二个示例是允许所有用户,除了一个之外,来上传其文件到我的bucket的比较长一点的脚本。
第一个示例,有三步要做:
第一步:选择策略类型
选择S3 bucket策略。
这个策略是你可以创建的四种类型的策略中的一种。其余三种为:
oIAM Policy
oSNS Topic Policy
oSQS Queue Policy
第二步:添加声明
声明是一个单一权限的正式描述。一个声明中有五个元素,分别是:
oEffect元素
oPrincipal元素
oAWS service元素
oActions元素
oAmazon Resource Name (ARN)元素
Effect元素,选择Allow允许用户读取文件。
Principal元素,添加“ * ”到输入框中。这个通配符允许匿名用户读取这个文件。
AWS Service元素,生成器自动将亚马逊S3插入到输入框中。
Actions元素,检查“Get Object。”这是你需要读一个文件的唯一动作。在这个列表中你不需要任何其他动作。
Amazon Resource Name元素,设置成以下的格式:arn:aws:s3:::<bucket_name>/<key_name>
选择你创建的bucket名称(比如bucket01) 。设置键名为*。在输入框中输入如下内容:arn:aws:s3:::bucket01/*
跳过这个声明的条件,比如日期、位置、版本ID、最大键值和其他的限制。
准备好后点击Add Statement按钮。马上你就会看到添加了什么元素到这个声明的结果。
你如果对这个结果满意,继续下一个步骤。
第三步:创建bucket策略
点击Generate Policy按钮。这个将生成你需要增加到bucket中的策略。这个策略用访问策略语言编写。
{
"Id": "Policy1393570093893",
"Statement": [
{
"Sid": "Stmt1393569661962",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket01/*",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
如果脚本显示你提供了一个错误的bucket名,你可以编辑它。一旦你满意这个策略,将其复制到剪贴板。你需要将其粘贴到策略编辑器中。
如何获得策略编辑器:
o在AWS Management Console中打开你的bucket
o进入Properties并点击Permissions
o选择Add bucket policy
编辑器打开后,粘贴这个策略。然后点击保存。编辑器提供了一个示例Bucket策略的链接。
在第二个S3 bucket策略示例中,bucket所有者完全控制所有账户的访问,除了一个之外,让他们可以上传文件。bucket所有者设置了一个具体的条件,有一个账户必须在符合授权和访问条件后才能上传文件。PutObject操作用来添加一个文件到bucket中。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"111",
"Effect":"Allow",
"Principal":{
"AWS":"123456789"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::bucket01/*"
},
{
"Sid":"112",
"Effect":"Deny",
"Principal":{
"AWS":"123456789"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::bucket01/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-grant-full-control":[
"emailAddress=xyz@amazon.com"
]
}
}
}
]
}
这个脚本的开始首先声明,只有第二个声明中的条件不满足时,允许账户123456789上传文件到bucket01。如果账户123456789并没有发邮件给bucket所有者授权给他完全的控制,然后上传文件就失败。
总之,你需要bucket策略授权或者拒绝账户读取和上传文件到你的bucket中。亚马逊提供了运营bucket和对象的参考。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者