【问题标题】:Cannot match Condition statement with actions and resources in s3 bucket policy无法将条件语句与 s3 存储桶策略中的操作和资源匹配
【发布时间】:2017-12-04 11:43:30
【问题描述】:

我的目标是拒绝所有用户对存储桶的大部分内容进行写入访问,但一个用户拥有对附加到用户的单独策略中定义的存储桶的完全访问权限。存储桶的顶级目录都包含类似的子目录。我需要拒绝访问除名为subf 的所有子目录类型。大多数顶级目录都包含名为subf 的子目录。

这是我目前的政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root",
                    "arn:aws:iam::111122223333:user/system"
                ]
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteBucket",
                "s3:DeleteBucketWebsite",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:PutAccelerateConfiguration",
                "s3:PutBucketAcl",
                "s3:PutBucketCORS",
                "s3:PutBucketLogging",
                "s3:PutBucketNotification",
                "s3:PutBucketRequestPayment",
                "s3:PutBucketTagging",
                "s3:PutBucketVersioning",
                "s3:PutBucketWebsite",
                "s3:PutLifecycleConfiguration",
                "s3:PutReplicationConfiguration",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionTagging",
                "s3:Replicate*",
                "s3:RestoreObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-test-a/*",
                "arn:aws:s3:::bucket-test-a"
            ],
            "Condition": {
                "StringNotLike": {
                    "s3:prefix": ["*/subf/*"] 
                },
                "StringEquals": {
                    "s3:delimiter": ["/"]
                }
            }
        }
    ]
}

尝试将此策略放在存储桶上时,我收到错误消息:

"调用 PutBucketPolicy 时发生错误 (MalformedPolicy) 操作:条件不适用于动作组合和 声明中的资源"

我发现的最佳线索是“字符串条件旨在作为新对象的要求应用”https://serverfault.com/questions/569046/anonymous-access-to-s3-bucket-only-from-my-ec2-instances 我一直很难找到文档来深入研究。

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-iam


    【解决方案1】:

    我认为问题在于您使用的条件键不适用于您指定的操作。例如,如果您查看S3-specific condition keys 上的文档,您会看到对于每种类型的权限(操作),只有一小部分“适用条件键”。

    s3:prefix 和 s3:delimiter 条件键仅适用于 s3:ListBucket 和 s3:ListBucketVersions 权限,但这些都不存在于您的操作列表中。

    如果您尝试匹配 s3 存储桶密钥,您可能必须在“资源”部分进行匹配。例如,您可以使用“arn:aws:s3:::bucket-test-a/*/subf/*”匹配 subf 路径。如果要匹配除 subf 路径之外的所有内容,则应使用 NotResource 而不是 Resource。

    我还注意到您将存储桶级操作与对象级操作分组。尽管这通常适用于简单的策略,但您可能必须将策略拆分为多个语句,以便您的资源与您的操作相匹配。

    【讨论】:

    • 太棒了!这是完全正确的。遗憾的是,这些命令有时会返回真正难以理解的错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2011-09-10
    • 1970-01-01
    相关资源
    最近更新 更多