AWS Conformance Packs (適合パック) に含まれるルール一覧を紹介

AWS Conformance Packs (適合パック) に含まれるルールを紹介します。これを見てコンプライアンスチェックを実施していただければ幸いです。
2020.06.05

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

自社システムのコンプライアンス管理はどのように行っていますでしょうか?
今回は AWS リソースのコンプライアンス管理に役立つ Conformance Packs (適合パック) を紹介します。

Conformance Packs とは

日本語訳は適合パックですが、本エントリでは Conformance Packs を使います。適宜読み替えて頂ければと思います。

AWS Config ルールによるリソースの評価と修復アクションの集合体です。
社内コンプライアンスチェックと遵守の強制に活用することが可能です。

このような使い方を想定しています。

  1. コンプライアンスに合致するテンプレートを自身の環境へデプロイ
  2. 定期的に結果をレビュー
  3. レビューで修正すべき事項が発見されたら修正
  4. ルールが自社に合わない場合はルールを調整
  5. 2-4 を繰り返す

提供されているテンプレート

AWS からサンプルテンプレートが提供されています。
このテンプレートで定義されている Config ルールと、どのような社内ポリシーに合致するかを表にしました。
社内コンプライアンスの遵守に活用するものいいですし、逆のアプローチでこのテンプレートに沿って社内ポリシーを決定するのも有効だと考えます。

AWS Control Tower 検出ガードレールコンフォーマンスパック

含まれているルール Config ルール名 合致する社内ポリシー
EBS Optimized が有効になっている EC2 を検出 CheckForEbsOptimizedInstance パフォーマンス要件を満たさなければならない場合のみ EBS Optimized を使用する。
アタッチされていない EBS ボリュームを検出 CheckForEc2VolumesInUs アタッチされていないボリュームは削除する。
EBS ボリュームが暗号化されているか CheckForEncryptedVolumes EBS ボリュームは暗号化する。
IAM ユーザーが MFA を設定しているか CheckForIAMUserMFA IAM ユーザーは MFA を設定する。
IAM ユーザーのコンソールアクセスに MFA を設定しているか CheckForIAMUserConsoleMFA IAM ユーザーは MFA を設定する。
RDS がパブリックアクセスになっている CheckForRdsPublicAccess 不要なパブリックアクセスは無効にする。
RDS スナップショットがパブリックになっているか CheckForPublicRdsSnapshots 不要なパブリック設定は無効にする。
RDS インスタンスが暗号化されているか CheckForRdsStorageEncryption RDS インスタンスは暗号化する。
セキュリティグループで無制限の着信許可を検出 CheckForRestrictedCommonPortsPolicy 20,21,3389,3306,4333 ポートに対して無制限の着信許可は禁止する。
セキュリティグループで無制限の ssh 着信許可を検出 CheckForRestrictedSshPolicy ssh に対して無制限の着信許可は禁止する。
ルートユーザーが MFA を設定しているか CheckForRootMfa ルートユーザーは MFA で保護する。
S3 バケットのパブリック読み取りを検出 CheckForS3PublicRead 不要なパブリック読み取りは無効にする。
S3 バケットのパブリック書き込みを検出 CheckForS3PublicWrite 不要なパブリック書き込みは無効にする。
S3 バージョニングが設定されていないことを検出 CheckForS3VersioningEnabled S3 バージョニングを有効にする。

サンプルのドキュメントはこちら

Amazon DynamoDB 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
DynamoDB AutoScaling が有効になっていることか DynamoDbAutoscalingEnabled Autoscaling の使用を禁止する。
DynamoDB テーブル暗号が有効になっているか DynamoDbTableEncryptionEnabled DynanmoDB テーブルは暗号化する。
DynamoDB スループットがリミットに達していることを検出 DynamoDbThroughputLimitCheck パフォーマンスチューニング観点、または、過度なスループットは攻撃を受けている可能性を示している。

サンプルのドキュメントはこちら

