KNOWLEDGE - COLUMN ナレッジ - コラム

【エバンジェリスト・ボイス】AWSのすゝめ番外編 ~S3のセキュリティ設定は大丈夫ですか!?~

関連するソリューション

ID-Cross/クラウドサービス

サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト 松岡 政之     matsuoka2_274x380

こんにちは。 CSS 部エバンジェリストの松岡です。
私にとって今回は今年度初めてのコラムですが、なんと平成最後のコラムでもあります。
今年度もそして令和になっても引き続きお付き合いのほどよろしくお願いいたします。

新元号となることでゴールデンウィークが怒涛の 10 連休。異例の長期連休ということでそれに乗じたサイバー攻撃の発生も予測されています。
連休に入る前に今一度セキュリティについて振り返ってみてはいかがでしょうか。

 

さて、本題に入ります。
最近、 AWS S3 上に保存された Facebook データが公開状態だったという事件がありましたがご存知でしょうか。これは Facebook 社が公開状態で置いていたわけではなく、サードパーティアプリが Facebook から取得したもののようです。そこで公開状態になっていた個人データは 5 億件以上と報道されています。

この件は公開されていたデータが個人情報かつ膨大であったため大きく報道されましたが、 S3 の設定ミスで機密情報が公開されていたという問題はしばしば発生しています。顧客情報や取引先の情報を誤って公開してしまえばサイバー攻撃を受けなくても立派な情報漏洩となり、後悔先に立たずです。

もちろん AWS は何の保証もしてくれません。 AWS 責任共有モデルにおいてデータやアクセス管理については我々利用者の責任であることが明記されています。

このようなことがないように S3 の設定には特に注意する必要があります。

一番簡単なのは必ずプライベートで設置して公開しないことですが、要件によっては公開先を絞って公開しなければならない場合もあります。公開先を指定する場合は公開するバケットのバケットポリシーに公開先の IP アドレスやアカウントなどの情報を記述する必要があります。

AWS のポリシーは JSON 形式での記述となり慣れるまでは正しい設定をするのになかなか苦労するのではないでしょうか。(そもそも JSON 自体があまり人間向きではない気がしますが

このように複雑な設定が増えていくと、設定ミスでうっかり公開してしまうというといったヒューマンエラーが発生することは十分あり得ることだと思います。

そこで、私がオススメするのは以前のコラム( 【エバンジェリスト・ボイス】クラウドのすゝめ ~ AWS 自動化 (CloudFormation) 編~ )で紹介した CloudFormation です。


手作業で間違ってしまう可能性がある部分のテンプレートを作って自動化してしまえばミスはないという発想です。

例えば以下のようなテンプレートを使用すれば、バケット名を指定するだけでバケットは必ず非公開状態で作成されます。

Properties AccessControl が公開状態の指定に当たります。
(以降の例では説明しやすくするために簡略化していますので、そのまま利用するには不十分な点が多いことをご承知おきください)
------------------------------------------

AWSTemplateFormatVersion: 2010-09-09

 

Parameters:

  BucketName:

    Description: Bucket Name

    Type: String

 

Resources:

  Bucket1:

    Type: AWS::S3::Bucket

    Properties:

      AccessControl: Private

      BucketName: !Ref BucketName

------------------------------------------

また、特定の相手への公開が必要な場合でも AWS::S3::BucketPolicy タイプを使用することでバケットに直接ポリシーを割り当てることもできます。

例えば以下のテンプレートでは、 AllowIpAddr で指定した IP アドレス以外からのオブジェクトの取得を禁止したバケットが作成されます。(取得以外を禁止していないのでそれだけでは不十分ですが)

------------------------------------------

AWSTemplateFormatVersion: 2010-09-09

 

Parameters:

  BucketName:

    Description: Bucket Name

    Type: String

  AllowIpAddr:

    Description: IPv4 CIDR Block

    Type: String

 

Resources:

  Bucket1:

    Type: AWS::S3::Bucket

    Properties:

      AccessControl: PublicRead

      BucketName: !Ref BucketName

  Bucket1Policy1:

    Type: AWS::S3::BucketPolicy

    Properties:

      Bucket: !Ref CreateBucket

      PolicyDocument:

        -

          Action:

            - "s3:GetObject"

          Effect: "Deny"

          Resource: "*"

          Principal: "*"

          Condition:

            NotIpAddress:

              aws:SourceIp:

                - !Ref AllowIpAddr

------------------------------------------

また、応用編として「 !If 」や「 !Ref AWS::NoValue 」などを用いて複数の入力欄に対して必要な数だけ IP アドレスを設定するなどもできるかと思います。

しかし、 S3 バケットを使う人が必ずしも CloudFormation を利用できる人とは限りません。
むしろ、管理者以外の一般ユーザに CloudFormation の利用権限を与えるのはあまり好ましくないと思います。

そこで一般ユーザに上記のようなテンプレートを使用させるためには、以前のコラム( 【エバンジェリスト・ボイス】 AWS のすゝめ ~ Service Catalog 編~ )で紹介した Service Catalog というサービスが適任です。

このようにいくつかのサービスを組み合わせて人手で行う作業を最低限に抑えてることで、ヒューマンエラーが発生する確率を最小限に抑えることができます。ヒューマンエラーは気を付けていてもゼロにすることはできないと私は考えていますので、起きる要因を減らしていくことが大事だと思います。

今回はちょうどニュースになっていたため S3 バケットの公開状態について取り上げましたが、 VPC の払い出し等環境へのインパクトが大きいものに関しても同様にテンプレートを作成して自動化することをお勧めします。

それではよいクラウドライフを!
そしてよいゴールデンウィークを!


当サイトの内容、テキスト、画像等の転載・転記・使用する場合は問い合わせよりご連絡下さい。

エバンジェリストによるコラムやセミナー情報、
IDグループからのお知らせなどをメルマガでお届けしています。

メルマガ登録ボタン

松岡 政之

株式会社インフォメーション・ディベロプメント デジタルソリューション営業部 エバンジェリスト

この執筆者の記事一覧

関連するソリューション

ID-Cross/クラウドサービス

関連するナレッジ・コラム

ITエンジニアの現地作業 ミスを減らす!作業本番のポイントとは

NTTのIP網移行と、通信の未来とは

ITエンジニアの現地作業 ミスを減らす!事前準備のポイントとは