見出し画像

【AWS】S3のバージョニングと暗号化設定をCLIで試してみた|1日1ハンズオン Day 35

こんにちは、ぽめら です。
本記事は1日1ハンズオン企画、第35回です!
引き続き Amazon S3 と AWS CLI に触れていきます。
今回は、S3 バケットのバージョニングと暗号化設定を CLI から確認・有効化 にチャレンジします🧊



1.はじめに

前回は、S3バケットのセキュリティ設定(パブリックアクセス制御など)をCLIから確認・変更しました。

今回はその続きとして、データを安全に「保つ」ための機能としてバージョニングと暗号化に焦点を当ててみます!

S3は単なるクラウドストレージではなく、データの誤削除・改ざん・漏洩から守るための仕組みがいくつもあります。その中でも代表的な機能が「バージョニング(Versioning)」と「サーバーサイド暗号化(SSE)」です。

というわけで、レッツハンズオン!


2.AWS CLI から S3 バージョニングと暗号化を試してみた

今回の主な流れは下記の通りです。

  • S3 バケットの作成

  • バージョニングの有効化

  • バージョン履歴の確認

  • サーバーサイド暗号化の設定

  • 設定の確認

  • クリーンアップ


2-1.S3 バケットの作成

まずは検証用のバケットを作成します。
コマンドは aws s3api create-bucket。雛形は下記の通りです。

aws s3api create-bucket \
  --bucket <バケット名> \
  --region <リージョン> \
  --create-bucket-configuration LocationConstraint=<リージョン>

今回は pomera-handson-day35 を東京リージョン(ap-northeast-1)に作成します。

aws s3api create-bucket \
  --bucket pomera-handson-day35 \
  --region ap-northeast-1 \
  --create-bucket-configuration LocationConstraint=ap-northeast-1

確認:

aws s3 ls
pomera-handson-day35 が一覧に表示されたのでOK✌️

2-2.バージョニングを有効化する

S3のバージョニングを有効化すると、同じ名前のファイルを上書きしても過去バージョンが保持されるようになります。
CLIでは aws s3api put-bucket-versioning コマンドを使用し、versioning-configuration Status を設定します。雛形は下記の通り。

aws s3api put-bucket-versioning \
  --bucket <バケット名> \
  --versioning-configuration Status=Enabled

実行例👇

aws s3api put-bucket-versioning \
  --bucket pomera-handson-day35 \
  --versioning-configuration Status=Enabled

確認:

aws s3api get-bucket-versioning --bucket pomera-handson-day35

出力例(イメージ):

{
  "Status": "Enabled"
}

👉 Status が Enabled なら、バージョニングが有効になっています。


2-3.バージョン履歴を確認してみる

では実際に、同じファイル名で2回アップロードしてみましょう。

echo "Version 1" > version.txt
aws s3 cp version.txt s3://pomera-handson-day35/

echo "Version 2" > version.txt
aws s3 cp version.txt s3://pomera-handson-day35/

バージョンを確認するコマンド aws s3api list-object-versions
バケット名を指定して下記のように実行します。

aws s3api list-object-versions --bucket pomera-handson-day35

出力例(イメージ):
※ 実際にはもう少し情報量が多いです!

{
  "Versions": [
    {
      "Key": "version.txt",
      "VersionId": "abc123",
      "IsLatest": false
    },
    {
      "Key": "version.txt",
      "VersionId": "xyz789",
      "IsLatest": true
    }
  ]
}

👉 IsLatest が true のものが最新。古いバージョンも確認できます。

※ ちなみにバージョニングを停止しても、既存の履歴は削除されない様子。


2-4.サーバーサイド暗号化を有効化する

次に、サーバーサイド暗号化(SSE) を設定します。
これはアップロードファイルを自動的に暗号化して保存する機能です。

コマンドは aws s3api put-bucket-encryption。雛形は下記の通りです。

aws s3api put-bucket-encryption \
  --bucket <バケット名> \
  --server-side-encryption-configuration \
  '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'

実行例👇

aws s3api put-bucket-encryption \
  --bucket pomera-handson-day35 \
  --server-side-encryption-configuration \
  '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'

👉 これで、アップロードされるオブジェクトはすべて自動的にAES256で暗号化されます。


2-5.暗号化設定の確認

設定が反映されているか get コマンドで確認します。

aws s3api get-bucket-encryption --bucket pomera-handson-day35

出力例(イメージ):

{
  "ServerSideEncryptionConfiguration": {
    "Rules": [
      {
        "ApplyServerSideEncryptionByDefault": {
          "SSEAlgorithm": "AES256"
        }
      }
    ]
  }
}

👉 SSEAlgorithm に AES256 が表示されていればOK。
これでデータ保存時の暗号化が自動的に適用されるようになりました💡


2-6.クリーンアップ

最後に、作成したバケットを削除しておしまいにします。
ただし、今回は バージョニングを有効化 しているため、通常の --recursive 削除では完全に空になりません。
過去バージョンや削除マーカーも含めて削除する必要があります🧹

① オブジェクトを削除(最新分)
まずは通常の削除コマンドで、最新オブジェクトを削除します。

aws s3 rm s3://pomera-handson-day35 --recursive

② バージョン付きオブジェクトを削除
次に、バージョニングで保持されている過去バージョンを削除します。
list-object-versions で取得した情報を delete-objects に渡しています。

aws s3api delete-objects \
  --bucket pomera-handson-day35 \
  --delete "$(aws s3api list-object-versions \
    --bucket pomera-handson-day35 \
    --output json \
    --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"

③ ステップ3:削除マーカーを削除
削除マーカー(削除操作を記録するメタデータ)も削除しておきます。

aws s3api delete-objects \
  --bucket pomera-handson-day35 \
  --delete "$(aws s3api list-object-versions \
    --bucket pomera-handson-day35 \
    --output json \
    --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')"

④ バケットを削除
バケットが完全に空になったら、最後にバケット自体を削除します。

aws s3api delete-bucket --bucket pomera-handson-day35 --region ap-northeast-1

< 注意ポイント>
BucketNotEmpty エラーが出た場合は、上記の「バージョン」「削除マーカー」のどちらかが残っている可能性があります。また、バケット削除は取り消し不可です。同じ名前を再利用できる保証もありません。

実務環境では誤削除防止のため、削除操作前に list-object-versions で中身を確認するのが良いでしょう。

ここまでで本日想定していた内容は終了です!
お疲れ様でした✨


3.まとめ

今回は、S3バケットに対してCLIから「バージョニング」と「暗号化」を設定してみました。

・バージョニング有効化
👉 put-bucket-versioning

・バージョン履歴確認
👉 list-object-versions

・暗号化設定
👉 put-bucket-encryption

・暗号化確認
👉 get-bucket-encryption

S3の「作る → 守る → 保つ」の3ステップにチャレンジしてみました。
データを扱う上で、安全性と復元性を意識した設計は非常に大切なので、CLIを通して設定内容を確認できるようになるとトラブル対応や監査対応の理解にも役立つはず💪

というわけで今日はここまで!
ではまた明日👋


4.参考リンク

・バージョニングの有効化と無効化について

・S3サーバーサイド暗号化(SSE)について

・AWS CLI コマンドリファレンス(s3api)


いいなと思ったら応援しよう!