Amazon S3 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
S3 パブリックアクセスブロック で読み取りが禁止されているか S3BucketPublicReadProhibited 不要なパブリック読み取りは無効にする。
S3 パブリックアクセスブロック で書き込みが禁止されているか S3BucketPublicWriteProhibited 不要なパブリック書き込みは無効にする。
S3 バケットのクロスリージョンレプリカが有効にされているかを検出 S3BucketReplicationEnabled 不要なクロスリージョンレプリケーションは禁止する。
S3 バケットポリシーで SecureTransport が強制されているか S3BucketSSLRequestsOnly バケットは TLS でのみアクセスする。
S3 バケットでデフォルト暗号化が有効になっていること、または、
サーバーサイド暗号化なしの put-object リクエストを明示的に拒否しているか
ServerSideReplicationEnabled S3 サーバーサイド暗号化を有効にする。
S3 アクセスログが有効になっているか S3BucketLoggingEnabled フォレンジックのため S3 アクセスログを取得する。

サンプルのドキュメントはこちら

AWS Identity And Access Management 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
アクセスキーが90日でローテーションされているか AccessKeysRotated アクセスキーは定期的にローテーションする。
IAM グループにユーザーが1人以上属しているか IAMGroupHasUsersCheck IAM ユーザーに IAM ポリシーを紐付けずに IAM グループを使用する。
IAM ユーザーのパスワードがポリシーを満たしているか IAMPasswordPolicy 規定のパスワードポリシーを遵守する。
使用してはいけないポリシーを使用していないか IAMPolicyBlacklistedCheck 禁止されている強力な権限を付与させない。
管理者権限("Allow" with "Action": "" over "Resource": "")が付与されていないか IAMPolicyNoStatementsWithAdminAccess 原則として管理者権限は付与しない。
使用してはいけない管理ポリシーを使用していないか IAMRoleManagedPolicyCheck 禁止されている AWS 管理ポリシーを付与させない。
ルートユーザーのアクセスキーが有効か IAMRootAccessKeyCheck ルートユーザーのアクセスキー使用は禁止。(絶対禁止)
IAM ユーザーが少なくても1つの IAM グループに属しているか IAMUserGroupMembershipCheck IAM ユーザーは IAM グループに所属させる。
IAM ユーザーが MFA を設定しているか IAMUserMFAEnabled IAM ユーザーは MFA を設定する。
IAM ユーザーにポリシーが設定されているか IAMUserNoPoliciesCheck IAM ユーザーに直接ポリシーを設定しない。
指定した期間、パスワードまたはアクセスキーが使用されているか IAMUserUnusedCredentialsCheck 長期間使用しない IAM ユーザーは削除する。
IAM ユーザーのコンソールアクセスに MFA を設定しているか MFAEnabledForIAMConsoleAccess IAM ユーザーは MFA を設定する。
ルートユーザーは HardWare MFA を設定しているか RootAccountHardwareMFAEnabled ルートユーザーは HardWare MFA で保護する。
ルートユーザーは MFA を設定しているか RootAccountMFAEnabled ルートユーザーは MFA で保護する。

サンプルのドキュメントはこちら

