Amazon S3 バケット内のパブリック (匿名) 所有権を持つオブジェクトの所有権を変更する方法を教えてください。

最終更新日: 2020 年 12 月 23 日

Amazon Simple Storage Service (Amazon S3) バケットには、パブリック (匿名) 所有権を持つオブジェクトがあります。AWS アカウントがオブジェクトを所有するようにオブジェクトの所有権を変更する方法を教えてください。

簡単な説明

デフォルトでは、S3 オブジェクトの所有者はオブジェクトをアップロードした ID です。つまり、バケットへのパブリック書き込みアクセスを許可すると、パブリック (匿名) ユーザーがアップロードしたオブジェクトの所有者はパブリックです。セキュリティの問題を防ぐため、バケットへのパブリックアクセスをブロックすることをお勧めします

匿名ユーザーがすでにオブジェクトをバケットにアップロード済みで、AWS アカウントでオブジェクトを所有する場合は、オブジェクトのアクセスコントロールリスト (ACL) を変更する必要があります。オブジェクトの ACL を変更して、バケット所有者 (アカウント) にオブジェクトのフルコントロールを付与します。

解決方法

オブジェクトの所有権をバケットを所有する AWS アカウントに変更するには、次の手順に従います。

1.    オブジェクト ACL を追加するには、AWS コマンドラインインターフェイス (AWS CLI) を使用して put-object-acl コマンドを実行します。バケット所有者にオブジェクトのコントロールを付与する ACL を追加するには、-acl オプションを bucket-owner-full-control 値とともに含めます。次に、-no-sign-request オプションを含めて、リクエストに匿名の認証情報を使用します。必要なオプションを含む完全な put-object-acl コマンドは、次のようになります。

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject  --acl bucket-owner-full-control   --no-sign-request

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

2.    所有権の変更を適用するには、オブジェクトをそれ自体にコピーする必要があります。これを行うには、次のような cp コマンドを実行します。

aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject  s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

注: サンプルコマンドの --storage-class 値を、お客様のユースケースに適用できるストレージクラスに変更してください。さらに、オブジェクトに必要な他の cp コマンドオプションを含めるようにしてください。

3.    所有権の変更を確認するには、次のように get-object-acl コマンドを実行します。

aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

コマンドは、次のようなオブジェクトの所有者を表示する出力を返します。

{
    "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "jane",
                "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        }]}

4.    バケットでバージョニングが有効になっている場合は、ステップ 2 で cp コマンドから生成されたオブジェクトの以前のバージョンも削除する必要があります。以前のオブジェクトバージョンには、パブリック (匿名) 所有権があります。このオブジェクトバージョンを削除するには、まずバケットで list-object-versions コマンドを実行します。結果をフィルタリングしてパブリック所有権を持つオブジェクトを表示するには、コマンドの --prefix オプションを含めます。

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

コマンド出力から、パブリック所有権を持つオブジェクトバージョンのバージョン ID をコピーします。その後、削除するバージョン ID について delete-object コマンドを実行します。

aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

警告: バージョン ID がパブリック所有権を持つオブジェクトバージョンのバージョン ID であることを確認してください。オブジェクトバージョンを削除した場合は取得できません。


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


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