Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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
Json 如何在S3存储桶策略中执行OR条件?_Json_Amazon Web Services_Amazon Iam - Fatal编程技术网

Json 如何在S3存储桶策略中执行OR条件?

Json 如何在S3存储桶策略中执行OR条件?,json,amazon-web-services,amazon-iam,Json,Amazon Web Services,Amazon Iam,我正在制定S3桶策略。其思想是明确拒绝访问帐户中的所有IAM用户,但明确授予的用户除外 我发现了一篇解释如何限制特定用户访问的博客文章。它工作得很好。但是,我想扩展语法以包括第二个IAM用户,该用户将被允许访问。实际上,这是一个或条件 但是,我对JSON非常陌生,我不知道该怎么做 以下是限制单个用户访问的策略: { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny",

我正在制定S3桶策略。其思想是明确拒绝访问帐户中的所有IAM用户,但明确授予的用户除外

我发现了一篇解释如何限制特定用户访问的博客文章。它工作得很好。但是,我想扩展语法以包括第二个IAM用户,该用户将被允许访问。实际上,这是一个或条件

但是,我对JSON非常陌生,我不知道该怎么做

以下是限制单个用户访问的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AIDA<obfuscated id>:*",
                        "AIDA<obfuscated id>",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“行动”:“s3:*”,
“资源”:[
“arn:aws:s3:::我的桶”,
“arn:aws:s3:::我的桶/*”
],
“条件”:{
“StringNotLike”:{
“aws:userId”:[
“艾达:”,
“艾达”,
"111111111111"
]
}
}
}
]
}
有人能帮我编辑上面的JSON,允许我指定一个允许访问的附加用户ID的条件吗


谢谢你

您不需要创建此拒绝规则,因为除非有明确的允许规则,否则所有请求都被拒绝

要授权多个IAM用户,可以将其列为数组元素。因此,您可以按如下方式编写bucket策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAllS3ActionsForSpecificIAMUsers",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::<account-number-without-hyphens>:user/<username1>",
          "arn:aws:iam::<account-number-without-hyphens>:user/<username2>"
        ]
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-bucket", 
        "arn:aws:s3:::my-bucket/*"
      ]
    } 
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“AllowlS3ActionsforSpecificiaMusers”,
“效果”:“允许”,
“委托人”:{
“AWS”:[

“阿恩:aws:iam::。

好的,我想出来了

首先,我尝试将第二个
StringgNotLike
子句添加到
条件中,但没有成功

在做了更多的阅读之后,我意识到Condition子句接受多个键/值对。事实上,我在问题中展示的原始策略已经做到了这一点。我只需要向已经存在的数组中添加更多的值

有效的策略如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-private-bucket",
                "arn:aws:s3:::my-private-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AIDA<obfuscated-id-1>:*",
                        "AIDA<obfuscated-id-1>",
                        "AIDA<obfuscated-id-2>:*",
                        "AIDA<obfuscated-id-2>",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“行动”:“s3:*”,
“资源”:[
“arn:aws:s3:::我的私人桶”,
“arn:aws:s3:::我的私人桶/*”
],
“条件”:{
“StringNotLike”:{
“aws:userId”:[
“艾达:”,
“艾达”,
“艾达:”,
“艾达”,
"111111111111"
]
}
}
}
]
}

当我意识到密钥已经指定了一个值数组时,我只是将第二个用户id添加到数组中,效果很好。

Hi Khalid,谢谢你的回复。默认情况下,帐户中的所有用户(具有S3访问权限)有权访问所有bucket。我有一个bucket,该bucket只能由特定IAM用户访问。因此,该策略说,如果用户名不是(StringNotLike)特定用户,则拒绝。这是有效的。问题是,如何将用户添加到允许列表中?我从这里得到了这个想法:这并没有回答所述的问题。