0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3バケット配下をまとめてローカルにダウンロードする

Last updated at Posted at 2025-05-06

動機

AWSのS3にファイルを置いて何らかのサービス・アプリを使用していたけれど、当分使用しない、でも次使うときのためにそのまま残しておきたいと思ったのですが、AWSマネジメントコンソールの操作では、複数のファイルを一気に落とせないみたいなんですね。なのでここではS3バケットの配下をそのままローカルにダウンロードする方法についてまとめます。

image.png

はじめに

本記事では、AWS CLIのコマンドをたたいてAmazon S3からバケット配下をローカルにダウンロードする方法についてまとめます。

手順

  1. IAMユーザーの作成
  2. ローカルにAWSCLIを準備
  3. AWSCLIの設定
  4. ダウンロードの実行

1.IAMユーザーの作成

  • ユーザーの作成
  • ユーザーに与えるポリシー(権限)の作成
    • STSの利用権限(アクセストークン発行のため)
    • S3リソースの操作権限
  • ポリシーをユーザーにアタッチ

ユーザーの作成

AWSマネジメントコンソールからIAMを検索し、左のメニューから「アクセス管理」>「ユーザー」を選択します。続いてユーザー作成ボタンを選択します。
image.png

好きなユーザー名を設定します。今回は「backetDownloader」としました。次の許可を設定では特に何も触らずに「次へ」を選択し、確認画面で「ユーザーの作成」をクリックします。
image.png

これでユーザー「backetDownloader」が作成できました!
しかしこのままではこのユーザーは何も権限がなく、AWS上のあらゆるリソースやエンティティを操作、アクセスすることができません。
image.png

ユーザーに与えるポリシーの作成

そこで、ユーザーに与えるポリシー権限)を作成します。
IAMの左のメニューから「アクセス管理」>「ポリシー」を選択し、右上のポリシーの作成を選択します。
image.png

STSの利用権限

AWSCLIからIAMユーザーに設定した権限を利用したコマンド実行を行うには、アクセスキーが必要になります。
ポリシーの作成画面から以下の情報を入力します。

サービス:STS
アクション:AssumeRole
リソース:特定(ARNは先ほど作成したIAMユーザーのARNを設定)
※リソースについて「すべて」を選択してもよいですが、セキュリティ上推奨されません。

image.png

IAMユーザーのARNは、IAM > ユーザー から対象のユーザーをクリックすることで確認できます。
image.png

ポリシーの名称を設定して作成完了です。今回は「UseSts」としました。
image.png

S3リソースの操作権限

今回はS3バケット配下のオブジェクトの一括保存を行いたいので、必要な権限は以下になります。

アクセス許可  概要
s3:GetObject 特定のオブジェクト(ファイル)を S3 バケットから取得(ダウンロード)するためのアクセス許可です。このアクションを許可することで、ユーザーやサービスは指定されたオブジェクトを読み取ることができます。
s3:ListBucket S3 バケット内のオブジェクト一覧を取得するためのアクセス許可です。このアクションを許可することで、ユーザーやサービスはバケット内のオブジェクトのリストを取得できます。

さて、再度ポリシーの作成画面を開き、今度は以下のように設定します。
サービス:S3
アクション:GetObject, ListBucket
リソース:特定(ダウンロードするS3バケットのARNを設定)
※複数のバケットに対してアクセス権限を付与したい場合は「すべて」を選択します。

image.png

ポリシー名称を設定して作成完了です。今回は「DownloadBucket1」としました。
image.png

ポリシーをユーザーにアタッチ

最後に、作成したポリシーをユーザーに付与(アタッチ)します。
IAMの左のメニューからユーザーを選択し、先ほど作成した「backetdownloader」を選択します。
少し下にドラッグして「許可ポリシー」の欄から「許可を追加」を選択します。
image.png

許可を追加の画面から、「ポリシーを直接アタッチする」を選択します。
アタッチするポリシーの検索ができるため、先ほど作成した UseSts と Downloadbacket1 をアタッチします。リスト左のチェックボックスをクリックすることで追加できます。
image.png

