はじめに
AWS環境を構築する際、セキュアに保つためにAWS SecurityHubの『AWSの基本的なセキュリティのベストプラクティスコントロール』を活用しました。 今回は実際に運用して検出が多かったコントロール項目3選を紹介したいと思います。
AWSのドキュメントにすべての項目が詳しく記載されていますので参考にしてください。
1. IMDSv1の無効化
EC2起動時のデフォルト設定が「IMDSv1/IMDSv2を有効化する」となっています。 そのため、構築段階でIMDSv1の無効化の設定が漏れていることがありました。
IMDSv1と設定不備の組み合わせによるセキュリティ事故も発生していますので、不要であれば使わない方がよいと考えています。(気になる方は調べてみてください。)
コントロール項目
- [EC2.8] EC2 インスタンスは IMDSv2 を使用する必要があります
2. 保管中のデータの暗号化 & 転送中のデータの暗号化
暗号化機能は、各AWSサービスを有効化することで利用可能です。 案件に応じて、「保管中のデータの暗号化」や「転送中のデータの暗号化」の必要性は変わってくると思いますが、必要な場合に網羅的に設定されていることを確認するのに役立ちました。
コントロール項目
- [EC2.7] EBS のデフォルト暗号化を有効にする必要があります
- [RDS.3] RDS DBインスタンスでは、保存時の暗号化を有効にする必要があります
- [S3.4] S3バケットではサーバー側の暗号化を有効にする必要があります
- [SNS.1] SNS トピックは、を使用して保存時に暗号化する必要があります
- etc…
3. セキュアなアクセス管理
転送中のデータの暗号化と似たような話になりますが、S3バケットはデフォルト設定では非セキュアな通信が許可されています。非セキュアな通信を拒否するように S3 バケットを設定するにはアクセス権限ポリシーを適切に設定する必要があります。 私は、セキュリティのベストプラクティスコントロールで知るまでS3バケットで非セキュアな通信が許可されていることを知りませんでした。気づけていないセキュリティ設定に気づけることもメリットかと思います。
コントロール項目
- [S3.5] S3 バケットは、Secure Socket Layer を使用するためのリクエストが必要です
おわりに
実際にやってみると、適宜リソースを追加するサービス(EC2やS3)での検出が多くなる傾向にありました。 AWSには複数のサービスがあるため、システム全体で差異をなくし一定レベルのセキュリティ設定を行うことの難しさを感じていましたが、SecurityHubのベストプラクティスコントロールを使うことでその難しさを軽減できると感じました。 また、メンバー間のセキュリティの認識を揃えることにも役立ちました。
『AWSの基本的なセキュリティのベストプラクティスコントロール』はセキュリティの底上げに役立ちますが、すべてのセキュリティリスクを洗い出せるとは考えていません。 そのほかのツールや仕組み・ルールを組み合わせて全体のセキュリティレベルを底上げ・維持していこうと考えています。