我想创建一个策略并将其附加到用户,这将只允许他们从特定VPC上的EC2实例访问Amazon S3。尝试了以下逻辑,但它不允许用户访问AmazonS3,即使EC2实例正在vpc-35test12上运行。
有没有办法阻止用户访问AmazonS3,但只允许他们从特定的vpc或子网访问?
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*",
"account:*",
"s3:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::*",
"Condition": {
"StringLike": {
"aws:SourceVpc": "vpc-35test12"
}
}
条件aws:SourceVpc
适用于s3的VPC端点。因为即使请求是从VPC发起的,S3的所有流量也只能通过公共互联网。如果你想让专有网络通过内部亚马逊网络(不需要通过公共互联网(私下访问S3,你需要为S3创建一个专有网络端点,然后使用aws:SourceVpc
条件来限制只访问专有网络。
如果你只想允许从EC2实例访问S3,正如@Ervin所建议的:
- 阻止S3上的公共访问
- 将IAM角色与EC2实例关联
- 为允许访问S3的角色分配IAM策略
我认为您最好创建一个特定的IAM角色,并将其分配给您希望允许访问S3 bucket的实例。之后,用针对"Principal" : "*"
和aws:userId
或aws:PrincipalArn
的显式Deny
来阻止对桶的所有其它访问。这里有一个策略示例
{
"Sid":"ItIsOkToDoThis",
"Effect":"Deny",
"Action":"*",
"Principal":"*",
"Resource":[
"arn:aws:s3:::ACCESSIBLE_S3_BUCKET/*",
"arn:aws:s3:::ACCESSIBLE_S3_BUCKET"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"UNIQUE_ROLE_ID:*"
]
}
}
}
查看本文了解更多详细信息https://levelup.gitconnected.com/how-i-locked-the-whole-company-out-of-an-amazon-s3-bucket-1781de51e4be
最佳,Stefan