CIS 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
IAM ユーザーのコンソールアクセスに MFA を設定しているか MFAEnabledForIamConsoleAccess IAM ユーザーは MFA を設定する。
指定した期間、パスワードまたはアクセスキーが使用されているか IAMUserUnusedCredentialsCheck 長期間使用しない IAM ユーザーは削除する。
指定した期間でアクセスキーがローテーションされているか AccessKeysRotated
IAM ユーザーのパスワードがポリシーを満たしているか IAMPasswordPolicy 規定のパスワードポリシーを遵守する。
ルートユーザーのアクセスキーが有効か IAMRootAccessKeyCheck ルートユーザーのアクセスキー使用は禁止。(絶対禁止)
ルートユーザーは MFA を設定しているか RootAccountMFAEnabled ルートユーザーは MFA で保護する。
ルートユーザーは HardWare MFA を設定しているか RootAccountHardwareMFAEnabled ルートユーザーは HardWare MFA で保護する。
IAM ユーザーにポリシーが設定されているか IAMUserNoPoliciesCheck IAM ユーザーに直接ポリシーを設定しない。
管理ポリシー 'AWSSupportAccess' が付与されているか IAMSupportPolicyInUse
管理者権限("Allow" with "Action": "" over "Resource": "")が付与されていないか IAMPolicyNoStatementsWithAdminAccess 管理者権限は付与させない。
複数のリージョンで CloudTrail が有効になっているか MultiRegionCloudTrailEnabled CloudTrail は全リージョンで有効にする。
CloudTrail ログ検証が有効になっているか CloudTrailLogFileValidationEnabled CloudTrail ログはログ検証を有効にして保管する。
S3 パブリックアクセスブロック で読み取りが禁止されているか S3BucketPublicReadProhibited 不要なパブリック読み取りは無効にする。
S3 パブリックアクセスブロック で書き込みが禁止されているか S3BucketPublicWriteProhibited 不要なパブリック書き込みは無効にする。
S3 アクセスログが有効になっているか S3BucketLoggingEnabled S3 アクセスログを取得する。
CloudTrail がサーバー側暗号化を使用しているか CloudTrailEncryptionEnabled CloudTrail ログ保管時にはサーバー側暗号化を使用する。
customer master key (CMK) のローテーションが有効になっているか CMKBackingKeyRotationEnabled CMK を使う場合はキーローテションを定期的に行う。
VPC フローログが有効になっているか VPCFlowLogsEnabled ネットワーク調査目的で VPC フローログを保管する。
ssh 着信がセキュリティグループで制限されているか IncomingSSHDisabled ssh 着信は送信元 IP アドレスを制限する。
RDP 着信がセキュリティグループで制限されているか RestrictedIncomingTraffic RDP 着信は送信元 IP アドレスを制限する。
Default セキュリティグループはインバウンドもアウトバウンドもトラフィックを許可しない VPCDefaultSecurityGroupClosed Defaul セキュリティグループは使用しない。

サンプルの内容はこちら

PCI-DSS 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
DMS インスタンスがパブリックアクセス可能になっているか DMSReplicationNotPublic データベース移行は閉域網を利用する。
EBS スナップショットがパブリック公開されているか EBSSnapshotPublicRestorableCheck EBS スナップショットはパブリックにしない。
EC2 インスタンスにパブリック IP アドレスが付与されていないか EC2InstanceNoPublicIP EC2 インスタンスにパブリック IP アドレスは付与せず、NAT GW や PrivateLink を使う。
Elasticsearch は VPC 内に閉じているか ElasticsearchInVPCOnly Elasticsearch はパブリックに公開しない。
ルートユーザーのアクセスキーが有効か IAMRootAccessKeyCheck ルートユーザーのアクセスキー使用は禁止。(絶対禁止)
IAM ユーザーが MFA を設定しているか IAMUserMFAEnabled IAM ユーザーは MFA を設定する。
ssh 着信がセキュリティグループで制限されているか IncomingSSHDisabled ssh 着信は送信元 IP アドレスを制限する。
EC2 インスタンスが VPC 内で起動しているか InstancesInVPC EC2 インスタンスは VPC での利用を原則とする。
Lambda 関数がパブリックアクセスを禁止しているか LambdaFunctionPublicAccessProhibited Lambda 関数のパブリックアクセスは禁止する。
Lambda 関数が VPC 内で実行されるか LambdaInsideVPC Lambda 関数は VPC 内に限定する。
IAM ユーザーのコンソールアクセスに MFA を設定しているか MFAEnabledForIAMConsoleAccess IAM ユーザーは MFA を設定する。
RDS がパブリックアクセスになっているか RDSInstancePublicAccessCheck 不要なパブリックアクセスは無効にする。
RDS スナップショットがパブリックになっているか RDSSnapshotsPublicProhibited 不要なパブリック設定は無効にする。
Redshift クラスターがパブリックアクセスを禁止しているか RedshiftClusterPublicAccessCheck Redshift クラスターのパブリックアクセスは禁止する。
セキュリティグループで無制限の着信許可をしているか RestrictedIncomingTraffic 無制限の着信許可は禁止する。
ルートユーザーは HardWare MFA を設定しているか RootAccountHardwareMFAEnabled ルートユーザーは HardWare MFA で保護する。
ルートユーザーは MFA を設定しているか RootAccountMFAEnabled ルートユーザーは MFA で保護する。
禁止されたアクションをバケットポリシーで使用しているか S3BucketBlacklistedActionsProhibited S3 バケット/オブジェクトに対する特定操作は禁止する。
S3 バケットアクセスがAWSプリンシパル、フェデレーションユーザー、サービスプリンシパル、
IPアドレス、またはVPCのいずれかによって制限されている
S3BucketPolicyGranteeCheck 認められた接続元のみが S3 へアクセス可能。
指定したポリシーがアカウント間許可に使われていないこと S3BucketPolicyNotMorePermissive 別アカウントから S3 バケットに対するポリシーを限定する。
S3 パブリックアクセスブロック で読み取りが禁止されているか S3BucketPublicReadProhibited1 不要なパブリック読み取りは無効にする。
S3 パブリックアクセスブロック で書き込みが禁止されているか S3BucketPublicWriteProhibited 不要なパブリック書き込みは無効にする。
S3 バージョニングが設定されていないことを検出 S3BucketVersioningEnabled S3 バージョニングを有効にする。
Default セキュリティグループはインバウンドもアウトバウンドもトラフィックを許可しない VPCDefaultSecurityGroupClosed Defaul セキュリティグループは使用しない。
セキュリティグループで無制限の着信許可を検出 VPCSGOpenOnlyToAuthorizedPorts いかなるポートでも無制限の着信は許可しない。

