你能否编写一个S3存储桶策略,拒绝除了特定IAM角色和AWS服务角色(例如billingreports.amazonaws.com)之外的所有主体访问?
我尝试使用“Deny”和“NotPrincipal”,但以下示例均无效,因为AWS不支持具有多个类型的主体。
这样可以保存策略,但会锁定存储桶(警告:只有根用户才能更新策略以解锁)。
因此,我正在尝试使用条件,但找不到正确的组合方式。这是一个示例策略。
我尝试使用“Deny”和“NotPrincipal”,但以下示例均无效,因为AWS不支持具有多个类型的主体。
这样可以保存策略,但会锁定存储桶(警告:只有根用户才能更新策略以解锁)。
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::<account_id>:root",
"arn:aws:iam::<account_id>:role/specialBillingRole"
],
"Service": "billingreports.amazonaws.com"
}
因此,我正在尝试使用条件,但找不到正确的组合方式。这是一个示例策略。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "billingreports.amazonaws.com"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket/*",
"arn:aws:s3:::my-bucket"
],
"Condition": {
"StringNotLike": {
"aws:PrincipalArn": [
"arn:aws:iam::<account_id>:role/specialBillingRole",
"billingreports.amazonaws.com",
"<account_id>"
]
}
}
}
]
}
更新:根据一些评论的建议修改了问题。
第二次更新:还尝试了下面的方法,但仍会给予账户中所有角色/用户访问权限(无法在Principal
中使用通配符)。
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::<account_id>:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket/*",
"arn:aws:s3:::my-bucket"
],
"Condition": {
"ArnNotEquals": {
"aws:PrincipalArn": [
"arn:aws:iam::<account_id>:role/specialBillingRole",
"<account_id>"
]
}
}
}
NotPrincipal
和Deny
时,"必须同时指定未被拒绝的主体的账户ARN。" 参见此处。我不知道这是否有帮助,但是在您的前两次尝试中没有提供账户原则。 - MarcinPrincipal
角色并允许访问吗?这对我来说行不通,因为帐户中的其他角色将通过其IAM策略(即具有PowerUserAccess、ReadOnly策略等的角色)访问存储桶。 - playdoz