見出し画像

【AWS】 Amazon S3 バケットのセキュリティ設定をCLIで確認してみた|1日1ハンズオン Day 34

こんにちは、ぽめら です。
本記事は1日1ハンズオン企画、第34回です!
引き続き Amazon S3 と AWS CLI に触れていきます。
今回は S3 バケットのセキュリティ設定をCLIで確認・変更 にチャレンジ🛡️



1.はじめに

前回は、S3バケットの作成〜削除までをCLIで一通り体験しました。

今回はその続きとして、S3バケットを安全に使うための基本設定をCLIから確認してみます。

S3はクラウドストレージとして非常に便利ですが、パブリックアクセス設定やACLの扱いを誤ると情報漏洩リスクが発生します。

AWSではそもそもが安全性を考慮されたつくりになっています。しかし、CLIで意識的にセキュリティ情報を確認することも重要なはず。なので実践してみることにしました。

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


2.AWS CLI から Amazon S3 バケットのセキュリティ設定を確認してみた

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

  • バケットの作成

  • オブジェクト所有権の確認

  • パブリックアクセスブロックの確認

  • 設定の変更


2-1.バケットを作成する

まずはセキュリティ検証用にバケットを新規作成します。
コマンドは aws s3api create-bucket です。
前回の復習も兼ねて、雛形は下記の通り。

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

今回は 'pomera-handson-day34' というバケットを東京リージョン(ap-northeast-1)に作成します。

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

作成後に一覧を確認します。

aws s3 ls
pomera-handson-day34 が表示されているので成功です✌️

2-2.オブジェクト所有権の確認

次に、バケットの「所有権(Object Ownership)」を確認します。
コマンドは 'aws s3api get-bucket-ownership-controls' です。

aws s3api get-bucket-ownership-controls --bucket pomera-handson-day34

出力例(イメージ):

{
  "OwnershipControls": {
    "Rules": [
      {
        "ObjectOwnership": "BucketOwnerEnforced"
      }
    ]
  }
}

👉 出力結果は明示的な設定をしていなければ 'BucketOwnerEnforced' となっている。これが S3 のデフォルト。ACL(アクセス制御リスト)は無効化されている状態です。


2-3.パブリックアクセスブロックの確認

続いて、外部(インターネット)からのアクセスを防ぐ設定を確認します。
コマンドは 'aws s3api get-public-access-block' です。

aws s3api get-public-access-block --bucket pomera-handson-day34

出力例(イメージ):

{
  "PublicAccessBlockConfiguration": {
    "BlockPublicAcls": true,
    "IgnorePublicAcls": true,
    "BlockPublicPolicy": true,
    "RestrictPublicBuckets": true
  }
}

👉 すべてが true なら、完全にパブリックアクセスがブロックされている状態です。誤ってファイルが公開設定になっていないかの確認に使えますね💡

※ 特殊なケース(静的ウェブサイト公開など)を除き、これらはすべて有効のままにしておくのが良いはず。


2-4.(学習用)パブリックアクセスブロックを変更してみる

学習目的で、一時的にパブリックアクセスブロックの設定を変更してみます(TRUE→FALSEの変更でブロック有効状態を無効化する=公開状態に)。
コマンドは aws s3api put-public-access-block

aws s3api put-public-access-block \
  --bucket pomera-handson-day34 \
  --public-access-block-configuration \
  "BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"

※ この設定を変更すると誰でもアクセスできる状態になります
※ 実務環境では無意味におこわないよう注意!!!

出力例(イメージ):

{
  "PublicAccessBlockConfiguration": {
    "BlockPublicAcls": false,
    "IgnorePublicAcls": false,
    "BlockPublicPolicy": false,
    "RestrictPublicBuckets": false
  }
}

設定を元に戻すときは、以下のように再設定します。

aws s3api put-public-access-block \
  --bucket pomera-handson-day34 \
  --public-access-block-configuration \
  "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"

2-5.クリーンアップ

最後に、バケットを削除します。

aws s3 rm s3://pomera-handson-day34 --recursive
aws s3api delete-bucket --bucket pomera-handson-day34 --region ap-northeast-1

3.まとめ

今回は S3バケットのセキュリティ設定をCLIで確認・変更してみました。

<操作コマンドまとめ>

・所有権確認
👉get-bucket-ownership-controls

・パブリックアクセス確認
👉get-public-access-block
※ 4項目がtrueなら安全

・設定変更
👉put-public-access-block

開発系をしていると地味な部分だと感じますが、障害だったり何かしらうまくいっていない時に設定確認って必須なんですよね。この部分だけ気になることはないと思いますが、いざという時のためにここら辺を触っています!
(というか確実に覚えられないので見返す用のメモ🫠)

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

ではまた明日👋


4.参考リンク

・オブジェクトの所有権のコントロール方法

・S3 のパブリックアクセスをブロック

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


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