AWS Builder Labs (セルフペースラボ) の Introduction to Amazon Simple Storage Service (S3) をやってみた

AWS Builder Labs (セルフペースラボ) で提供されている Introduction to Amazon Simple Storage Service (S3) を実際にやってみました。
2023.04.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Builder Labs (セルフペースラボ) とは

AWS Builder Labs (セルフペースラボ) とは、AWS Skill Builder 内で提供されている AWS の学習コンテンツであり、以下の特徴があります。

  • ハンズオン形式で実践的な学習ができる
  • AWS のラボ環境が提供されるため、コストを気にせずに学習できる
  • オンデマンドで利用可能なため、時間や場所を問わずに学習できる

注意点として、AWS Builder Labs の利用には、個人またはチームのサブスクリプション契約が必要となります。

詳細は公式サイトをご参照ください。

Introduction to Amazon Simple Storage Service (S3) とは

Introduction to Amazon Simple Storage Service (S3) とは、AWS Builder Labs (セルフペースラボ) で提供されているコースの1つです。

コースの概要は公式サイトより引用いたします。

このラボでは、AWS マネジメントコンソールを使用して Amazon S3 の基本的な機能について説明します。

Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスです。あらゆる規模や業界のお客様が、ウェブサイト、モバイルアプリケーション、バックアップと復元、アーカイブ、エンタープライズアプリケーション、IoT デバイス、ビッグデータ分析など、広範にわたるユースケースのデータを容量に関係なく、保存および保護することができます。Amazon S3 には使いやすい管理機能が備わっているため、データを整理し、細かく調整されたアクセス制御を設定することで、特定のビジネスや組織、コンプライアンスの要件を満たすことができます。Amazon S3 は 99.999999999% (イレブンナイン) の耐久性を実現するよう設計されており、世界中の企業向けに数百万ものアプリケーションのデータを保存しています。

本コースの所要時間は約1時間です。
日本語版のコースも提供されています、今回は日本語版コースをやってみました。

コースの流れは以下です。

  1. バケットを作成する
  2. バケットにオブジェクトをアップロードする
  3. オブジェクトを公開する
  4. EC2 インスタンスからの接続をテストする
  5. バケットポリシーを作成する
  6. バージョニングを確認する

本コースは AWS Skill Builder 内のデジタルコース Getting Started with Amazon Simple Storage Service (Amazon S3) の続きであることが前提条件に記載されています。
私自身は上記のデジタルコースは受講せずに実施したのですが、ラボ内の説明が非常に丁寧なため、どなたでも特につまずくことなく進めることができると感じています。
とはいえデジタルコースを受講した後に実施したほうがより理解が進むかと思いますので、ぜひデジタルコースも受講されることをおすすめいたします。

やってみた

1. バケットを作成する

ここでは S3 バケットを作成していきます。
ACL 有効化、オブジェクト所有者がオブジェクトライターとなるように設定しましょう。

2. バケットにオブジェクトをアップロードする

先ほど作成した S3 バケットに、ラボにて用意された画像ファイル new-report.png をアップロードしていきます。

3. オブジェクトを公開する

先ほどアップロードした new-report.png のオブジェクト URL にアクセスしてみましょう。
オブジェクトがパブリック公開されていないため、AccessDenied エラーが発生することが確認できます。

オブジェクト ACL の設定を変更してパブリック公開してみましょう。

しかし、バケットのブロックパブリックアクセス設定が有効になっているため、ACL の設定変更に失敗しました。

よって今度はブロックパブリックアクセス設定を無効にしてみましょう。

改めて new-report.png のオブジェクト ACL を変更してみると、今回はエラーが発生することなく変更できたことを確認できました。

new-report.png のオブジェクト URL に改めてアクセスしてみると、今回はアクセス拒否されることなく正しく表示されました。

4. EC2 インスタンスからの接続をテストする

続いては EC2 インスタンスから S3 バケットへの接続をテストしていきます。
ラボにて EC2 インスタンス Bastion Host をすでに用意してくれているため、セッションマネージャーで接続します。

AWS CLI にて、S3 の cp コマンドを使用して、ローカルファイルを S3 バケットへのアップロードを試してみたところ、エラーが発生しました。

5. バケットポリシーを作成する

先ほど EC2 インスタンスから S3 バケットへのオブジェクトのアップロードがエラーとなった原因は、PutObject オペレーションを実行する権限がないためでした。
ここではバケットポリシーを使用して EC2 インスタンスに PutObject オペレーションの実行を許可します。

まずはラボにて用意されたテキストファイル sample-file.txt を S3 バケットにアップロードします。

sample-file.txt のオブジェクト URL にアクセスしたところ、AccessDenied エラーが発生することを確認できます。

EC2 インスタンスにアタッチされている IAM ロール EC2InstanceProfileRole に PutObject、GetObject オペレーションの実行を許可するよう、S3 バケットポリシーを作成していきます。
ここでは AWS Policy generator を使用して S3 バケットポリシーを作成していきます。

作成したポリシーを実際に S3 バケットに設定しましょう。

再度 EC2 インスタンスからオブジェクトのアップロード、ダウンロードを試してみます。
バケットポリシーにより PutObject、GetObject オペレーションを許可しているため、今回はエラーが発生することなく正常に完了したことを確認できました。

改めて sample-file.txt のオブジェクト URL にアクセスしたところ、引き続きエラーが発生します。

先ほどのバケットポリシーでは Principal にて IAM ロール EC2InstanceProfileRole にのみ PutObject、GetObject オペレーションを許可しました。
よってパブリックアクセスは引き続き拒否されます。

パブリックアクセス可能となるよう、バケットポリシーにて Principal "*" にも GetObject オペレーションを許可してみましょう。

再び sample-file.txt のオブジェクト URL にアクセスしてみると、エラーが発生することなく正常にアクセスできることを確認できました。

6. バージョニングを確認する

ここでは S3 のバージョニング機能を試していきます。
まずは対象 S3 バケットのバージョニングを有効化します。

またオブジェクトのバージョンの表示を有効化します。

対象 S3 バケット内には sample-file.txt がすでにアップロードされています。
ラボから新しい sample-file.txt が提供されています、こちらには新たにファイル内にテキストが追記されています。
この新しい sample-file.txt をアップロードします。

最新バージョン、旧バージョンの sample-file.txt のどちらにもアクセス可能であることを確認できます。

バージョンの表示の無効化のうえ、sample-file.txt を削除してみます。

そのうえでバージョンの表示を再び有効化してみます。
すると実際にはオブジェクトが削除されたのではなく、削除マーカーが付与されたことが確認できます。

削除マーカーが付与されたバージョンを削除してみます。

削除マーカーを削除したことにより、オブジェクトが前バージョンに復元したことを確認できます。

続いてはオブジェクトの最新バージョンを削除してみます。

ここでは特定のバージョンを指定して削除したため、削除マーカーが付与されることなく、そのバージョンのみが削除されたことを確認できます。

改めて sample-file.txt のオブジェクト URL にアクセスしてみると、以前のバージョンの内容になっていることを確認できます。

まとめ

実際に本コースをやってみて、初めて S3 を触るという方には勉強になるコンテンツではないかと思いました。
特にアクセス権限周りやバージョニングなどをハンズオン形式で理解を深めることができるのが良いですね!

ラボ側で詳細に手順を提示してくれるため、特につまずくことなく誰でもコースを完走することができるかと思います。
提示される手順と、実際のマネジメントコンソール画面にほとんど差異がないのが本当に良いです。

今後も AWS Builder Labs のコンテンツを試してはブログ化していきたいと考えています。

最後までお読みいただき、ありがとうございました!