错误:应用 VPC 策略后 S3 存储桶中的访问被拒绝

Posted

技术标签:

【中文标题】错误:应用 VPC 策略后 S3 存储桶中的访问被拒绝【英文标题】:Error: Access Denied in S3 bucket after applying VPC policy 【发布时间】:2017-09-08 14:28:14 【问题描述】:

我已对allow only connections from my VPC应用了一项政策:


   "Version": "2012-10-17",
   "Id": "Policy1415115909153",
   "Statement": [
     
       "Sid": "Access-to-specific-VPC-only",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::examplebucket",
                    "arn:aws:s3:::examplebucket/*"],
       "Condition": 
         "StringNotEquals": 
           "aws:sourceVpc": "vpc-111bbb22"
         
       ,
       "Principal": "*"
     
   ]

但现在我得到“拒绝访问”,即使我尝试从给定 VPC 中的实例从 AWS 控制台访问它:

我已经阅读了https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/,但很遗憾我使用的是公司提供的联合登录,并且无法访问完整的 root 用户。

我的问题是为什么即使在 VPC 中我也无法访问存储桶?

我发现的一些类似问题 - Policy Denying Access On Amazon S3 和 S3 VPC end point Bucket policy

【问题讨论】:

在该 EC2 实例上安装 awscli,然后使用“aws s3 ls examplebucket”测试 S3 访问。 我使用联合登录(我使用公司的 AD 帐户登录)。我无权访问根用户或 IAM 用户。我不确定我是否可以访问 AWS CLI。 【参考方案1】:

为防止您的策略在 AWS 控制台中应用于联合用户,您可以在策略声明中使用 NotPrincipal 元素而不是 Principal 将他们“列入白名单”。例如:


   "Version": "2012-10-17",
   "Id": "Policy1415115909153",
   "Statement": [
     
       "Sid": "Access-to-specific-VPC-only",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::examplebucket",
                    "arn:aws:s3:::examplebucket/*"],
       "Condition": 
         "StringNotEquals": 
           "aws:sourceVpc": "vpc-111bbb22"
         
       ,
       "NotPrincipal": 
         "Federated": "arn:aws:iam::YOUR-AWS-ACCOUNT-ID:saml-provider/YOUR-PROVIDER-NAME"
       
     
   ]

【讨论】:

【参考方案2】:

您是否设置了 S3 的 VPC 终端节点?

在 S3 中有两种访问对象的方法。一种是通过 AWS 控制台,另一种是通过对 S3 对象的 HTTPS 调用。

如果您尝试从 AWS 控制台访问存储桶,则权限由您的 IAM 用户/角色和存储桶策略控制。您正在使用联合登录,所以我假设它是一个角色。

从 VPC-111bbb222 中的一个实例,注销 AWS 控制台并尝试使用 HTTPS URL 访问该存储桶中的对象。

【讨论】:

请注意,我在策略中使用的是aws:sourceVpc,而不是aws:sourceVpce。我正在关注教程“限制对特定 VPC 的访问”。 “限制对特定 VPC 端点的访问”位于其上方。 顺便说一句,我实际上可以从 VPC 访问存储桶中的文件,但我无法管理存储桶(如添加其他文件、更改策略等)我也在尝试遵循这个答案 - ***.com/a/43372890/492336,但到目前为止没有成功。 如果您可以访问存储桶中的对象,那么您可能有一个允许它的 ACL。您能否在“权限”选项卡中向我们展示任何 ACL? 我不能,因为一旦我应用该策略,我就会被拒绝访问。 啊啊啊,我在关注!我看到您正在使用 aws:sourceVpc,但是否有 VPC 端点? 1) 如果有一个端点,任何来自该 VPC 的发往 S3 的流量都将被强制流出该端点。 2) 现有政策限制了任何不是来自 VPC 的 s3 操作。 3) 如果源因为存在端点而被强制为 VPCE,您将永远无法在 VPC 中获取实例来正确管理存储桶,因为该策略仅允许 VPC 源。您需要删除端点以创建您的源 VPC 而不是 VPCE。

以上是关于错误:应用 VPC 策略后 S3 存储桶中的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用Python boto3上传Windows EC2实例中的文件至S3存储桶中

S3 端点访问被拒绝错误

AWS S3策略限制用户仅列出存储桶中的某些文件夹

允许用户访问 S3 存储桶中的一个目录

AWS S3 存储桶策略允许从特定 URL 的访问

使用 IAM 角色从 ECS 的 S3 存储桶中提取对象被拒绝访问