Amazon web services 仅限制从VPC访问S3存储桶
在S3中,我有几个桶需要限制访问。 在实施过程中,我现在感到困惑,感谢您帮助我理解这一点 这是我的设想--Amazon web services 仅限制从VPC访问S3存储桶,amazon-web-services,amazon-s3,bucket,Amazon Web Services,Amazon S3,Bucket,在S3中,我有几个桶需要限制访问。 在实施过程中,我现在感到困惑,感谢您帮助我理解这一点 这是我的设想-- 创建了一个VPC,公共子网,ec2 使用管理员用户aws1234 la创建了一个bucket 创建了一个bucket策略并附加到bucket上,上面写着“仅当来自我的vpc时才允许访问” 接下来,从CLI,aws s3 ls 它正在显示桶 我在哪里犯了错误? 理想情况下,第4步应该返回一个错误,因为我没有通过我的VPC 任何帮助都将不胜感激 谢谢因为您在bucket级别指定了资源,它将拒绝
谢谢因为您在bucket级别指定了资源,它将拒绝bucket中的所有操作。但是,bucket的列表作用于资源
arn:aws:s3:::*
,并且不会被拒绝,因此即使您不在专有网络内,也会显示bucket
另外,如果不阻塞所有存储桶,则无法仅为存储桶部分隐藏。来自:
新的条件键aws:sourceVpce
和aws:sourceVpc
用于VPC端点的bucket策略
因此,您需要通过VPC端点访问S3 bucket才能限制对VPC的访问。这是因为,如果没有VPC端点,Amazon S3接收到的请求似乎只是“来自互联网”,因此无法识别源VPC。不同的是,通过VPC端点发出的请求包含源VPC的标识符
让它工作起来
假设:您的用户已经拥有允许访问存储桶的IAM策略。您想知道如何进一步限制bucket,使其只能从特定的VPC访问。如果不是这样,那么您应该使用Allow
策略授予对bucket的访问权,因为默认情况下访问被拒绝
为了再现你的情况,我做了以下工作:
- 创建了一个带有公共子网的新VPC
- 在VPC中添加了一个VPC端点
- 在公共子网中启动了一个Amazon EC2实例,分配了一个IAM角色,该角色已经有权访问我的所有Amazon S3存储桶
- 创建了一个亚马逊S3 bucket(
)我的专有网络bucket
- 将存储桶策略添加到存储桶中(从):
允许访问权限的IAM策略访问存储桶。此策略正在添加一个Deny
,该策略将覆盖他们已经拥有的对bucket的访问权限
- 登录到新VPC中的Amazon EC2实例,然后:
- 运行aws s3 ls s3://my vpc only bucket
- 运行aws s3 ls s3://my vpc only bucket
- 收到一个
错误(这正是我们想要的!)AccessDenied
Deny
和s3::
的副作用。您始终可以使用根凭据(通过电子邮件地址登录)删除bucket策略,然后转到S3控制台中的bucket策略并单击删除。(在进入Bucket策略的屏幕上,您会看到一些错误,但它会起作用。)
通过允许的替代方法
另一方面,如果用户尚未访问所有AmazonS3存储桶,那么默认情况下,他们将无法访问新的存储桶。因此,您需要授予允许访问bucket的权限,但只能通过VPC端点从VPC访问
设置与上述相同,但桶策略为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Allow", <-- This changed
"Resource": ["arn:aws:s3:::my-vpc-only-bucket",
"arn:aws:s3:::my-vpc-only-bucket/*"],
"Condition": {
"StringEquals": { <--- This changed
"aws:sourceVpc": "vpc-111bbb22"
}
}
}
]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“仅访问特定专有网络”,
“委托人”:“*”,
“行动”:“s3:*”,
“效果”:“允许”,您可以从您的VPC中调用aws s3 ls
吗?我将尝试在VPC中从我的ec2中运行aws s3 ls,并在下次更新hour@TuanVA我用s3:List*为ec2创建了一个角色。输出显示了我使用bucket策略拒绝访问的bucket。我在哪里犯了这个错误?相关:如果我理解你的答案-我没有在任何地方指定arn:aws:s3:::*,那么它是从哪里获得该权限的。您能帮我克服这个困惑吗。默认情况下listbucket在那里吗?我没有分配。但是,如果我指定了aws s3 ls s3://aws1234 ls,我会出现以下错误。发生错误(AccessDenied)调用ListObjectsV2操作时:访问被拒绝
,这是预期的,因为您拒绝bucket路径级别中的list objects操作。因此,您没有权限查看bucket中的对象列表。由于无法从控制台中删除bucket策略,我没有移动到允许的root访问权限(谢谢,你的评论很有帮助!)现在,我仍然无法获得所需的结果。我的目标很简单,我只希望用户通过vpce查看一个存储桶。当我使用mac访问时,我得到了积极的结果。在使用mac时,我使用s3*角色。理想情况下,mac应该给出一个错误。有什么想法吗?如果您的计算机使用的凭据具有access至s3:
,则您将有权访问存储桶。这是因为您可以从IAM角色或存储桶策略获得访问权限。如果您希望保留对某些用户使用s3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-vpc-only-bucket",
"arn:aws:s3:::my-vpc-only-bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbb22"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Allow", <-- This changed
"Resource": ["arn:aws:s3:::my-vpc-only-bucket",
"arn:aws:s3:::my-vpc-only-bucket/*"],
"Condition": {
"StringEquals": { <--- This changed
"aws:sourceVpc": "vpc-111bbb22"
}
}
}
]
}