Amazon S3 バケットの一部のオブジェクトにパブリック読み取りアクセス権を付与するにはどうすればよいですか?

最終更新日: 2020 年 10 月 20 日

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

簡単な説明

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

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

解決方法

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

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

複数のオブジェクトを同時に公開するには、以下のステップに従います。

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

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

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

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

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

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

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

または、次のコマンドを実行して、AWS アカウントの所有者にオブジェクトの完全コントロールを付与し、その他のユーザーには読み取り専用アクセスを許可します。

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

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --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:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

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

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

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

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

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

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

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

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

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

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

指定されたプレフィックスにパブリック読み取りアクセス権を付与するバケットポリシーを使用する

警告: 次のバケットポリシーは、特定のプレフィックスの下にあるすべてのオブジェクトに対してパブリック読み取りアクセス権を付与します。このバケットポリシーを使用する前に、ユースケースがプレフィックス内のパブリックに読み取り可能なすべてのオブジェクトをサポートしていることを確認します。 

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

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

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

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

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


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