Amazon web services S3 bucket策略拒绝除特定AWS服务角色和IAM角色之外的所有
您是否可以编写一个s3 bucket策略,该策略将拒绝访问除特定IAM角色和AWS服务角色(例如billingreports.amazonaws.com)之外的所有主体 我曾尝试将“Deny”与“NotPrincipal”一起使用,但以下示例都不起作用,因为我认为AWS不支持使用多种类型的主体 这允许您保存策略,但会锁定存储桶(警告:只有root用户才能更新策略以解锁)Amazon web services S3 bucket策略拒绝除特定AWS服务角色和IAM角色之外的所有,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,您是否可以编写一个s3 bucket策略,该策略将拒绝访问除特定IAM角色和AWS服务角色(例如billingreports.amazonaws.com)之外的所有主体 我曾尝试将“Deny”与“NotPrincipal”一起使用,但以下示例都不起作用,因为我认为AWS不支持使用多种类型的主体 这允许您保存策略,但会锁定存储桶(警告:只有root用户才能更新策略以解锁) 当然,您可以创建一个只授予服务角色和IAM角色访问权限的bucket策略,但需要明确的是,服务角色仍然以“arn:aws:IA
当然,您可以创建一个只授予服务角色和IAM角色访问权限的bucket策略,但需要明确的是,服务角色仍然以“arn:aws:IAM:::role…”开头 您是否正在尝试创建一个bucket策略,授予对特定服务和服务角色的访问权限?我这样问是因为,如果您创建了一个角色,并将billingreports.amazonaws.com作为其受信任的实体,并且该角色是用于访问bucket的,那么您不需要在bucket策略中单独列出该服务(如果该场景与我想象的一样) 还请注意,您确实可以将通配符与主体一起使用,并结合一个条件-我一直都这样做(请参见下面的示例策略)。当我想限制对特定角色的bucket访问时,我只需包含一个主体为我想要允许的角色的Allow语句,然后是一个主体为“AWS”:“*”的Deny语句,后面跟着一个条件,如:
{
"Version": "2008-10-17",
"Id": "PolicyScopedToSecurity",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[accountID]:role/[roleName]",
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[bucketName]",
"arn:aws:s3:::[bucketName]/*"
]
},
{
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[bucketName]",
"arn:aws:s3:::[bucketName]/*"
],
"Condition": {
"StringNotLike": {
"aws:PrincipalArn": [
"arn:aws:iam::[accountID]:role/[roleName]",
"[accountID]"
]
}
}
}
]
}
如果您确实需要服务本身来访问bucket,请告诉我,因为我的回答假设服务角色需要访问。:) 为什么不能指定角色,角色有一个信任策略,该策略限制了哪些服务可以使用它当您使用
NotPrincipal
和Deny
时,您“还必须指定not denied principal的帐户ARN。”来自。我不知道这是否有帮助,但您在头两次尝试中没有提供帐户原则。@ChrisWilliams您的意思是用允许指定一个角色作为主体
?这对我不起作用,因为帐户中的其他角色将通过其IAM策略(即具有PowerUserAccess、ReadOnly策略等的角色)访问bucket。@Marcin您需要帐户主体的权限是正确的。我只是尝试了多种类型的主体(IAM角色+AWS服务角色),它锁定了bucket。因此,看起来即使我能够保存策略,但实际上它是无效的,并使所有其他角色无效,因此它是Deny all。@playdoz Deny和非原则策略很难管理。你确定没有其他方法可以做到这一点,比如通过克里斯提到的角色?文档(与前面的链接相同)还写道“建议您在决定使用NotPrincipal之前探索其他授权选项。”
{
"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>"
]
}
}
}
]
}
{
"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>"
]
}
}
}
{
"Version": "2008-10-17",
"Id": "PolicyScopedToSecurity",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[accountID]:role/[roleName]",
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[bucketName]",
"arn:aws:s3:::[bucketName]/*"
]
},
{
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[bucketName]",
"arn:aws:s3:::[bucketName]/*"
],
"Condition": {
"StringNotLike": {
"aws:PrincipalArn": [
"arn:aws:iam::[accountID]:role/[roleName]",
"[accountID]"
]
}
}
}
]
}