Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 无法将条件语句与s3 bucket策略中的操作和资源匹配_Amazon Web Services_Amazon S3_Amazon Iam - Fatal编程技术网

Amazon web services 无法将条件语句与s3 bucket策略中的操作和资源匹配

Amazon web services 无法将条件语句与s3 bucket策略中的操作和资源匹配,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,我的目标是拒绝所有用户对大部分存储桶的写访问,只有一个用户可以完全访问附加到该用户的单独策略中定义的存储桶。bucket的顶级目录都包含类似的子目录。我需要拒绝访问除名为subf之外的所有子目录类型。大多数顶级目录都包含名为subf的子目录 这是我目前的政策: { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "NotPrincipal": {

我的目标是拒绝所有用户对大部分存储桶的写访问,只有一个用户可以完全访问附加到该用户的单独策略中定义的存储桶。bucket的顶级目录都包含类似的子目录。我需要拒绝访问除名为
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时出错(格式错误) 操作:条件不适用于动作和动作的组合 报表中的资源”


我发现的最好的线索是“字符串条件是作为新对象的需求应用的”,我一直很难找到文档来深入研究它。

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

s3:prefix和s3:delimiter条件键仅适用于s3:ListBucket和s3:ListBucketVersions权限,但它们都不在操作列表中

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

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