この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。
自社システムのコンプライアンス管理はどのように行っていますでしょうか?
今回は AWS リソースのコンプライアンス管理に役立つ Conformance Packs (適合パック) を紹介します。
Conformance Packs とは
日本語訳は適合パックですが、本エントリでは Conformance Packs を使います。適宜読み替えて頂ければと思います。
AWS Config ルールによるリソースの評価と修復アクションの集合体です。
社内コンプライアンスチェックと遵守の強制に活用することが可能です。
このような使い方を想定しています。
- コンプライアンスに合致するテンプレートを自身の環境へデプロイ
- 定期的に結果をレビュー
- レビューで修正すべき事項が発見されたら修正
- ルールが自社に合わない場合はルールを調整
- 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) で何ができるのか分からなかったので絵を描いて理解してみた
以上、吉井 亮 がお届けしました。