スキップしてコンテンツを表示

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

所要時間2分
0

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

簡単な説明

次のいずれかの方法で、S3 バケット内のオブジェクトへのパブリック読み取りアクセスを許可します。

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

重要: お使いのバケットで S3 Object Ownership[バケット所有者強制] に設定した場合は、バケットとオブジェクトの ACL を使用してパブリックアクセスを許可することはできません。ほとんどの場合、オブジェクトとバケットにアクセス許可を付与するには ACL は必要ありません。代わりに、AWS Identity Access and Management (IAM) ポリシーと S3 バケットポリシーを使用してアクセス許可を付与します。

デフォルトでは、新しいバケット、アクセスポイント、オブジェクトはパブリックアクセスを許可していません。AWS アカウント内のすべてのバケットに対するパブリックアクセスをブロックするように設定した場合、Bucket and objects not public というメッセージが表示されます。

パブリックバケットにアクセスするには、お使いのネットワークにおいて、そのバケットのドメインへのアウトバウンドトラフィックをブロックするファイアウォールや設定がないことを確認してください。

解決策

重要: デフォルトでは、新しい S3 バケットではパブリックアクセスをブロックする設定は True に設定されています。始める前に、アカウントレベルまたはバケットレベルで、パブリックアクセスをブロックする設定を False に変更します。

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

複数のオブジェクトを一度に公開する

警告: 公開する前に、各オブジェクトを綿密に確認してください。複数のオブジェクトを公開した後に、このアクションをすべてのオブジェクトに対して一括で取り消すことはできません。各オブジェクトの [アクセス許可] タブで [パブリックアクセス] を変更する必要があります。

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

  1. Amazon S3 コンソールを開き、公開するオブジェクトを選択します。
  2. [アクション] を選択し、**[公開する]**を選択します。
  3. [公開にする] ダイアログボックスで、オブジェクトのリストが正しいことを確認します。
  4. **[公開する]**を選択します。

単一のオブジェクトを公開する

単一のオブジェクトのみを公開するには、上記のプロセスを繰り返すか、次の手順を実行します。

  1. Amazon S3 コンソールを開き、公開するオブジェクトのバケットを選択します。
  2. [オブジェクト] で該当するオブジェクトを選択します。
  3. [アクセス許可] タブを選択し、[編集] を選択します。
  4. [全員] セクションで [オブジェクトの読み取り] を選択します。
  5. [このオブジェクトに対する変更の影響を理解しました] をクリックします。
  6. [変更を保存] を選択します。

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

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

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

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

注: exampleobject は、実際のオブジェクトに置き換えます。

または、次の put-object-acl コマンドを実行することで、AWS アカウントの所有者にオブジェクトのフルコントロールを付与し、その他のユーザーには読み取り専用アクセスを許可することもできます。

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

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

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

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

ポリシーを使用して特定のタグが付いたオブジェクトへのパブリック読み取りアクセスを許可するには、次の手順を実行します。

  1. 特定のタグが付いたすべてのオブジェクトへのパブリック読み取りアクセスを許可するバケットポリシーを追加します。たとえば、次のポリシーでは、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"
                    }
                }
            }
        ]
    }
  2. パブリック読み取りを許可するオブジェクトにタグを追加します。

  3. AWS CLI で get-object-tagging コマンドを実行し、オブジェクトに付与されたタグを確認します。

    aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
  4. タグのないオブジェクトにタグを追加するには、次の put-object-tagging コマンドを実行します。

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

    警告: 上記のコマンドは、オブジェクトにあるすべてのタグを上書きします。

  5. 既にタグが付いているオブジェクトに新しいタグを追加するには、次の put-object-tagging コマンドを実行します。

    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}]'
    

    注: 新しいオブジェクトタグと、以前のタグのうち保持するものを含める必要があります。

  6. オブジェクトのタグを確認するには、get-object-tagging コマンドをもう一度実行します。

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

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

警告: 次のバケットポリシーは、特定のプレフィックスに属するすべてのオブジェクトへのパブリック読み取りアクセスを許可します。このバケットポリシーを使用する前に、該当するユースケースがプレフィックス内のパブリック読み取りを許可するすべてのオブジェクトをサポートしていることを確認します。次のポリシーでは、プレフィックスへのリストアクセスは許可されません。ユーザーは、オブジェクトパスがわかっている場合にのみオブジェクトにアクセスできます。プレフィックスに存在しないオブジェクトにユーザーがアクセスしようとすると、403 エラーが発生します。

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

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"
                ]
            }
        ]
    }
  2. cp コマンドを実行し、オブジェクトをパブリック読み取りアクセスが可能なプレフィックスにコピーします。

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

注: オブジェクトに既にパブリック読み取りが可能なプレフィックスがある場合は、そのオブジェクトを新しいプレフィックスにコピーする必要はありません。

制限されたネットワークからパブリック S3 バケットまたはオブジェクトにアクセスする

特定の IP アドレス範囲からのアクセスを許可するバケットポリシーを追加することで、制限されたネットワークからパブリック S3 バケットまたはオブジェクトにアクセスできます。次のポリシー例では、192.0.2.0/24203.0.113.0/24 の CIDR 範囲からの GET リクエストを許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.0/24",
                        "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}

関連情報

ACL の設定

Amazon S3 ストレージへのパブリックアクセスをブロックする

コメントはありません

関連するコンテンツ