目前,我有一个名为stackoverflow2017
的s3存储桶,其中包含一些文件:
并且,ACL配置如下:
您可以看到存储桶是私有的,甚至我自己的帐户也无法访问它。
我可以按照以下方式为策略设置策略:
$ aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --user-name developer
但是,我想知道其他选择。
问题:批准访问开发人员,应用程序等的课程有哪些替代方案和最佳做法?
答案 0 :(得分:2)
有几种方法可以在s3中保护您的存储桶,我可以列出这四种应用权限的方法:
上面的列表遵循权限层次结构,第一个是具有更多层次结构的权限,如果您的安全配置中存在以前的权限之一,则将覆盖最后一个权限。
参考: How to secure an Amazon S3 Bucket
IAM policies 用于授予对应用于其他资源的用户,组或角色的访问权限。如果用户或AWS资源(例如,特定的EC2实例集,Lambda函数,另一个帐户等)需要访问一个或多个存储桶,则可以采用这种方式。它还有助于确保您应用最小权限原则并仅授予必要的权限。
Bucket policies 适用于该存储桶和该存储桶中的密钥。如果您需要以数据为中心授予权限,则存储桶策略是实现此目的的最简单方法。当您的存储桶作为静态网站启用时,这尤其有用。您可以使用存储桶策略将存储桶中的所有内容设置为只读。
Access control lists 隐藏在所有权限方法的封面下方。 ACL是一种细粒度控件,允许您根据需要对更广泛的工具(如存储桶和IAM策略)进行例外处理。根据我的经验,您很少需要调整特定的ACL,但能力就在那里,在某些应用场景中,这取决于您的存储桶/密钥策略。
Query string authentication 和 URL-based access 是Amazon S3中隐藏的宝石。这些方法允许您根据特定URL授予权限。使用此类身份验证有两种常见模式;
这是确保提供对Amazon S3存储桶的一次性访问的绝佳方法。
此方法允许您为组或用户设置IAM policy,您可以通过CLI,API调用或通过AWS控制台执行此操作。
点击链接developer
- 按下按钮Add permissions
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1515865413837",
"Action": [
"s3:ListBucket",
"s3:ListObjects"
],
"Effect": "Allow", // Can be Denied
"Resource": "arn:aws:s3:::stackoverflow2017"
}
]
}
该政策S3PolicyForDeveloper
向用户developer
授予清单Buckets
和Objects
在清单stackoverflow2017
内的权限。
要将策略设置为组,请按照组列表中的相同步骤进行操作。
以下命令显示如何将IAM policy分配给IAM用户。基本上,将创建一个名为S3PolicyForDeveloper
的新IAM策略,并立即将其附加到IAM用户。
$ aws iam put-user-policy --user-name developer --policy-name S3PolicyForDeveloper --policy-document file:///policies/S3PolicyForDeveloper.json
另一方面,假设您要将现有的IAM policy附加到IAM用户,为此执行以下命令:
$ aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --user-name developer
以下命令显示如何将IAM policy分配给IAM组。基本上,将创建一个名为S3PolicyForDeveloper
的新IAM策略,并立即将其附加到IAM组。
$ aws iam put-group-policy --group-name developers --policy-document file:///policies/S3PolicyForDeveloper.json --policy-name S3PolicyForDeveloper
要将IAM策略附加到组,请执行以下命令:
$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --group-name developers
存储桶策略允许您向特定存储桶授予特定权限。例如,您可以将桶的访问权限授予特定的IP地址集,AWS中的特定帐户等等。
这是广告资源stackoverflow2017
的政策:
{
"Version": "2012-10-17",
"Id": "Policy1515865416346",
"Statement": [
{
"Sid": "Stmt1515865413837",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::stackoverflow2017/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.168.1.1"
}
}
}
]
}
如您所见,resource
密钥包含stackoverflow2017
广告文件/*
加Condition
,表示此政策已应用于广告资源的内容, 192.168.1.1
密钥包含ARN,在这种情况下,此存储桶只能从IP地址Principal
中读取。 {
"Version": "2012-10-17",
"Id": "Policy1515865416346",
"Statement": [
{
"Sid": "Stmt1515865413837",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::stackoverflow2017/*"
},
{
"Sid": "Stmt1515865413838",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:root"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::stackoverflow2017"
}
]
}
密钥包含允许或拒绝访问资源的用户,帐户,服务或其他实体,在本例中为指定存储区。
list/read
只有执行此操作的帐户为put
时,上述政策才允许stackoverflow2017
和123456789
广告资源stackoverflow2017
中的新对象。
此方法允许您将Policy Conditions设置为存储桶,您可以通过CLI,API调用或通过AWS控制台执行此操作。
单击存储桶stackoverflow2017
- 单击选项卡权限 - 单击按钮存储桶策略。
命令bellow使用文件Stackoverflow2017.json
$ aws s3api put-bucket-policy --bucket stackoverflow2017 --policy file://Stackoverflow2017.json
{{1}}
希望有所帮助!