##はじめに
AWSでEC2インスタンスを立ち上げようとした際に、次のエラーが出て最初は何が起こっているのか理解できませんでした。しかし、エラーの原因を調べていくととんでもないことをやらかしていました。
##エラーが示している状況
エラーを翻訳すると
『このアカウントは現在ブロックされており、有効なアカウントとして認識されません。 ご質問がある場合は、aws-verification @ amazon.comまでご連絡ください。』
とのこと。
この時点では心当たりがなかったのですが、メールボックスを確認するとAWSからたくさん通知が来てました。
英語だったので正しく訳せているか微妙ですが内容は次のとおりです。
あなたのAWSアカウントが危険に晒されています。この問題を解決するためにすぐに対処してください。
あなたのAWSアクセスキーとシークレットキーがオンラインで公開されています。それにより不正行為や
不正使用による過剰な請求につながる恐れがあります。不正利用から保護するために、一部のAWSの
リソースの作成機能を制限しています。公開した情報を削除して、新たに作成してください。
また、ルートユーザーやAMIユーザーのパスワードを変更してください。5日以内に対応しないとアカウントを閉鎖します。
この内容を見て何が原因かわかりました。数日前に、Railsでcarrierwaveを使ってAWSのS3に画像をアップロードする処理を行った際に、以下のようにアクセスキーをベタ書きしたファイルをGitHubにアップしていました。
大切に保管しなくちゃいけないアクセスキーをプログラムコードに直接記入し、そのプログラムをGitHub経由で全世界に公表して誰でも閲覧できる状態にしたことになります。
CarrierWave.configure do |config
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: '●●●●●●●●●●●●●●●●●●●●●',
aws_secret_access_key: '●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●',
region: 'ap-northeast-1'
}
config.fog_directory = 's3-rails-images'
config.cache_storage = :fog
end
##対処法
1. ルートユーザーでログインし、ユーザーパスワードを変更しました。
2. IAMユーザーに権限を付与しました。(ユーザーパスワード変更、アクセスキー変更)
3. 各IAMユーザーでログインし、ユーザーパスワードを変更&アクセスキーを削除し新たに作成しました。
4. GitHub上のファイルを以下の手順で削除しました。
$ git rm --cache config/initializers/carrierwave.rb
$ git add .
$ git commit -m "Delete carrierwave.rb"
$ git push origin master
5. ローカル側のファイルを修正しました。
<<中略>>
aws_access_key_id: ENV["AWS_ACCESS_KEY"],
aws_secret_access_key: ENV["AWS_SECRET_KEY"],
<<中略>>
6. 修正ファイルをGitHubへプッシュしました。
7. 今回の件が落ち着くまで、このリポジトリをPublic
からPrivate
へ切り替えました。
8. AWSのCloudTrailのイベント履歴で、公開したアクセスキーを検索し、不正利用がないか確認しました。
*不正利用らしきものは見当たりませんでした。
9. AWSサポートセンターのMy support cases
の対象Subjectからメッセージを送信しました。
指示された内容を行いました。利用を再開できるよう手続きをお願いします。
10. 4時間後にサポートセンターから返信がありました。こちらも英語なので訳が少し変ですが内容は以下のとおりです。
こんにちは、
アカウントを保護するために必要なすべての措置を講じていただき、ありがとうございます。
必要な手順がすべて完了したことを確認できます。
最後のセキュリティ予防措置として、今後24時間アカウントを監視します。
疑わしいリソースや新たに侵害されたキーが表示されないように、新しいアクティビティに注目します。
すべてがうまくいけば、明日また連絡しますので、このケースを解決します。
また、社内のセキュリティチームに連絡し、アカウントのブロックを解除するよう依頼しました。
それが完了したらすぐにお知らせします。
お時間をいただきありがとうございます。明日私から返事が来ます!
宜しくお願いします。
11. ちょうど1日経ったのちAWSからメールが届きました。貼られているリンク先はこれを見て勉強してくださいという意味なんでしょうね。
こんにちは、
ご健勝のことと存じます!
AWSアカウントを評価している間、ご理解いただきますようお願いいたします。監視プロセスが終了したことを
確認できてうれしく思います。また、アカウントが正常にサニタイズされたことを確認できてうれしいです。
さらに、AWSセキュリティのベストプラクティスとポリシーの詳細については、次のリソースを確認してください。
https://aws.amazon.com/compliance/shared-responsibility-model/
https://aws.amazon.com/cloudtrail/
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/gs_monitor_estimated_charges_with_cloudwatch.html#gs_creating_billing_alarm
https://aws.amazon.com/premiumsupport/trustedadvisor/
http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html
https://github.com/awslabs/git-secrets
12.EC2インスタンスの立ち上げが無事行えました!落ち着いたっぽいのでリポジトリをPublic
へ戻しました。
##最後に
振り返ってみると当然やっちゃいけないことだと理解できるのですが、コードを書くことに意識が向いてしまいセキュリティについて疎かになっていました。GitHub等でソースコードを管理されている方はご注意ください。
##参考
https://qiita.com/tesujiro/items/bd61946b35c8d399b7f9
https://qiita.com/kenzoukenzou104809/items/5a171bf9f709524746b1
https://qiita.com/wagase/items/4ed3e9998848cfa733be