我创建了一个IAM用户(没有MFA(,并将以下策略附加到该用户。这是为了确保对S3的调用使用MFA。但是,当我通过AWS CLI为该用户使用AccessKeys时,我能够在没有任何授权错误的情况下执行S3操作aws s3 ls
。
我是做错了什么还是AWS中的错误?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
不完全确定OP中的策略语句不起作用的原因。但是我确实将AmazonS3FullAccess
策略与以下策略之一附加在一起,它的行为与预期的一样。对于long-term credentials
,我不能执行S3操作,而对于temporary credentials
,当通过MFA认证时,我能够执行S3操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Effect": "Deny",
"Resource": "*",
"Action": "s3:*",
"Condition": {
"Null": {
"aws:MultiFactorAuthAge": true
}
}
}
]
}
您使用的是Allow
,但应该使用AWS文档中解释的Deny
。示例:
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
}
]
}
仔细阅读AWS文档,因为如果您使用Deny
不正确,您可能会将自己锁定在存储桶之外。