サンプルの内容はこちら

NIST CSF 運用のベストプラクティス

含まれているルール Config ルール名 合致する社内ポリシー
アクセスキーが90日でローテーションされているか AccessKeysRotated Control ID PR_AC-1 に対応
有効期間切れが迫っている証明書(ACM インポート)がないか AcmCertificateExpirationCheck Control ID PR_AC-5 に対応
CloudTrail ログが CloudWatch Logs へ送信されているか CloudTrailCloudWatchLogsEnabled Control ID PR_PT-1 に対応
CloudTrail が有効になっているか CloudTrailEnabled Control ID PR_PT-1 に対応
CloudTrail がサーバー側暗号化を使用しているか CloudTrailEncryptionEnabled Control ID PR_DS-1 に対応
CloudWatch Logs ロググループが暗号化されているか CloudwatchLogGroupEncrypted Control ID PR_DS-1 に対応
EC2 インスタンスが Systems Manager で管理させているか Ec2InstanceManagedBySsm Control ID ID_AM-2 に対応
EC2 インスタンスにパブリック IP アドレスが付与されていないか Ec2InstanceNoPublicIp Control ID PR_AC-3 に対応
Systems Manager コンプライアンスチェックで EC2 インスタンスがコンプライアンスを満たしているか Ec2ManagedinstanceAssociationComplianceStatusCheck Control ID ID_AM-2 に対応
EC2 インスタンス、または、ENI にセキュリティグループがアタッチされているか(Default以外) Ec2SecurityGroupAttachedToEni Control ID PR_DS-3 に対応
EFS ファイルシステムが暗号化されているか EfsEncryptedCheck Control ID PR_DS-1 に対応
Amazon ES で保管時暗号化が有効になっているか ElasticsearchEncryptedAtRest Control ID PR_DS-1 に対応
ELB HTTPS リスナーを使用しており ACM 証明書を使用しているか ElbAcmCertificateRequired Control ID PR_DS-2 に対応
EMR マスターノードにパブリック IP アドレスが付与されていないか EmrMasterNoPublicIp Control ID PR_AC-3 に対応
EBS ボリュームが暗号化されているか EncryptedVolumes Control ID PR_DS-1 に対応
IAM グループにユーザーが1人以上属しているか IamGroupHasUsersCheck Control ID PR_AC-4 に対応
IAM ユーザーのパスワードがポリシーを満たしているか IamPasswordPolicy Control ID PR_AC-1 に対応
管理者権限("Allow" with "Action": "" over "Resource": "")が付与されていないか IamPolicyNoStatementsWithAdminAccess Control ID PR_AC-4 に対応
ルートユーザーのアクセスキーが有効か IamRootAccessKeyCheck Control ID PR_AC-4 に対応
IAM ユーザーが少なくても1つの IAM グループに属しているか IamUserGroupMembershipCheck Control ID PR_AC-4 に対応
IAM ユーザーが MFA を設定しているか IamUserMfaEnabled Control ID PR_AC-7 に対応
IAM ユーザーにポリシーが設定されているか IamUserNoPoliciesCheck Control ID PR_AC-4 に対応
指定した期間、パスワードまたはアクセスキーが使用されているか IamUserUnusedCredentialsCheck Control ID PR_AC-1 に対応
ssh 着信がセキュリティグループで制限されているか IncomingSshDisabled Control ID PR_AC-5 に対応
Internet Gateway が指定した VPC にのみアタッチされているか InternetGatewayAuthorizedVpcOnly Control ID PR_AC-3 に対応
Lambda 関数がパブリックアクセスを禁止しているか LambdaFunctionPublicAccessProhibited Control ID PR_AC-3 に対応
IAM ユーザーのコンソールアクセスに MFA を設定しているか MfaEnabledForIamConsoleAccess Control ID PR_AC-7 に対応
RDS がパブリックアクセスになっているか RdsInstancePublicAccessCheck Control ID PR_AC-3 に対応
RDS スナップショットがパブリックになっているか RdsSnapshotsPublicProhibited Control ID PR_AC-3 に対応
RDS インスタンスが暗号化されているか RdsStorageEncrypted Control ID PR_DS-1 に対応
Redshift クラスターがパブリックアクセスを禁止しているか RedshiftClusterPublicAccessCheck Control ID PR_AC-3 に対応
RDP 着信がセキュリティグループで制限されているか RestrictedIncomingTraffic Control ID PR_AC-5 に対応
ルートユーザーは HardWare MFA を設定しているか RootAccountHardwareMfaEnabled Control ID PR_AC-7 に対応
ルートユーザーは MFA を設定しているか RootAccountMfaEnabled Control ID PR_AC-7 に対応
アカウントレベルで S3 パブリックアクセスブロックが設定されているか S3AccountLevelPublicAccessBlocks Control ID PR_AC-3 に対応
S3 アクセスログが有効になっているか S3BucketLoggingEnabled Control ID PR_PT-1 に対応
S3 バケットアクセスがAWSプリンシパル、フェデレーションユーザー、サービスプリンシパル、
IPアドレス、またはVPCのいずれかによって制限されている
S3BucketPolicyGranteeCheck Control ID PR_AC-1 に対応
S3 パブリックアクセスブロック で読み取りが禁止されているか S3BucketPublicReadProhibited Control ID PR_AC-3 に対応
S3 バケットのデフォルト暗号化が有効になっているか、または、
サーバー側暗号化なしの PutObject を拒否しているか
S3BucketServerSideEncryptionEnabled Control ID PR_DS-1 に対応
S3 バケットポリシーで SecureTransport が強制されているか S3BucketSslRequestsOnly Control ID PR_DS-2 に対応
SageMaker ノートブックインスタンス用に KMS が構成されているか SagemakerNotebookInstanceKmsKeyConfigured Control ID PR_DS-1 に対応
SageMaker ノートブックインスタンスで直接インターネットアクセスが無効になっているか SagemakerNotebookNoDirectInternetAccess Control ID PR_AC-3 に対応
Secrets Manager でローテーションが有効になっているか SecretsmanagerRotationEnabledCheck Control ID PR_AC-1 に対応
Default セキュリティグループはインバウンドもアウトバウンドもトラフィックを許可しない VpcDefaultSecurityGroupClosed Control ID PR_AC-5 に対応
VPC フローログが有効になっているか VpcFlowLogsEnabled Control ID PR_PT-1 に対応

サンプルの内容はこちら

まとめ

Conformance Packs で何かチェックできるのかを書き上げてみました。
サンプル内容を見ても簡単には理解できないですし、私も説明が難しいところはありました。
これをみてコンプライアンスチェックを実施するかどうかの判断になってもらえれば幸いです。

参考


AWS Config 適合パックの紹介
Conformance PacksによるConfig RuleとRemediation Configurationのパッケージ化とデプロイ
AWS Config 適合パック (Conformance Packs) で何ができるのか分からなかったので絵を描いて理解してみた

以上、吉井 亮 がお届けしました。