对于一个AWS S3存储桶,除一个特定的IAM角色外,我想拒绝所有人访问。我创建了一个基于角色的策略以允许访问,并且有效。但是其他IAM用户也可以访问对象,我想防止这种情况。我尝试添加这样的存储桶策略,该策略将拒绝除该主体外的所有用户,然后允许该主体。但是此政策会阻止包括该角色在内的所有人访问。
我要阻止的其他IAM用户已附加到内置的AdminstratorAccess策略中。
{
"Version": "2012-10-17",
"Id": "PolicySecretBucket",
"Statement": [
{
"Sid": "StmtDenyAll",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::********:role/service-role/my-role"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Sid": "StmtAllowLambdaBot",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:role/service-role/my-role"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
答案 0 :(得分:3)
这就是我要做的:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MyExampleBucket",
"arn:aws:s3:::MyExampleBucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"ACCOUNT NUMBER"
]
}
}
}
]
}
这是它的工作方式。
s3.*
个操作MyExampleBucket
的所有s3操作,除了角色用户ID(如果删除了角色,如果是删除角色,则为根帐户的用户ID)之外的任何用户ID。 获取角色的用户ID:
aws iam get-role --role-name ROLE-NAME
答案 1 :(得分:1)
拒绝访问特定存储桶实际上非常困难。
例如,管理员可能具有承担角色的权限,因此他们仍然可以访问存储桶。
您还需要查看所有策略,以确保只有授权人员才能使用iam:PassRole
通过Amazon EC2实例承担角色。
一种更安全的方法是将存储桶放入单独的AWS帐户。然后,仅向特定用户(而非角色)授予跨帐户访问权限。这样,默认设置是管理员具有零访问权限,然后您将访问权限授予所需的人员。绕过这种访问方式的方法很少。