130

images.mysite.comS3 のような単純なバケットと、バックアップなどを含む他のバケットがあります。

images.mysite.com画像をアップロードするために、特定のユーザーがバケットにアクセスできるようにしたいと考えています。しかし、私は彼に他のバケットを見せたくありません。それらが存在することすらありません。

これを行うポリシーを作成できませんでした。何か制限的なことを試みるたびに、バケットのリストがブロックされてしまいます。

4

23 に答える 23

119

私はしばらくこれを試してきましたが、最終的に実用的な解決策を思い付きました。実行するアクションの種類に応じて、異なる「リソース」を使用する必要があります。また、前の回答 ( など) に不足しているアクションをいくつか含め、DeleteObjectさらに制限( など) を追加しPutBucketAclました。

現在、次の IAM ポリシーが機能しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

バケットに関するアクションとオブジェクトに関するアクションは、別の arn を持つ必要があります。

于 2011-08-05T11:56:45.357 に答える
38

アクセス許可を付与せずに S3 コンソールへのアクセスを提供することはできませんListAllMyBuckets

私の場合(そしておそらくあなたの将来の読者も)、受け入れられる代替手段は、サインインしたユーザーを、表示したいバケットに直接リダイレクトすることです。

これを行うには、IAM サインイン URL に以下を追加します。 /s3/?bucket=bucket-name

完全なサインイン URL ( your-aliasbucket-nameを置き換えます):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

IAM ポリシー ( bucket-name を置き換えます):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

ユーザーに対してバケット固有のアクセス許可を作成する方法の詳細については、次のブログを参照してください。 /

于 2015-06-21T06:31:28.367 に答える
22

このポリシーを試してください。また、選択したバケットのみをユーザーにリストさせる方法がないことも考慮してください。すべてのバケットをリストすることも、何もリストしないこともできます。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
于 2011-07-08T19:43:17.380 に答える
5

回答がチェックされなかった理由について混乱していますか?

上記のソリューションから各ポリシー ステートメントを分類してみましょう。

このポリシー ステートメントバケットの内容に適用されますが、バック自体には適用されません。バケツに何が入っているかがわからないため、これはおそらく質問が求めているものではありません。

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

から派生したこの 2 つのステートメント ポリシーは、( arn:aws:s3:::your_bucket_here/) readonlyでバケットへの読み取り専用アクセスを許可しますが、バケットのコンテンツに対する CRUD ops は引き続き許可します ( arn:aws:s3:::your_bucket_here/*)。

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

ただし、ポリシーには以下のステートメントが含まれており、ユーザーはエンドポイントですべてのバケットを表示できます。これはおそらく、質問が求めているものではありません。

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

ただし、S3 ストアを閲覧するクライアントを使用する場合、上記は非常に便利です。クライアントがバケットではなくストアに直接アクセスする場合は、ルートにあるバケットのリストにアクセスする必要があります。

于 2013-06-14T21:08:39.200 に答える
3

おそらく最も単純な使用例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
于 2015-05-18T17:30:55.613 に答える
1

次の作業を行うことができました。他のバケットをリストすると、Access Denied メッセージが受信されたことを意味します。ただし、バケット名をパスとして設定して接続すると、必要なバケットを表示できました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

この接続をテストするために Cyber​​duck を使用していました。

于 2015-09-11T11:18:27.940 に答える
1

このポリシーを試してください。ユーザーはバケットを一覧表示できません。許可されたバケットへの直接リンクを使用する必要があります。

例: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
于 2019-01-04T10:21:35.477 に答える
1

上記の他のものと同様:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

ただし、ここに欠けている部分があります。S3->Home からバケットにアクセスすることはできませんが、直接リンクを介して目的のバケットのみにアクセスすることは可能です。

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

詳細については、次の投稿を参照してください。

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/

于 2019-10-21T10:51:47.820 に答える
0

同様のニーズを追加するだけで、これで解決します:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
于 2015-08-20T11:46:13.877 に答える
0

以下の解決策は私にとってはうまくいきました。特定のバケットmy-s3-bucketで特定のユーザーmy_iam_userにアクセスを許可するポリシーが必要でした。

このポリシーにより、ユーザーは特定の s3 バケットのファイルを一覧表示、削除、取得できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
于 2015-06-11T15:17:53.623 に答える
-2

Denyアクセスしたくないバケットの句を追加します。それらはまだリストされている可能性がありますが、それらの内容にアクセスすることはできません.

{
    "バージョン": "2012-10-17",
    "声明": [
        {
            "効果": "許可",
            "アクション": "s3:*",
            "リソース": "*"
        }、
        {
            "効果": "拒否",
            "アクション": "s3:*",
            "リソース": [
                "arn:aws:s3:::バケット名",
                「arn:aws:s3:::バケット名/*」
            ]
        }
    ]
}
于 2016-12-22T05:46:40.337 に答える