AWSのやっておくべきセキュリティ対策として、基本的なことだが 大事なことなのでまとめておこうと思います。
##AWS Identity and Access Management
###IAMによる認証
- rootユーザには、強力なパスワードと多要素認証(MFA)を設定
- 基本的には、rootユーザを使用しない
- rootユーザのAccess Keyが発行されていた場合は削除する
- IAMユーザのパスワードポリシーには強力なものを設定
- IAMユーザのパスワードやAccess Key/Secret Access Keyは定期的にローテーションする
- 認証情報の利用状況はIAMのCredential Report機能で定期的に確認
###IAMによる権限設定
- 全てのアクセスはデフォルトで拒否(Deny)となっているため、必要な権限のみ明示的に許可(Allow)設定を行う
- アクセス権限の優先度は
暗黙的なDeny(デフォルトDeny) < 明示的なAllow < 明示的なDeny
- IAMポリシーは最小限のアクセス権を付与
###監査
- AWS CloudTrailによる証跡取得を行う
- 誰が、いつ、どのような操作(AWS Console、CLI、API等)したかを記録
- AWS CloudTrail自体の料金は無料
- AWS ConfigによるAWSリソースの設定を記録し評価を行う
- AWSリソースの変更履歴、構成情報を管理
- AWS Config RulesでAWSリソースがあるべき状態になっているかを自動評価
- 例)Security GroupでSSHをフルオープンにしていないか
- 例)公開状態になっているS3はないか
- 例)全てのIAMユーザでMFAが有効になっているか
###IAMロール
- EC2にはIAMロールを利用する
- AWSサービスに対してAWS操作権限を付与し、IAMユーザの認証情報をOSやアプリに持たせる必要がなく、認証情報の漏洩リスクを低減
- 自動的に認証情報(Access Key/Secret Access Key)がローテーションされる
- 認証情報はAWS Security Token Service(STS)により生成
- IAMロールを使えるものは全てIAMロールを利用
- オンプレからAWSリソースを操作する場合等、致し方ない場合のみIAMユーザを利用
- IAMユーザやアクセスキーは共有しない
- git-secretsを使用しクレデンシャル情報の漏洩防止
###S3 Access Management
- 必要以上に公開範囲の広いポリシーやACLを設定しない
- EC2やAWSサービスからのアクセスはIAMロールで行う
- 外部へ開放されているバケットを定期的にチェックする
- AWS Trusted Advisor
- AWS IAM Access Analyzer(Access Analyzer for S3)
##発見的統制
- 各種AWSサービスのログを有効化する
- CloudTrail:誰が、いつ、どのような操作(AWS Console、CLI、API等)したかを記録
- VPC Flow Logs:VPCのネットワークインタフェース間のIPトラフィックをキャプチャ
- Lambda:Lambda Functionに関するエラー出力、標準出力等のログを収集
- CloudWatch Logs Agent:EC2上で動作するOS、ミドルウェア、アプリケーション等のログをCloudWatchへ収集
##データ保護
- 保存時のデータ暗号化(Encryption at Rest)
- サーバサイド暗号化(SSE)ではAWS Key Management Service(KMS)キーを使用し暗号化
- クライアントサイド暗号化(CSE)ではKMSでCustomer Master Key(CMK)を使用し暗号化
- 通信の暗号化(Encryption in Transit)
- SSL通信を利用
- AWS Certificate Managerで証明書を発行(無料)、自動管理
- CloudFrontとELB間をHTTPSにし、ELBをSSH Terminationとする
- DB接続情報やクレデンシャル等はセキュアに保管する
- AWS Systems Manager Parameter Store
- AWS Secrets Manager