こんにちは!
開発部の武内です。
弊社は様々なサービスを提供していますが、
バックエンドのほとんどをクラウドサービスで構成しています。
クラウドはオンプレミス以上にセキュリティ面に気を遣う必要がありますが、
サービスが増えたり大きくなるに比例してクラウド資産も増えるため、
セキュリティチェックのコストも膨れ上がっていきます。
コストを抑えるにはやはり技術的なアプローチで解決したい、ということで
AWSの自動セキュリティチェックサービスであるCloudSploitを試してみました。
CloudSploit
AWSアカウントに対して様々なセキュリティ・設定のチェック、
またそれらの継続的な監視を行うことができるWebサービスのようです。
- 開放されているセキュリティグループ
- VPCの設定ミス
- セキュリティのベストプラクティスの指摘
- ルートアカウントのセキュリティ
等がチェックできるようですね。
アカウント作成
トップページの「Start your FREE account」からアカウント登録を行います。
メールアドレスとパスワードを入力し「Create Account」をクリックすると
認証メールが送られてくるので内容を確認し認証を行います。
AWSアカウントと接続する
認証後ログインするとダッシュボードが表示されます。
「Connect an AWS Account」をクリックして
「Account Connection Wizard」に進みます。
接続名を設定します。
ここでは接続名をMyAccountとし、グループはデフォルトとしました。
接続後のロールを設定します。
手動でも設定できるようですがここではCloudFormationとしました。
「External ID」は後ほど使うので控えておきます。
「Launch Stack」をクリックしてCloudFormationに進みます。
テンプレートは既に選択されているのでそのまま次に進みます。
中身を見てみると、接続用のAssumeRoleを作っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "CloudSploit security scans cross-account role", "Parameters" : { "ExternalId" : { "Type" : "String", "Description" : "The external ID auto-generated from the CloudSploit dashboard. Copy this from the Add Account section.", "AllowedPattern" : "[-a-z0-9]*", "ConstraintDescription" : "Must be lowercase or numbers, no spaces, dashes ok." } }, "Resources" : { "CloudSploitRole" : { "Type": "AWS::IAM::Role", "Properties" : { "AssumeRolePolicyDocument": { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": { "Ref" : "ExternalId" } } } } ] }, "ManagedPolicyArns": [ "arn:aws:iam::aws:policy/SecurityAudit" ] } } }, "Outputs" : { "CloudSploitRoleArn" : { "Description" : "The role ARN of the cross-account user. Copy this into CloudSploit.", "Value" : {"Fn::GetAtt" : ["CloudSploitRole", "Arn"] } } } } |
スタック名は初期設定のままとしました。
「パラメータ」に先ほど控えた「External ID」を入力し次に進みます。
Nameタグを設定し次に進みます。
CAPABILITYの承認にチェックを入れスタックを作成します。
スタックが作成されました。
作成されたIAMロールを確認します。
「ロールARN」は後ほど使うので控えておきます。
CloudSploitに戻り、
「IAM Role ARN」に先ほど控えた「ロールARN」を入力し「Connect」をクリックします。
AWSアカウントとの接続が完了しました!
セキュリティ・設定チェック
ダッシュボード -> Connected Accounts -> AWS Accounts
に接続したAWSアカウントが表示されています。
以下でチェックを行っているAWSアカウントは弊社資産ではなく私個人のものです。
「Scan」をクリックしセキュリティ・設定チェックに進みます。
AWS認証情報を入力するとありますが、
アカウント接続が済んでいるのでここでは必要ありません。
利用規約を確認し「Begin Scan」をクリックするとチェックが始まります。
チェック結果のFAIL確認するとCloudTrailが有効になっていないとあります。
こういった直接の脆弱性ではないものもFAILと判断されるようです。
VPCを追加して再度チェックしてみました。
デフォルトのセキュリティグループを使っていることとサブネットが一つしかないことがFAILとなりました。
かなり細かなチェックも行われますね。
気になる機能
これ以上の機能は基本的に有料のため今回は試せていませんが、
チェック結果からの分析・レポートを行うような機能も充実しているようです。
CloudWatch EventsからCloudSploitを呼び出す機能は、
例えばAWSリソースが増えた場合にチェックを走らせるといったことができそうですね。
Alerts機能はAWSと外部ツールの優れたアダプタとなりそうです。
おわりに
クラウドサービスの変化は早く、それを取りまくツールもどんどん変わっていきます。
追従していくのは大変ですが、そのスピード感が楽しいところでもあります。
皆さまの快適なクラウド開発の一助になれば幸いです。