Amazon S3バケットのセキュリティ確保をする件

Posted on 2017-08-06(日) in _computing

こんにちは!

2017.7.19にこんなメールが来たので、納得するまで調べて、対応した内容についてまとめました
「焦りました、ググりました、対応しました」(^ ^)

2017.7.19にメール来た

Amazon Web Services, Inc. 
Securing Amazon S3 Buckets [AWS Account: xxxxxxxxxxxx]

Hello,

Were writing to remind you that one or more of your Amazon S3 bucket access control lists (ACLs) are currently configured to allow access from any user on the Internet. The list of buckets with this configuration is below.

By default, S3 bucket ACLs allow only the account owner to read contents from the bucket; however, these ACLs can be configured to permit world access. While there are reasons to configure buckets with world read access, including public websites or publicly downloadable content, recently, there have been public disclosures by third parties of S3 bucket contents that were inadvertently configured to allow world read access but were not intended to be publicly available.

We encourage you to promptly review your S3 buckets and their contents to ensure that you are not inadvertently making objects available to users that you dont intend. Bucket ACLs can be reviewed in the AWS Management Console (http://console.aws.amazon.com ), or using the AWS CLI tools. ACLs permitting access to either “All Users” or “Any Authenticated AWS User” (which includes any AWS account) are effectively granting world access to the related content.

For more information on configuring your bucket ACLs, please visit: https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html

For additional assistance reviewing your bucket ACLs, please visit http://aws.amazon.com/support to create a case with AWS Developer Support.

Your list of buckets configured to allow access from anyone on the Internet are:

AWS Management Console でどこかに出てる?

Personal Health Dashboard に S3 operational notification イベントが出ていた

We’re writing to remind you that one or more of your Amazon S3 bucket access control lists (ACLs) or bucket policies are currently configured to allow read or write access from any user on the Internet. 
The list of buckets with this configuration is below.
:
メールと同じ内容でした

これは、Google翻訳にて翻訳(翻訳文は貼りません)

・対応が終わった時点で明確に理解できました

・S3について「ACLとバケットポリシー」が考えられて、「設定内容」が問題ない場合、対応することは特にないハズ!

・よくわからないで設定されている場合(前担当が設定した、設計資料ない等)はチェックしないといけない!

メール本文の1部で「ググる」

We’re writing to remind you that one or more of your Amazon S3 bucket access control lists (ACLs) are currently configured to allow access from any user on the Internet. 
The list of buckets with this configuration is below.

*日本語情報、あったー(ちょっと違う)

AWSからS3のセキュリティについて警告メールが来た時の対処方法
・うーん、理由が知りたいわけです(ちなみに、設定結果の確認をするには、サポート契約が必要になります)

*メールのきっかけか・・・

AWS warns users about open S3 buckets

Dow Jones index – of customers, not prices – leaks from AWS repo

*Redditで情報をGet(AWSの場合はRedditになるんだね)

Interesting email from AWS re: public S3 buckets

対応を始める

*そもそも、何がどうなってるの?

Rdditで見たコードを参考に設定内容をテキスト化して確認した(policy、acl、logging設定)

#!/bin/bash

for BUCKET in $(aws s3api list-buckets | jq -r '.Buckets[].Name'); do
        echo "BUCKET: ${BUCKET}"

        echo "ACL:"
                aws s3api get-bucket-acl --bucket ${BUCKET} | jq .
        echo
        echo "#########################################################"
        echo
done
echo "#########################################################"
for BUCKET in $(aws s3api list-buckets | jq -r '.Buckets[].Name'); do
        echo "BUCKET: ${BUCKET}"
        echo "POLICY:"
                aws s3api get-bucket-policy --bucket ${BUCKET} | jq -r .Policy | jq .
        echo
        echo "#########################################################"
        echo
done
echo "#########################################################"
for BUCKET in $(aws s3api list-buckets | jq -r '.Buckets[].Name'); do
        echo "BUCKET: ${BUCKET}"
        echo "LOGGING:"
                aws s3api get-bucket-logging --bucket ${BUCKET} 
        echo
        echo "#########################################################"
        echo
done

ちなみに、動作させるには、AWS CLIとjq・権限を持ったAccessKeyが必要です

実行例:
check-s3.sh > check-s3.log 2>&1

*問題となるところを解決

・バケットポリシーは、設定している内容が問題ないか(何も設定していなければ、S3バケットの作成者以外はアクセスできないため)

・ACLは以下の行が存在すれば調査が必要になる
 "URI": "http://acs.amazonaws.com/groups/global/AllUsers"(すべてのユーザー)
 "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"(AWSアカウントを持ち、ログインしているユーザー)

・ログ設定の確認もする

・設定とは関係ないけど、置いていけないデータがないか確認する(個人情報等)

注)バケットポリシーとACLはサービス設定をしている時に、付与されていることがあるので設定などは触らないタイミングで確認する

*ちなみに、どう対応したか

・バケットポリシーは、Cloudfront経由アクセスのS3バケットは、OAIアクセス以外の設定を削除した(直接S3にアクセスする必要なし)

・ACLのアクセス権は、作成者分を残して、削除した

・ログ設定は、設定内容を確認して、過不足なかったので問題なし

・置いていけないデータを確認して、問題なし(Websiteなので問題なし)

・設定変更後はバッチ処理にエラーがないことを確認する(後日エラーが発生しないことを確認した)

まとめ

今回のメールでAWS S3 の理解が深まりました!
便利(安全に)に使うには、知識もアップデートする

Static Website HostingとCloudFrontはSSL証明書まで使えるので安上がりになりました
さらに、アクセスログを扱うのにAthenaいいですね、EMR起動しないでクエリ実行できます

一通り対応が終わった頃に、AWSのホームページに解説が載りましたね

Amazon S3バケットのアクセス設定に関する注意喚起メールにつきまして | Amazon Web Services