特定のバケットまたはフォルダに対する Amazon S3 コンソールのアクセス権をユーザーに付与するにはどうすればよいですか?

最終更新日: 2022 年 7 月 22 日

バケットまたはフォルダ (プレフィックス) に対する、Amazon Simple Storage Service (Amazon S3) コンソールのアクセス権をユーザーに付与したいと考えています。ただし、アカウント内の他のバケットや、バケット内の他のフォルダを、そのユーザーが表示できないようにしたいと考えています。ユーザーのコンソールアクセス権限を、特定の Amazon S3 バケットまたはフォルダのみに制限するにはどうすればよいですか?

簡単な説明

ユーザーの S3 コンソールのアクセス権を、特定のバケットまたはフォルダ (プレフィックス) に制限するには、そのユーザーの AWS Identity and Access Management (IAM) のアクセス権限を変更します。IAM のアクセス権限を変更するには、以下の手順を実行します。

1.    s3:ListAllMyBuckets アクションへのアクセス許可を削除します。

2.    ユーザーにアクセスさせたいバケットまたはフォルダについてのみ、s3:ListBucket へのアクセス権限を追加します。
注: ユーザーに、バケットまたはフォルダとの間でのオブジェクトのアップロードおよびダウンロードを許可するには、s3:PutObjects3:GetObject も含める必要があります。

警告: これらのアクセス権限を変更した後、メインの Amazon S3 コンソールにアクセスしたときに、「アクセスが拒否されました」というエラーがユーザーに表示されます。ユーザーは、バケットまたはフォルダへの直接コンソールリンクを使用して、バケットにアクセスする必要があります。バケットへの直接コンソールリンクは次のようになります。

https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/

フォルダ (folder2 など) への直接コンソールリンクは、次のようになります。

https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/folder1/folder2/

注意: Amazon S3 では、ファイル階層ではなくフラットなデータ構造が使用されます。コンソールでは、ファイルのグループ化や整理を行うために、フォルダの概念がサポートされています。

解決方法

特定のバケットもしくはフォルダーのみにコンソールアクセスが可能なように、ユーザーの IAM アクセス許可を更新するためには、以下の手順に従ってください。

1.    IAM コンソールを開きます。

2.    コンソールから、特定のバケットにのみアクセスさせる IAM ユーザーまたはロールを開きます。

3.    IAM ユーザーまたはロールの [ Permissions ] タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。

4.    JSON ポリシードキュメントでは、 s3:ListAllMyBuckets アクション (すべての S3 アクション) または s3:* アクションにユーザー権限に付与するポリシーを検索します。

5.    ポリシーを変更し、s3:ListAllMyBuckets アクションに対するアクセス権限を削除します。

注: アタッチされたユーザーポリシーが「*」リソースで s3:* または Full Admin アクセスを許可している場合 、ポリシーには s3:ListAllMyBuckets アクセス権限が既に含まれています。したがって、「*」リソースを削除します。代わりに、この記事に記載されているサンプルポリシーのいずれかを使用していることを確認してください。

6.    ユーザーにコンソールからアクセスさせたいバケットまたはフォルダについてのみ、s3:ListBucket へのアクセス権限を追加します。

以下のサンプルポリシーは、S3 バケットへのアクセス権についてのものです。

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

このポリシーでは、ユーザーが、DOC-EXAMPLE-BUCKET に対してのみ、s3:ListBucket、s3:PutObject、および s3:GetObject アクションを実行することを許可しています。

以下のサンプルポリシーは、フォルダへのアクセス権を付与するものです。このポリシーにより、ユーザーは DOC-EXAMPLE-BUCKET 内の folder2 に対してのみ s3: ListBucket、s3: ListBucketVersions、s3: PutObject、s3: GetObject、および s3: GetObjectVersion アクションを実行することができます。s3: ListBucketVersions および s3: GetObjectVersion はバケットのバージョニングが有効になっていて、ユーザーが以前のバージョンのオブジェクトにアクセスできるようにしたい場合にのみ必要です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUsersToAccessFolder2Only",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/folder1/folder2/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "folder1/folder2/*"
          ]
        }
      }
    }
  ]
}

7.    S3 バケットまたはフォルダへの直接コンソールリンクをユーザーに提供します。S3 バケットへの直接コンソールリンクは、次のようになります。

https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/

フォルダへの直接コンソールリンクは次のようになります。

https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/folder1/folder2/

ユーザーが、コンソールから S3 バケットまたはフォルダにアクセスするためには、直接リンクを使用する必要があります。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?