バージョニングが有効なバケットで削除された Amazon S3 オブジェクトを取得する方法を教えてください。

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

バージョニングが有効になっている Amazon Simple Storage Service (Amazon S3) バケットから削除されたオブジェクトを取得したいと考えています。どうすればよいですか?

簡単な説明

バージョニング対応のバケットからオブジェクトを削除すると、Amazon S3 はそのオブジェクトの削除マーカーを作成します。削除マーカーがオブジェクトの最新バージョンになり、実際のオブジェクトが以前のバージョンになります。削除マーカーを使用すると、Amazon S3 はオブジェクトが削除されたかのようにオブジェクトのリクエストに応答します。たとえば、オブジェクトの GET リクエストを送信すると、Amazon S3 はエラーを返します。

バージョニング対応のバケットから削除されたオブジェクトは、次のいずれかの方法で取得できます。

  • 以前のバージョンのオブジェクトをダウンロードする: 以前のバージョンのオブジェクト (実際のオブジェクト) をダウンロードするには、s3:GetObjectVersion に対するアクセス許可が必要です。
  • 削除マーカーを削除する: 削除マーカーを削除すると、実際のオブジェクトがオブジェクトの最新バージョンになります。削除マーカーを削除するには、s3:DeleteObjectVersion へのアクセス許可が必要です。さらに、バケットを所有または作成した AWS アカウントを使用して削除マーカーを削除する必要があります。
    注意: バケットで MFA 削除が有効になっている場合は、指定した Multi-Factor Authentication (MFA) を使用して削除マーカーを削除する必要があります。

解決方法

Amazon S3 コンソールを使用してオブジェクトの以前のバージョンをダウンロードする

1.    Amazon S3 コンソールを開きます。

2.    バケット一覧から、削除されたオブジェクトのバケットを開きます。

3.    削除されたオブジェクトのフォルダに移動します。

4.    [バージョン] で、[表示] を選択します。

5.    検索バーに、削除したオブジェクトの名前を入力します。

6.    オブジェクトの以前のバージョン (削除マーカーではなく実際のオブジェクト) を選択し、[ダウンロード] を選択します。

AWS コマンドラインインターフェイス (AWS CLI) を使用して、オブジェクトの以前のバージョンをダウンロードする

1.    バケットで list-object-versions コマンドを実行します。

ヒント: 次のコマンドの例には、--prefix オプションが含まれており、指定したキー名のプレフィックスに結果をフィルタリングします。これにより、バケットに大量のオブジェクトバージョンが含まれている場合、結果の数を減らして時間を節約できます。

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

2.    コマンド出力から、オブジェクトの以前のバージョン ID (削除マーカーではなく実際のオブジェクト) をコピーします。

3.    前のステップでコピーしたバージョン ID に対して get-object コマンドを実行します。

aws s3api get-object --bucket AWSDOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj

Amazon S3 コンソールを使用して削除マーカーを削除する

1.    削除されたオブジェクトのバケットを所有または作成した AWS アカウントから Amazon S3 コンソールを開きます。

2.    バケット一覧から、削除されたオブジェクトのバケットを開きます。

3.    削除されたオブジェクトのフォルダに移動します。

4.    [バージョン] で、[表示] を選択します。

5.    検索バーに、削除したオブジェクトの名前を入力します。

6.    オブジェクトの削除マーカーを選択します。

警告: 選択内容を慎重に確認し、削除マーカーであることを確認します。オブジェクトバージョンを削除した場合は取得できません。

7.    [アクション] を選択してから、[削除] を選択します。

8.    [オブジェクトを削除] ダイアログボックスで、[削除] を選択します。

AWS CLI を使用して削除マーカーを削除する

1.    次の --query パラメータを使用して list-object-versions コマンドを実行します。

ヒント: 次のコマンドの例には、--prefix オプションが含まれており、指定したキー名のプレフィックスに結果をフィルタリングします。これにより、バケットに多数の削除マーカーが含まれている場合、結果の数を減らし、時間を節約できます。

aws s3api list-object-versions --bucket AWSDOC-EXAMPLE-BUCKET --prefix example.txt --query 'DeleteMarkers[?IsLatest==`true`]'

2.    このコマンドは、バケット内で削除されたすべてのオブジェクトを返します。コマンド出力から、取得するオブジェクトの削除マーカーのバージョン ID をコピーします。

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

3.    前のステップでコピーしたバージョン ID に対して delete-object コマンドを実行します。

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

4.    削除マーカーを削除すると、バケット内のオブジェクトを一覧表示するときに実際のオブジェクトが返されます。これを確認するには、ls コマンドを実行します。

aws s3 ls s3://AWSDOC-EXAMPLE-BUCKET

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

改善できることはありますか?


さらにサポートが必要な場合