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 AWS IAM策略中的变量资源名称_Amazon Web Services_Amazon S3_Amazon Iam - Fatal编程技术网

Amazon web services AWS IAM策略中的变量资源名称

Amazon web services AWS IAM策略中的变量资源名称,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,我在程序中使用“标准前缀-{variable}”创建S3存储桶。尝试创建IAM策略,以便用户可以更新、创建和删除帐户中的存储桶,但前提是存储桶名称包含“标准前缀”。即,我不想允许修改帐户中的其他存储桶。我找到了很多方法来限制对特定bucket名称下bucket内资源的访问,但是当bucket名称发生变化时,没有方法限制访问 类似于(似乎不起作用): 例如: 基于用户名的动态名称是我找到的最接近的名称。但是我需要一个通配符作为bucket名称的变量部分: { "Version": "2012-

我在程序中使用“
标准前缀-{variable}
”创建S3存储桶。尝试创建IAM策略,以便用户可以更新、创建和删除帐户中的存储桶,但前提是存储桶名称包含“标准前缀”。即,我不想允许修改帐户中的其他存储桶。我找到了很多方法来限制对特定bucket名称下bucket内资源的访问,但是当bucket名称发生变化时,没有方法限制访问

类似于(似乎不起作用):

例如:

基于用户名的动态名称是我找到的最接近的名称。但是我需要一个通配符作为bucket名称的变量部分:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "sqs:*",
    "Resource": "arn:aws:sqs:us-west-2:*:${aws:username}-queue"
  }]
}  
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}
指定存储桶名称中包含的项:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "sqs:*",
    "Resource": "arn:aws:sqs:us-west-2:*:${aws:username}-queue"
  }]
}  
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}

这就是最终奏效的政策。创建存储桶时,他们会得到一个名称,例如
标准前缀-20150101
标准前缀-20150515
,等等。使用此IAM策略的用户可以对这些存储桶执行任何操作,但不能修改帐户中的其他存储桶

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "One",
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "arn:aws:s3:::standard_prefix-*"
            ]
        },
                {
            "Sid": "Two",
            "Effect": "Allow",
            "Action": [
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

我不知道为什么我在问题中的“类似于…”的说法不起作用,因为答案基本相同。你的答案和你最初尝试的答案之间的关键区别是
标准前缀
标准前缀
。注意破折号和下划线。