我正在设置S3存储桶的一部分,希望将访问限制在VPC上,同时仍然允许从AWS控制台访问存储桶。
按照建议的here,我创建了一个S3端点并将其添加到主路由表中。端点上的策略允许完全访问所有资源。
我创建了一个S3策略(请参见下文)并将其添加到存储桶中。保存策略后,就无法再从控制台访问存储桶。
我还试图以“ aws:username”:“ user1”的形式专门将用户添加到条件“ StringNotEquals”,但无济于事。
{
"Version": "2012-10-17",
"Id": "Policy-S3-Bucket-myBucket",
"Statement": [
{
"Sid": "Access-via-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::myBucket",
"arn:aws:s3:::myBucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-01c9d66c12345"
}
}
},
{
"Sid": "Allow-console-access",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::myBucket",
"arn:aws:s3:::myBucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::<account-id>:user/user1", "arn:aws:iam::<account-id>:user/user2"
]
}
}
]
}
预期结果是,只能由上述VPC和AWS控制台访问S3存储桶。
实际结果是:
存储桶概述显示“错误:访问被拒绝”,权限页面(公共访问设置)显示:“您无权查看此配置。请与您的帐户管理员联系以请求访问权限。”
我必须使用root用户登录并删除策略以重新获得对存储桶的访问权限。
答案 0 :(得分:0)
我找到了一个可行的解决方案。我已经在策略模拟器中对其进行了测试,它在实时环境中似乎也可以正常工作。以下策略可以解决问题:
handleSubmit = event => {
event.preventDefault();
console.log(event.target.checkBoxName.value)
//console.log(event.target.checkBoxName[].value) //This gives me error, cannot use [] here
// fetch(............, {
// method: "POST",
// headers: { "Content-Type": "application/json" },
// body: JSON.stringify({
// checkBox: event.target.checkBoxName.value
// })
// })
// .then(response => {
// console.log(response);
// if (response.status === 200) {
// console.log('successfully')
// } else {
// alert('Check your inputs')
// }
// })
// .catch(error => {
// alert('Server error')
// });
}
该策略要求sourceVpc字符串或用户名必须与条件中列出的相同。
诚然,该策略是冗长的,并且有大量的复制。如果有人有想法更有效地解决这个问题,我会很高兴。
答案 1 :(得分:0)
技巧似乎是拒绝所有内容,除非它来自用户或VPC,但必须处于相同条件。策略的工作方式是“拒绝”规则优先于所有其他规则,因此,如果您拒绝,则不能再允许随后的规则;已经被拒绝了,就是这样。
顺便说一句,根用户的aws:userid是帐户ID。使用该用户可能是一个不好的做法,但是很好:P
因此,我的存储桶现在仅接受来自VPC和我通过AWS Web控制台登录的用户的流量(这样我就不会在Web控制台中收到访问被拒绝的错误)
{
"Version": "2012-10-17",
"Id": "Policy154336817545456388",
"Statement": [
{
"Sid": "Block-if-not-from-VPC-or-Me",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-4598ujfjrhc",
"aws:userid": "576767373466"
}
}
}
]
}
答案 2 :(得分:0)
此政策已经过测试,可以准确提供您所需的信息:
Statement": {
"Sid": "Allow-anonymous-access-from-specific-VPC",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket_name/*",
"Condition": {
"StringEquals": {
"aws:SourceVpc": "some-vpc-id"
}
}
}
这将允许匿名访问来自“ some-vpc-id”的请求,同时允许从AWS控制台进行访问。
您的VPC必须配置S3端点才能正常工作。