Amazon S3 バケットの一部のオブジェクトへのパブリック読み取りアクセスを許可する方法を教えてください。

最終更新日: 2020 年 3 月 27 日

Amazon Simple Storage Service (Amazon S3) バケットの一部のオブジェクトをパブリックに読み取り可能にしたいです。ただし、同じバケット内にある他のオブジェクトに対するアクセス許可を変更したくはありません。どうすればできますか?

簡単な説明

次のいずれかの方法でパブリック読み取りアクセスを有効にします。

  • Amazon S3 コンソールを使用してオブジェクトのアクセスコントロールリスト (ACL) を更新する
  • AWS コマンドラインインターフェイス (AWS CLI) を使用してオブジェクトの ACL を更新する
  • 特定のオブジェクトタグへのパブリック読み取りアクセスを許可するバケットポリシーを使用する
  • 特定のプレフィックスへのパブリック読み取りアクセスを許可するバケットポリシーを使用する

解決方法

重要: 開始する前に、アカウントレベルまたはバケットレベルで、オブジェクトをパブリックにできないようにするブロックパブリックアクセスが設定されていないことを確認します。デフォルトでは、ブロックパブリックアクセス設定は、新しい S3 バケットで True に設定されます。

Amazon S3 コンソールを使用してオブジェクトの ACL を更新する

複数のオブジェクトを一度に公開するには、次の手順通りに実行します。

警告: 複数のオブジェクトを公開した後、複数のオブジェクトに対するこのアクションを一度に元に戻すオプションはありません。パブリックアクセスを削除するには、Amazon S3 コンソールの各オブジェクトに移動し、オブジェクトの [アクセス許可] タブで [パブリックアクセス] を変更する必要があります。付与したパブリックアクセスを元に戻す、すべてのオブジェクトに対して行う必要があります。オブジェクトを公開する前に、オブジェクトのリストを慎重に確認してください。

  1. Amazon S3 コンソールを開きます。
  2. バケットのリストから、更新したいオブジェクトを含むバケットを選択します。
  3. オブジェクトが含まれているフォルダに移動します。
  4. オブジェクトリストから、公開するすべてのオブジェクトを選択します。
  5. [アクション]、[公開] の順にクリックします。
  6. [公開] ダイアログボックスで、オブジェクトのリストが正しいことを確認します。
  7. [公開] を選択します。

個々のオブジェクトを公開するには、次の手順通りに実行します。

  1. Amazon S3 コンソールから、更新するオブジェクトを含むバケットを選択します。
  2. オブジェクトを含むフォルダに移動します。
  3. オブジェクト名のリンクを選択してオブジェクトを開きます。
  4. [アクセス許可] タブを選択します。
  5. [パブリックアクセス] で [全員] を選択します。
  6. [全員] ダイアログボックスの [オブジェクトへのアクセス] で [オブジェクトを読み取る] を選択します。
  7. [保存] を選択します。

AWS CLI を使用してオブジェクトの ACL を更新する

Amazon S3 にすでに保存されているオブジェクトの場合、このコマンドを実行して、パブリック読み取りアクセス用に ACL を更新できます。

aws s3api put-object-acl --bucket awsexamplebucket --key exampleobject --acl public-read

または、このコマンドを実行して、AWS アカウント所有者にオブジェクトの完全なコントロール権限を付与し、他のすべてのユーザーに読み取りアクセスを付与できます。

注意: --grant-full-control の値には、アカウントの正規ユーザー ID を入力します。

aws s3api put-object-acl --bucket awsexamplebucket --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

特定のオブジェクトタグへのパブリック読み取りアクセスを許可するバケットポリシーを使用する

重要: 開始する前に、S3 オブジェクトのタグ付けの料金を確認してください。

まず、特定のタグを持つオブジェクトへのパブリック読み取りアクセスを許可するバケットポリシーを追加します。たとえば、このポリシーでは、キーと値のペア public=yes でタグ付けされたオブジェクトに対するパブリック読み取りアクセスを許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

次に、パブリックに読み取り可能にするオブジェクトにタグを追加します。Amazon S3 コンソールを使用してオブジェクトのタグを追加できます。または、AWS CLI を使用することもできます。

オブジェクトに既存のタグがあるかどうかを確認するには、次の AWS CLI コマンドを実行します。 

aws s3api get-object-tagging --bucket awsexamplebucket --key exampleobject

既存のタグがないオブジェクトにタグを追加するには、次のコマンドを実行します。

警告: このコマンドは、既存のオブジェクトのタグを上書きします。 

aws s3api put-object-tagging --bucket awsexamplebucket --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

既存のタグがあるオブジェクトにタグを追加するには、次のコマンドを実行します。新しいオブジェクトタグと、保持する既存のタグを必ず含めます。 

aws s3api put-object-tagging --bucket awsexamplebucket --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

オブジェクトタグを追加したら、このコマンドを実行してすべてのオブジェクトのタグを確認します。 

aws s3api get-object-tagging --bucket awsexamplebucket --key exampleobject

特定のプレフィックスへのパブリック読み取りアクセスを許可するバケットポリシーを使用する

特定のオブジェクトプレフィックスへのパブリック読み取りアクセスを許可するには、次のようなバケットポリシーを追加します。 

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

次に、パブリック読み取りアクセスを持つプレフィックスにオブジェクトをコピーします。次のようなコマンドを実行して、プレフィックスにオブジェクトをコピーできます。

aws s3 cp s3://awsexamplebucket/exampleobject s3://awsexamplebucket/publicprefix/exampleobject

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


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