AWS(Amazon Web Services)を利用してセキュアなインフラを構築する上で、EC2インスタンスなどの設定も大事ですが、AWSアカウント自体のセキュリティ設定を行うこともとても重要です。
本投稿ではCIS(Center of Information Security)が提供しているCIS Amazon Web Services Foundationsを題材に、AWSアカウントのハードニングについて説明したいと思います。
概要
CISドキュメントは大きく分けて以下の章から構成されています。
- 認証・アクセス制御 (Identity and Access Management)
- ロギング (Logging)
- モニタリング (Monitoring)
- ネットワーク (Networking)
各ポイントを抑えていくことで、特定のアクセスのみを許可し、それらのアクセスを記録し、意図しないアクセスを検知することが実現されます。
1~3ではIAMを使ってAWSアカウント内のイベントを対象として設定を行っていきますが、4ではVPC内のトラフィックについて個々のネットワーク設定に依存しないAWSアカウント内で共通の設定を行います。
1~3ではIAMを中心として, AWSが提供する複数のサービスを利用して設定を行っていきます。下図が設定全体の概要になります。
以下、CISドキュメント内の各章について順番に説明していきます。
1. 認証・アクセス制御 (Identity and Access Management)
AWSアカウントの認証・アクセス制御はIdentity and Access Management(IAM)を用いて行います。IAMを用いることで、AWSアカウント内のリソースへアクセスを行うユーザの管理、各ユーザの多要素認証・パスワードポリシなどの認証設定、呼び出し可能なAPIの制限などのアクセス制御を行う事ができます。
AWSアカウント作成直後はルートアカウントのみが用意されていますが、ルートアカウントはすべての操作を行う権限があるためアカウント全体の管理を行う場合のみ利用し、通常はIAMユーザを使うことが推奨されています。
また、CISドキュメントにはインシデント発生時に用いられるAWSからの連絡窓口の登録や、詳細な請求情報表示を有効化する、といったIAMの設定以外の項目も含まれています。
使用したサービス
2. ロギング (Logging)
CloudTrailを使うと、管理画面へのログインやセキュリティグループの変更などAWSアカウント内の様々なイベントログを自動的に保存することができます。これにより意図しない操作が行われていないかを監視したり、インシデント発生時などにAWSアカウント内でいつ、何に対して、どのような操作が行われたのかを調査したりすることが可能になります。
これらのログはSimple Storage Service(S3)に保存されますが、Key Management Service(KMS)を使うことでS3内に保存されたログを暗号化したり、S3のアクセスログ機能を有効化することでログを保存したバケット自体の完全性をチェックすることができます。
CloudTrailのログはS3に保存するだけでなく、同時にCloudWatch Logsにも保存することができます。CloudWatch Logsを利用することで、リアルタイムにログの検索を行ったり、特定の条件に合致するログレコード発生を自動的に検知できるようになります。
上図に示したCloudTrailによるログ保存以外にも、Configを有効化することが推奨されています。Configは監査ポリシーを設定しておくことで、AWSアカウント内の各設定がそのポリシーに違反していないかを定期的にチェックしてくれるサービスです。また、これを有効化するとAWSアカウント内のリソースの変更履歴が自動的に保存されるため、インシデント発生時などの調査にも利用することができます。
使用したサービス
- Simple Storage Service(S3): CloudTrailログの保管
- Key Management Service(KMS): S3ログの暗号化
3. モニタリング (Monitoring)
前章でCloudTrailによるCloudWatch Logsへのログ転送を設定しました。CloudWatch Logsにはあらかじめ設定した条件に合致したログレコードの出現を監視し、Simple Notification Service(SNS)を使って通知を行う機能があります。SNSを使うとこれらの通知をEメールやWebhookなど様々な手段で受け取る事ができます。
CISドキュメントでは例えば以下のような条件の監視設定を推奨しています。
- 認証失敗や許可されない操作の実行
- セキュリティグループなどのネットワーク設定変更
- CloudTrailなどロギング設定の変更
これらの監視設定は14項目ほどの具体的な設定内容がCISドキュメントに記載されているので、すべて設定することをお勧めします。
使用したサービス
4. ネットワーク (Networking)
AWSアカウント内に実際にネットワークを構築していくにはVirtual Private Cloud(VPC)を使いますが、本章では実際に構築する個々のネットワークではなくAWSアカウント全体として行っておくべき設定について記載されています。
VPC Flow Logsを有効化することで、VPC内で発生したIPトラフィックをすべてログとして保存することができます。各ログレコードにはそのトラフィックが許可(ACCEPT)されたか、拒絶(REJECT)されたかも含まれるため、例えば拒絶されたトラフィックのログを監視することで攻撃の検知などを行うことができます。
また、CISドキュメントではその他に以下のようなチェックを推奨しています。
- すべてのSecurityGroupで22番(SSH)や3389番(RDP)のポートがインターネット全体へ公開されていないか?
- デフォルトのSecurityGroupですべてのトラフィックが遮断されているか?
- VPCピアリングが使用されている場合に最小の権限設定が行われているか?
使用したサービス
- Virtual Private Cloud(VPC): ネットワークの構築・設定
まとめ
VPCネットワークやEC2インスタンスなどのセキュリティ対策に目が行きがちですが、AWSではアカウント全体のセキュリティ対策を行う手段を多く提供しています。本投稿ではCISが提供するCIS Amazon Web Services Foundationsを基に、AWSアカウントのハードニングを行う手段について説明しました。
また、AWSがGitHub上に公開しているaws security benchmarkにはCIS Amazon Web Services Foundationsへの適合状況をチェックして採点してくれるPythonスクリプトが含まれています。自身のAWSアカウントが適切に設定されているか、また設定が終わった際に設定ミスがないか、などをチェックする際に便利かと思います。