Amazon web services 如何编写IAM策略以只提供一个目录的完全s3访问权限

Amazon web services 如何编写IAM策略以只提供一个目录的完全s3访问权限,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,我试图在一个s3存储桶上授予所有权限,但只授予一个文件夹。我正在尝试使用显式拒绝文件夹名是北京路径 buck123测试/中国/北京/。bucket名称是buck123 test { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1561641021576", "Action": [ "s3:ListBucket" ], "Effect":

我试图在一个s3存储桶上授予所有权限,但只授予一个文件夹。我正在尝试使用显式拒绝文件夹名是北京路径 buck123测试/中国/北京/。bucket名称是buck123 test

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1561641021576",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::buck123-test"
    },
    {
        "Sid": "Stmt1561639869054",
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": "arn:aws:s3:::buck123-test/china/Beijing"
    }
]
}


由于上述策略不起作用,我如何实现我的要求

您的策略缺少
允许对bucket中的对象执行操作

那怎么办?(我自己没有测试,让我们报告一下这是否有效)


请注意,您需要这两种资源。
ListBucket
和其他bucket级别的操作需要bucket name only资源。
/*
资源对于对象级别的操作是必需的,例如
Put
Get
您的策略缺少
允许对bucket中的对象执行操作

那怎么办?(我自己没有测试,让我们报告一下这是否有效)


请注意,您需要这两种资源。
ListBucket
和其他bucket级别的操作需要bucket name only资源。
/*
资源是对象级操作(如
Put
Get

等)所必需的修订答案,您缺少策略文档中的一些关键部分,请尝试此操作,因为它应该可以工作,但我尚未对此进行测试

如果您想允许用户访问GetObject、PutObject等,可以添加其他操作

{
  "Id": "Policy1561648158487",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1561648106618",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::buck123-test/china/Beijing/*",
      "Principal": "*"
    },
    {
      "Sid": "Stmt1561648156125",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::buck123-test/*",
      "Principal": "*"
    }
  ]
}

修改后的答案,您遗漏了政策文件中的一些关键部分,请尝试此方法,因为它应该会起作用,但我尚未测试此方法

如果您想允许用户访问GetObject、PutObject等,可以添加其他操作

{
  "Id": "Policy1561648158487",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1561648106618",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::buck123-test/china/Beijing/*",
      "Principal": "*"
    },
    {
      "Sid": "Stmt1561648156125",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::buck123-test/*",
      "Principal": "*"
    }
  ]
}

谢谢你的回复。但我试图明确拒绝访问北京文件夹。所以用户应该可以在bucket上做任何事情,但是不能访问Beijing Folderah,抱歉我误解了这一部分。我会更新答案谢谢你的回复。但我试图明确拒绝访问北京文件夹。所以用户应该可以在bucket上做任何事情,但是不能访问Beijing Folderah,抱歉我误解了这一部分。我会更新答案谢谢你的回答。我仍然可以列出北京文件夹中的对象。使用命令aws s3 ls buck123 test/china/Beijing/我也可以阻止此操作吗好的一点,我不认为您可以将ListBucket操作限制在bucket的一部分我和Sebastien的想法相同,您可能只想拒绝s3:*不起作用。。。ListBucket API类似于文件系统上的“ls”命令。如果可以读取目录,则可以看到其中的所有文件,并且不能隐藏某些文件。查看文件并不意味着客户可以访问文件内容。如果您想允许除某些文件之外的ListBucket,我建议使用两个Bucket。(但问问你自己:你想实现什么?授权ListBucket真的有必要吗?)谢谢你的回答。我仍然可以列出北京文件夹中的对象。使用命令aws s3 ls buck123 test/china/Beijing/我也可以阻止此操作吗好的一点,我不认为您可以将ListBucket操作限制在bucket的一部分我和Sebastien的想法相同,您可能只想拒绝s3:*不起作用。。。ListBucket API类似于文件系统上的“ls”命令。如果可以读取目录,则可以看到其中的所有文件,并且不能隐藏某些文件。查看文件并不意味着客户可以访问文件内容。如果您想允许除某些文件之外的ListBucket,我建议使用两个Bucket。(但问问你自己:你想实现什么?授权ListBucket真的有必要吗?)