
関連するソリューション

マネージドサービス(運用・保守)
サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト 松岡 政之
こんにちは。
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グループからのお知らせなどをメルマガでお届けしています。