こんにちは。AWS CLIが好きな福島です。
昨日のアップデートでSecurity Hubの「Foundational Security Best Practices」に 25個のチェック項目が追加されましたので、Google翻訳を駆使し、追加された内容を簡単にまとめました。
今回は以下の11個のAWSサービスに関係するチェック項目が追加されました。
- Amazon API Gateway:1個(APIGateway.1)
- Amazon Cloudfront:4個(CloudFront.1-4)
- Amazon DynamoDB:3個(DynamoDB.1-3)
- Amazon Elastic Compute Cloud:2個(EC2.9-10)
- Amazon Elastic File System:1個(EFS.2)
- Amazon Elasticsearch Service:2個(ES.2-3)
- Amazon RDS:2個(RDS.9-10)
- Amazon Redshift:4個(RedShift.1-3,6)
- Amazon Simple Notification System:1個(SNS.1)
- AWS Elastic Load Balancing:3個(ELB.3-6)
- AWS Key Management Service:1個(KMS.3)
※CloudFrontは、米国東部(バージニア北部)でのみサポートされております。
- 重要度:重要
- 重要度:高
- 重要度:中
- [APIGateway.1] APIゲートウェイRESTおよびHTTPAPIログを有効にする必要があります
- [CloudFront.2] CloudFrontディストリビューションでは、オリジンアクセスIDを有効にする必要があります
- [CloudFront.3] CloudFrontディストリビューションでは、転送中に暗号化が必要です
- [DynamoDB.1] DynamoDBテーブルは、需要に応じて容量を自動的にスケーリングする必要があります
- [DynamoDB.2] DynamoDBテーブルでポイントインタイムリカバリを有効にする必要があります
- [DynamoDB.3] DynamoDB Accelerator(DAX)クラスターは保存時に暗号化する必要があります
- [EC2.10] Amazon EC2は、VPCエンドポイントを使用するように設定する必要があります
- [EFS.2] AmazonEFSボリュームはバックアップ計画に含まれている必要があります
- [ES.3] Amazon Elasticsearch Serviceドメインは、ノード間で送信されるデータを暗号化する必要があります
- [RDS.9]データベースログを有効にする必要があります
- [RDS.10] IAM認証はRDSインスタンス用に設定する必要があります
- [Redshift.2] AmazonRedshiftクラスターへの接続は転送中に暗号化する必要があります
- [Redshift.3] AmazonRedshiftクラスターでは自動スナップショットを有効にする必要があります
- [Redshift.6] Amazon Redshiftでは、メジャーバージョンへの自動アップグレードが有効になっている必要があります
- [SNS.1] SNSトピックは、AWSKMSを使用して保存時に暗号化する必要があります
- [ELB.3]クラシックロードバランサーリスナーはHTTPSまたはTLSターミネーションで構成する必要があります
- [ELB.4]アプリケーションロードバランサーはHTTPヘッダーをドロップするように構成する必要があります
- [ELB.5]アプリケーションとクラシックロードバランサーのログを有効にする必要があります
- [ELB.6]アプリケーションロードバランサーの削除保護を有効にする必要があります
- 重要度:低
- (おまけ)SecurityHubの重要度がCRITICALおよびHIGHの結果をAWS CLIで出力してみた
- 終わりに
重要度:重要
[CloudFront.1] CloudFrontディストリビューションには、デフォルトのルートオブジェクトが設定されている必要があります
※米国東部(バージニア北部)でのみサポート。
このコントロールは、AmazonCloudFrontディストリビューションがデフォルトのルートオブジェクトである特定のオブジェクトを返すように設定されているかどうかをチェックします。 CloudFrontディストリビューションにデフォルトのルートオブジェクトが設定されていない場合、コントロールは失敗します。
- カテゴリ:保護>安全なアクセス管理>公開されていないリソース
- 重大度:重大
- リソース:配布
- AWS構成ルール: cloudfront-default-root-object-configured
- パラメータ:なし
[ES.2] Amazon ElasticsearchServiceドメインはVPCに含まれている必要があります
このコントロールは、Amazon ElasticsearchServiceドメインがVPCにあるかどうかをチェックします。
※パブリックアクセスを決定するためにVPCサブネットルーティング設定を評価しません。
- カテゴリ:保護>安全なネットワーク構成> VPC内のリソース
- 重大度:重大
- リソースタイプ: Elasticsearchドメイン
- AWS構成ルール: elasticsearch-in-vpc-only
- パラメータ:なし
[Redshift.1] AmazonRedshiftクラスターはパブリックアクセスを禁止する必要があります
このコントロールは、AmazonRedshiftクラスターがパブリックにアクセス可能かどうかをチェックします。 PubliclyAccessibleクラスター構成項目のフィールドを評価し ます。
- カテゴリ:保護>安全なネットワーク構成>公開されていないリソース
- 重大度:重大
- リソース:クラスター
- AWS構成ルール: redshift-cluster-public-access-check
- パラメータ:なし
[KMS.3] AWSKMSキーを意図せずに削除しないでください
このコントロールは、AWS KMSカスタマーマネージドキー(CMK)が削除されるようにスケジュールされているかどうかをチェックします。 CMKの削除がスケジュールされている場合、コントロールは失敗します。
- カテゴリ:保護>データ保護>データ削除保護
- 重大度:重大
- リソースタイプ: KMSキー
- AWS構成ルール: kms-cmk-not-scheduled-for-deletion
- パラメータ:なし
重要度:高
[EC2.9] EC2インスタンスはパブリックIPアドレスを持つべきではありません
このコントロールは、EC2インスタンスがパブリックIPアドレスを持っているかどうかをチェックします。 publicIpフィールドがEC2インスタンス設定アイテムに存在する場合、コントロールは失敗します。この制御は、IPv4アドレスにのみ適用されます。
- カテゴリ:保護>安全なネットワーク構成>パブリックIPアドレス
- 重大度:高
- リソース: EC2インスタンス
- AWS構成ルール: ec2-instance-no-public-ip
- パラメータ:なし
重要度:中
[APIGateway.1] APIゲートウェイRESTおよびHTTPAPIログを有効にする必要があります
このコントロールは、Amazon API GatewayRESTまたはHTTPAPIステージのすべてのメソッドでロギングが有効になっているかどうかを確認します。 ステージのすべてのメソッドでロギングが有効になっていない場合、またはloggingLevelがERRORでもINFOでもない場合、制御は失敗します。
- カテゴリ:識別>ロギング
- 重大度:中
- リソース:ステージ(v1)、ステージ(v2)
- AWS構成ルール: api-gw-execution-logging-enabled
- パラメータ:なし
[CloudFront.2] CloudFrontディストリビューションでは、オリジンアクセスIDを有効にする必要があります
※米国東部(バージニア北部)でのみサポート。
Amazon S3OriginタイプのAmazonCloudFrontディストリビューションにOriginAccess Identity(OAI)が設定されているかどうかを確認します。 OAIが構成されていない場合、制御は失敗します。
- カテゴリ:保護>セキュアアクセス管理>リソースポリシー設定
- 重大度:中
- リソース:配布
- AWS構成ルール: cloudfront-origin-access-identity-enabled
- パラメータ:なし
[CloudFront.3] CloudFrontディストリビューションでは、転送中に暗号化が必要です
※米国東部(バージニア北部)でのみサポート。
このコントロールは、Amazon CloudFrontディストリビューションで視聴者がHTTPSを直接使用する必要があるかどうか、またはリダイレクトを使用するかどうかをチェックします。 ViewerProtocolPolicyがdefaultCacheBehaviorまたはcacheBehaviorsに対してallow-allに設定されている場合、コントロールは失敗します。
- カテゴリ:保護>データ保護>転送中のデータの暗号化
- 重大度:中
- リソース:配布
- AWS構成ルール: cloudfront-viewer-policy-https
- パラメータ:なし
[DynamoDB.1] DynamoDBテーブルは、需要に応じて容量を自動的にスケーリングする必要があります
このコントロールは、AmazonDynamoDBテーブルが必要に応じて読み取りおよび書き込み容量をスケーリングできるかどうかをチェックします。 この制御は、テーブルがオンデマンド容量モードまたは自動スケーリングが構成されたプロビジョニングモードのいずれかを使用している場合に合格します。
- カテゴリ:回復>復元力>高可用性
- 重大度:中
- リソース:表
- AWS構成ルール: dynamodb-autoscaling-enabled
- パラメータ:なし
[DynamoDB.2] DynamoDBテーブルでポイントインタイムリカバリを有効にする必要があります
このコントロールは、Amazon DynamoDBテーブルでポイントインタイムリカバリ(PITR)が有効になっているかどうかを確認します。
- カテゴリ:リカバリ>復元力>バックアップが有効
- 重大度:中
- リソース:表
- AWS構成ルール: dynamodb-pitr-enabled
- パラメータ:なし
[DynamoDB.3] DynamoDB Accelerator(DAX)クラスターは保存時に暗号化する必要があります
このコントロールは、DAXクラスターが保存時に暗号化されているかどうかを確認します。
- カテゴリ:保護>データ保護>保存データの暗号化
- 重大度:中
- リソース:クラスター
- AWS構成ルール: dax_encryption_enabled
- パラメータ:なし
[EC2.10] Amazon EC2は、VPCエンドポイントを使用するように設定する必要があります
このコントロールは、AmazonEC2のサービスエンドポイントがVPCごとに作成されているかどうかを確認します。 VPCにAmazonEC2サービス用に作成されたVPCエンドポイントがない場合、コントロールは失敗します。
- カテゴリ:保護-安全なネットワーク構成> APIプライベートアクセス
- 重大度:中
- リソース: EC2 VPC
- AWS構成ルール: service-vpc-endpoint-enabled
- パラメーター:serviceName: ec2
[EFS.2] AmazonEFSボリュームはバックアップ計画に含まれている必要があります
このコントロールは、Amazon Elastic File System(Amazon EFS)ファイルシステムがAWSBackupのバックアッププランに追加されているかどうかを確認します。 Amazon EFSファイルシステムがバックアッププランに含まれていない場合、制御は失敗します。
- カテゴリ:リカバリ>復元力>バックアップ
- 重大度:中
- リソースタイプ: EFSファイルシステム
- AWS構成ルール: efs_in_backup_plan
- パラメータ:なし
[ES.3] Amazon Elasticsearch Serviceドメインは、ノード間で送信されるデータを暗号化する必要があります
このコントロールは、AmazonESドメインでノード間暗号化が有効になっているかどうかを確認します。
- カテゴリ:保護>データ保護>転送中のデータの暗号化
- 重大度:中
- リソースタイプ: Elasticsearchドメイン
- AWS構成ルール: elasticsearch-node-to-node-encryption-check
- パラメータ:なし
[RDS.9]データベースログを有効にする必要があります
このコントロールは、Amazon RDSの次のログが有効になっていて、CloudWatchLogsに送信されているかどうかを確認します。
Oracle: (Alert, Audit, Trace, Listener)
PostgreSQL: (Postgresql, Upgrade)
MySQL: (Audit, Error, General, SlowQuery)
MariaDB: (Audit, Error, General, SlowQuery)
SQL Server: (Error, Agent)
Aurora: (Audit, Error, General, SlowQuery)
Aurora-MySQL: (Audit, Error, General, SlowQuery)
Aurora-PostgreSQL: (Postgresql, Upgrade).
- カテゴリ:識別>ロギング
- 重大度:中
- リソース: DBInstance
- AWS構成ルール: rds_logging_enabled
- パラメータ:なし
[RDS.10] IAM認証はRDSインスタンス用に設定する必要があります
このコントロールは、RDSDBインスタンスでIAMデータベース認証が有効になっているかどうかを確認します。
- カテゴリ:保護>セキュアアクセス管理>パスワードなしの認証
- 重大度:中
- リソース: DBInstance
- AWS構成ルール: rds-instance-iam-authentication-enabled
- パラメータ:なし
[Redshift.2] AmazonRedshiftクラスターへの接続は転送中に暗号化する必要があります
このコントロールは、AmazonRedshiftクラスターへの接続が転送中に暗号化を使用する必要があるかどうかをチェックします。 Amazon Redshiftクラスター* パラメーターrequire_SSLが1に設定されていない場合、チェックは失敗します。
- カテゴリ:保護>データ保護>転送中のデータの暗号化
- 重大度:中
- リソース:クラスター
- AWS構成ルール: redshift-require-tls-ssl
- パラメータ:なし
[Redshift.3] AmazonRedshiftクラスターでは自動スナップショットを有効にする必要があります
このコントロールは、AmazonRedshiftクラスターで自動スナップショットが有効になっているかどうかを確認します。 また、スナップショットの保持期間が7以上かどうかもチェックします。
- カテゴリ:リカバリ>復元力>バックアップが有効
- 重大度:中
- リソース:クラスター
- AWS構成ルール: redshift-backup-enabled
- パラメーター:MinRetentionPeriod = 7
[Redshift.6] Amazon Redshiftでは、メジャーバージョンへの自動アップグレードが有効になっている必要があります
このコントロールは、AmazonRedshiftクラスターでメジャーバージョンの自動アップグレードが有効になっているかどうかを確認します。
- カテゴリ:検出>脆弱性とパッチ管理
- 重大度:中
- リソース:クラスター
- AWS構成ルール: redshift-cluster-maintenancesettings-check
- パラメーター:allowVersionUpgrade = true
[SNS.1] SNSトピックは、AWSKMSを使用して保存時に暗号化する必要があります
このコントロールは、AWSKMSを使用してSNSトピックが保存時に暗号化されているかどうかを確認します。
- カテゴリ:保護>データ保護>保存データの暗号化
- 重大度:中
- リソース: AmazonSNSトピック
- AWS構成ルール: sns-encrypted-kms
- パラメータ:なし
[ELB.3]クラシックロードバランサーリスナーはHTTPSまたはTLSターミネーションで構成する必要があります
このコントロールは、Classic Load Balancerリスナーがフロントエンド(クライアントからロードバランサー)接続用にHTTPSまたはTLSプロトコルで構成されているかどうかを確認します。 このコントロールは、Classic LoadBalancerにリスナーがある場合に適用できます。Classic Load Balancerにリスナーが構成されていない場合、コントロールは結果を報告しません。
- カテゴリ:保護>データ保護>転送中のデータの暗号化
- 重大度:中
- リソース: ELBロードバランサー
- AWS構成ルール: elb_tls_https_listeners_only
- パラメータ:なし
[ELB.4]アプリケーションロードバランサーはHTTPヘッダーをドロップするように構成する必要があります
このコントロールは、AWS Application Load Balancer(ALB)を評価して、無効なHTTPヘッダーをドロップするように設定されていることを確認します。 routing.http.drop_invalid_header_fields.enabledの値がfalseに設定されている場合、制御は失敗します。
- カテゴリ:保護>ネットワークセキュリティ
- 重大度:中
- リソースタイプ: ELBロードバランサー
- AWS構成ルール: alb_http_drop_invalid_header_enabled
- パラメータ:なし
[ELB.5]アプリケーションとクラシックロードバランサーのログを有効にする必要があります
このコントロールは、Application LoadBalancerとClassicLoadBalancerでログが有効になっているかどうかを確認します。 access_logs.s3.enabledがfalseの場合、コントロールは失敗します。
- カテゴリ:ロギング
- 重大度:中
- リソース: ELBロードバランサー
- AWS構成ルール: elb-logging-enabled
- パラメータ:なし
[ELB.6]アプリケーションロードバランサーの削除保護を有効にする必要があります
このコントロールは、アプリケーションロードバランサーで削除保護が有効になっているかどうかを確認します。 削除保護が構成されていない場合、制御は失敗します。
- カテゴリ:回復>復元力>高可用性
- 重大度:中
- リソース: Elbv2ロードバランサー
- AWS構成ルール: elb-deletion-protection-enabled
- パラメータ:なし
重要度:低
[CloudFront.4] CloudFrontディストリビューションでは、オリジンフェイルオーバーを設定する必要があります
※米国東部(バージニア北部)でのみサポート。
このコントロールは、AmazonCloudFrontディストリビューションが2つ以上のオリジンを持つオリジングループで設定されているかどうかをチェックします。
- カテゴリ:回復>復元力>高可用性
- 重大度:低
- リソース:配布
- AWS構成ルール: cloudfront-origin-failover-enabled
- パラメータ:なし
(おまけ)SecurityHubの重要度がCRITICALおよびHIGHの結果をAWS CLIで出力してみた
AWS CLIが好きということでSecurityHubの重要度がCRITICALおよびHIGHの結果をAWS CLIで出力してみました。
aws securityhub get-findings --query "Findings[].[Severity.Original,Title,Resources[0].Type,Resources[0].Id]" \ --filters '{"SeverityLabel":[{"Value": "CRITICAL","Comparison":"EQUALS"},{"Value": "HIGH","Comparison":"EQUALS"}]}' \ --output text | tr "," "@" | tr "\t" "," | column -s, -t | tr "@" "," | sort
- 実行結果
CRITICAL 1.14 Ensure hardware MFA is enabled for the "root" account AwsAccount AWS::::Account:xxxxxxxxxxxxx CRITICAL ES.2 Amazon Elasticsearch Service domains should be in a VPC AwsAccount AWS::::Account:xxxxxxxxxxxxx CRITICAL IAM.6 Hardware MFA should be enabled for the root user AwsAccount AWS::::Account:xxxxxxxxxxxxx CRITICAL KMS.3 AWS KMS keys should not be deleted unintentionally AwsAccount AWS::::Account:xxxxxxxxxxxxx CRITICAL Lambda.1 Lambda function policies should prohibit public access AwsLambdaFunction arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxx:function/Con-SecHub-Lambda
終わりに
今回は、SecurityHubに追加されたチェック項目をまとめてみました。 SecurityHubを有効にしておりましたら、重要度が高いチェック項目だけでも確認してみてはいかがでしょうか。