【发布时间】:2019-06-12 23:03:26
【问题描述】:
我正在设置一组 S3 存储桶,并希望限制对 VPC 的访问,同时仍允许从 AWS 控制台访问这些存储桶。
按照here 的建议,我创建了一个 S3 端点并将其添加到主路由表中。端点上的策略允许完全访问所有资源。
我创建了一个 S3 策略(见下文)并将其添加到存储桶中。一旦我保存策略,就无法再从控制台访问存储桶。
我也尝试过专门将用户添加到条件“StringNotEquals”中,形式为“aws:username”:“user1”,但无济于事。
{
"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"
]
}
}
]
}
预期结果是 S3 存储桶只能由上述 VPC 并通过 AWS 控制台访问。
实际结果是:
存储桶概览显示“错误:访问被拒绝”,权限页面(公共访问设置)显示:“您无权查看此配置。请联系您的帐户管理员申请访问权限。”
我必须使用 root 用户登录并删除策略才能重新获得对存储桶的访问权限。
【问题讨论】:
-
当您说您要允许从控制台访问时,您是真的意思还是您的意思是您希望特定 IAM 用户可以访问 S3 存储桶(无论使用何种机制,是控制台、SDK、AWSCLI)?您尝试的政策建议后者。
-
具体来说,我想让使用 AWS 控制台的管理 (IAM) 用户可以使用 S3 存储桶。这意味着直接在控制台中编辑存储桶 c 配置、更改策略等。目前这是不可能的。通过 SDK 和 AWSCLI 访问也很好,尽管我目前不知道如何实现。在 SDK/CLI 方面,我会为此使用角色(同样,我需要弄清楚这样做的正确方法是什么)
-
您能否测试仅包含第一个“拒绝”语句的策略(删除您当前拥有的“允许”语句)并将条件修改为:“StringNotEquals”:{“aws:sourceVpce”: “vpc-01c9d66c12345”、“aws:用户名”:“user1”、“aws:用户名”:“user2”}。最好在您不关心的新存储桶上进行测试,以防万一。
-
我试过了。似乎这会导致 AND 语句,而不是 OR。据我了解,您可以对单个键具有多个值,这些值被评估为“或”。另一方面,两个键被评估为 AND。因此,上述要求“aws:sourceVpce”=“vpc-01c9d66c12345”和“aws:username”=“user1”两个语句都为真。
-
是的,它是一个 AND。但是,我提出的策略无论如何都行不通,因为您不能在同一条件下拥有多个 aws:username 元素。
标签: amazon-web-services amazon-s3 policy