我的情况如下:我有一台服务器和多个客户端,它们通过AWS S3存储桶以以下方式进行通信:
假设每个客户端都在 Download 存储桶中监视其文件夹,因此它“知道”何时有相关文件可供下载。
我要应用的访问策略如下:
由于客户端的数量实际上是无限的,因此我假设它们都共享相同的AWS凭证,并且没有特定于客户端的授权(这在其他地方使用令牌进行处理,并且基于只写存储桶访问)。
我已尝试使用用户策略和存储桶策略,并通过在线示例来应用以上内容,但客户端似乎始终具有对存储桶的完全访问权限,因此我可能缺少一些主要知识。
上述情况是否可能?如果可以,怎么办?
答案 0 :(得分:1)
首先,我应该警告不要在多个客户端/用户/设备之间共享凭据。这使得在尝试调试问题或防范攻击的情况下很难跟踪发生的情况。
授予客户访问存储桶的更好方法是:
这样,您可以跟踪客户端发出的所有请求,并可以更准确地控制访问。
生成临时凭证时,可以指定策略。对于您的情况,应将此政策授予客户:
ALL => True
您还授予服务器权限以同时使用两个存储桶:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpload",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::upload-bucket/*"
},
{
"Sid": "AllowListAndDownload",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::download-bucket",
"arn:aws:s3:::download-bucket/*"
]
}
]
}
(您可能希望授予其他权限,例如{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ServerPermissions",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::download-bucket",
"arn:aws:s3:::download-bucket/*"
"arn:aws:s3:::upload-bucket",
"arn:aws:s3:::upload-bucket/*"
]
}
]
}
。)
您不应使用存储桶策略,因为您只希望向特定实体授予权限。
答案 1 :(得分:1)
一种有趣的方法是为每个客户端都有一个文件夹。这可以使用系统变量aws:userid
完成。仅使用一个策略定义,您就可以覆盖所有用户,并且每个用户都有自己的私有区域供下载和上传。
该政策应如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpload",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::upload-bucket/*"
"Condition": {"StringLike": {"s3:prefix": ["${aws:userid}/*"]}}
},
{
"Sid": "AllowListAndDownload",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::download-bucket",
"arn:aws:s3:::download-bucket/*"
],
"Condition": {"StringLike": {"s3:prefix": ["${aws:userid}/*"]}}
}
]
}
aws:userid是roleid和userid的串联。只有您知道roleid,因此您需要与客户共享。 userid特定于您接受的登录系统。