問題ないことを確認したらアタッチを完了します。
image.png

以下のように正常にポリシーがアタッチされました。
image.png

2. ローカルにAWSCLIを準備

AWS CLI がインストールされていない場合は、公式ドキュメント を参照してインストールしてください。

私はWSL(つまりLinux)で実施しました。
まず必要に応じてapt-getのアップデート。

WSL Console
> sudo apt-get update

続いて、AWS CLIをインストールします。

WSL Console
> sudo apt install awscli

以下のコマンドを入力し、インストールされていることを確認します。

WSL Console
> aws --version
aws-cli/1.22.34 Python/3.10.6 Linux/5.15.167.4-microsoft-standard-WSL2 botocore/1.23.34

3. AWSCLIの設定

AWS CLIにアクセスキーを設定し、作成したユーザーがAWSCLIを通してS3を操作できるようにします。

アクセスキーの発行

IAMの左のメニューからユーザーを選択し、作成したユーザー(backetdownloader)を選択します。さらに「セキュリティ認証情報」>「アクセスキー」>「アクセスキーを作成」 を選択します。
image.png

今回はCLIを使用するので「コマンドラインインターフェイス (CLI)」を選択し、上記のレコメンデーションを理解し、アクセスキーを作成します にチェックを入れてアクセスキーを発行します。
image.png

無事アクセスキーが発行できました。アクセスキーとシークレットアクセスキーはAWS CLIに入力するので、完了ボタンを押さずに次の手順に移ってください。
image.png

AWSCLIの設定

以下のコマンドを押下し、アクセスキーなどの情報を順番に入力します。

WSL Console
> aws configure
AWS Access Key ID [None]:アクセスキー
AWS Secret Access Key [None]:シークレットアクセスキー
Default region name [None]:us-east-1(s3のリージョン)
Default output format [None]:json

4. ダウンロードの実行

いよいよダウンロードを実行します。以下のコマンドを入力してください。
backetA という名称のバケットの場合、以下のように指定します。

WSL Console
> aws s3 sync s3://backetA local_backetA(ダウンロード先のパス)

この結果、local_backetA というディレクトリに backetA 配下のオブジェクトがダウンロードされます。

トラブルシューティング

WSL Console
fatal error: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: 
User: arn:aws:iam::860719471829:user/backetdownloader is not authorized to perform:
s3:ListBucket on resource: "arn:aws:s3:::pubbucket15" because no identity-based policy
allows the s3:ListBucket action

上記エラーが発生した場合、S3側で「ListBucket」が許可されていない可能性があります。
ダウンロードしたいS3バケットを開き、「アクセス許可」の中の「ブロックパブリックアクセス (バケット設定)」および「バケットポリシー」を確認してください。
ブロックパブリックアクセス (バケット設定)」について、今回作成したポリシーでアクセス可能なように設定してください。(以下ではオフにしている)

image.png

また、「バケットポリシー」について、s3:ListBucket, s3:GetObjectの2つのActionを許可してください。

ダウンロードしたバケットのバケットポリシーの例
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": "*",
			"Action": [
				"s3:ListBucket",
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::bucketA(バケット名)",
				"arn:aws:s3:::bucketA(バケット名)/*"
			]
		}
	]
}

まとめ

色々と書いていますが、結局やりたいことは簡潔で、それを成し遂げるために何に対してどのような権限を与えなければいけないかというところですね。

目的

AWSCLIのコマンドを使用してS3バケット配下をローカルにダウンロードしたい

必要な準備

  • IAMユーザー
    • AWSCLIからアクセスできるようにするためのポリシー
    • S3バケットに対してアクセス・ダウンロードできるようにするポリシー

  • S3バケット
    • ユーザーがアクセス可能なようにするためのバケットポリシー

###実行内 容容
作成したユーザーとしてコマンドを発行し、S3バケット配下をダウンロード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?