【发布时间】:2021-12-02 05:48:15
【问题描述】:
我在账户 A 中有一个 S3 存储桶。
此存储桶使用 ACL 授权 与账户 B 共享,其中账户 B 的规范 ID(具有所有权限)。
当存储桶策略为空时,账户 B 中的 EC2 实例能够列出账户 A 上的 S3 存储桶。
存储桶是公共的,我想授予对特定公共 IP 和账户 A 上配置的特定 VPC 的访问权限。
这是存储桶策略:
{
"Version": "2012-10-17",
"Id": "S3_Bucket_Policy",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account_B_Number:role/EC2_Role"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::s3_bucket_name",
"arn:aws:s3:::s3_bucket_name/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::s3_bucket_name",
"arn:aws:s3:::s3_bucket_name/*"
],
"Condition": {
"StringNotLike": {
"aws:SourceVpc": "vpc_id"
},
"NotIpAddress": {
"aws:SourceIp": [
"67.100.20.15/32",
"79.190.30.2/32"
]
}
}
}
]
}
我可以从以下 IP 地址和指定的 VPC 访问 S3 存储桶,但是我无法从账户 B 的 EC2 实例访问存储桶。
EC2 实例具有以下分配的角色以及以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": [
"arn:aws:s3:::s3_bucket_name",
"arn:aws:s3:::s3_bucket_name/*"
]
}
]
}
为什么我无法从账户 B 访问账户 A 中的存储桶?
【问题讨论】:
-
您的存储桶策略中有多个语句。其中之一是拒绝。拒绝胜过允许。您需要修改 Deny 语句,使其在从账户 B 访问存储桶时不生效。
-
或者,如果来自账户 A 的 VPC 或特定 IP(并且没有任何拒绝子句),则重新调整策略以仅允许相关 S3 操作。
标签: amazon-web-services amazon-s3 amazon-ec2 amazon-iam