バージョニングが有効なバケットで削除された Amazon S3 オブジェクトを取得する方法を教えてください。
最終更新日: 2020 年 12 月 8 日
バージョニングが有効になっている Amazon Simple Storage Service (Amazon S3) バケットから削除されたオブジェクトを取得したいと考えています。どうすればそれができますか?
簡単な説明
バージョニング対応のバケットからオブジェクトを削除すると、Amazon S3 はそのオブジェクトの削除マーカーを作成します。削除マーカーがオブジェクトの最新バージョンになり、実際のオブジェクトが以前のバージョンになります。削除マーカーを使用すると、Amazon S3 はオブジェクトが削除されたかのようにオブジェクトのリクエストに応答します。たとえば、オブジェクトの GET リクエストを送信すると、Amazon S3 はエラーを返します。
バージョニング対応のバケットから削除されたオブジェクトは、次のいずれかの方法で取得できます。
- 以前のバージョンのオブジェクトをダウンロードする: 以前のバージョンのオブジェクト (実際のオブジェクト) をダウンロードするには、s3:GetObjectVersion に対するアクセス許可が必要です。
- 削除マーカーを削除する: 削除マーカーを削除すると、実際のオブジェクトがオブジェクトの最新バージョンになります。削除マーカーを削除するには、s3:DeleteObjectVersion へのアクセス許可が必要です。さらに、バケットを所有または作成した AWS アカウントを使用して削除マーカーを削除する必要があります。
注意: バケットに [MFA Delete-enabled] がある場合、指定した Multi-Factor Authentication (MFA) を使用して削除マーカーを削除する必要があります。
解決方法
Amazon S3 コンソールを使用してオブジェクトの以前のバージョンをダウンロードする
1. Amazon S3 コンソールを開きます。
2. バケット一覧から、削除されたオブジェクトのバケットを開きます。
3. 削除されたオブジェクトのフォルダに移動します。
4. [バージョンのリスト表示] をオンにします。
5. 検索バーに、削除したオブジェクトの名前を入力します。
6. オブジェクトの以前のバージョン (削除マーカーではなく実際のオブジェクト) を選択します。[アクション] を選択してから、[ダウンロード] をクリックします。
AWS コマンドラインインターフェイス (AWS CLI) を使用して、オブジェクトの以前のバージョンをダウンロードする
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
1. バケットで list-object-versions コマンドを実行します。
ヒント: 次のコマンドの例には、--prefix オプションが含まれており、指定したキー名のプレフィックスに結果をフィルタリングします。これにより、バケットに大量のオブジェクトバージョンが含まれている場合、結果の数を減らして時間を節約できます。
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt
2. コマンド出力から、オブジェクトの以前のバージョン ID (削除マーカーではなく実際のオブジェクト) をコピーします。
3. 前のステップでコピーしたバージョン ID に対して get-object コマンドを実行します。
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj
Amazon S3 コンソールを使用して削除マーカーを削除する
1. 削除されたオブジェクトのバケットを所有または作成した AWS アカウントから Amazon S3 コンソールを開きます。
2. バケット一覧から、削除されたオブジェクトのバケットを開きます。
3. 削除されたオブジェクトのフォルダに移動します。
4. [バージョンのリスト表示] をオンにします。
5. 検索バーに、削除したオブジェクトの名前を入力します。
6. オブジェクトの削除マーカーを選択します。
警告: 選択内容を慎重に確認し、削除マーカーであることを確認します。オブジェクトバージョンを削除した場合は取得できません。
7. [削除] を選択します。
8. [オブジェクトの削除] ページで、正しい削除マーカーが一覧表示されていることを確認します。次に、「permanently delete」と入力して削除を確定します。
9. [オブジェクトの削除 ] を選択します。
重要: Amazon S3 コンソールを使ってフォルダの削除を取り消すことはできません。これを行うには、AWS CLI または AWS SDK を使用する必要があります。
AWS CLI を使用して削除マーカーを削除する
1. 次の --query パラメータを使用して list-object-versions コマンドを実行します。
ヒント: 次のコマンドの例には、--prefix オプションが含まれており、指定したキー名のプレフィックスに結果をフィルタリングします。これにより、バケットに多数の削除マーカーが含まれている場合、結果の数を減らし、時間を節約できます。
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt --query 'DeleteMarkers[?IsLatest==`true`]'
2. このコマンドは、バケット内で削除されたすべてのオブジェクトを返します。コマンド出力から、取得するオブジェクトの削除マーカーのバージョン ID をコピーします。
警告: バージョン ID が削除マーカーのバージョン ID であることを確認してください。オブジェクトバージョンを削除した場合は取得できません。
3. 前のステップでコピーしたバージョン ID に対して delete-object コマンドを実行します。
aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'
4. 削除マーカーを削除すると、バケット内のオブジェクトを一覧表示するときに実際のオブジェクトが返されます。これを確認するには、ls コマンドを実行します。
aws s3 ls s3://DOC-EXAMPLE-BUCKET