セキュリティグループの自動修復
CIS AWS Foundations Benchmark というセキュリティガイドラインが公開されており、このガイドラインは、AWSアカウントをセキュアに保つために必要なAWSのセキュリティ設定を集めたベストプラクティス集として活用できる。
この CIS AWS Foundations Benchmark
では、EC2/VPCのセキュリティグループについて、以下の設定とすることが奨励されている。
- 4.1 どのセキュリティグループでも 0.0.0.0/0 からポート 22 への入力を許可しないようにします
- 4.2 どのセキュリティグループでも 0.0.0.0/0 からポート 3389 への入力を許可しないようにします
この CIS AWS Foundations Benchmark
に 準拠していないセキュリティグループ を SSM Automation
を用いて 自動修復 するために以下の設定を行う。
- 上記のポリシーに準拠しているか
AWS Config
を用いて定期的にチェックを行う - 非準拠であった場合には、
AWS Config
がSSM Automation
を自動起動する SSM Automation
が奨励されたセキュリティグループ設定となるように設定を自動修復する
1. AWS Configの有効化
AWS Config
を有効化する手順については、こちら。
2. AWS Configを用いた定期チェック
セキュリティグループの設定のチェックには、あらかじめAWS Config
に用意されている vpc-default-security-group-closed
マネージドルールを使用する。セキュリティグループがこの条件を満たしていない場合、このリソースはルールに 非準拠(NON_COMPLIANT) であると判定される。
なお、この Config Rule
を設定する前に ConfigurationRecorder
を生成しておく必要がある。そこで、DependsOn
属性に ConfigurationRecorder
リソースを設定している。
Resources:
ConfigSVpcSgOpenOnlyToAuthorizedPorts:
DependsOn:
- ConfigConfigurationRecorder
Type: 'AWS::Config::ConfigRule'
Properties:
ConfigRuleName: vpc-sg-open-only-to-authorized-ports
Description: いずれかの 0.0.0.0/0 Amazon Virtual Private Cloud (Amazon VPC) を持つセキュリティグループで、特定のインバウンド TCP または UDP トラフィックのみが許可されるかどうかを確認します。
InputParameters:
authorizedTcpPorts: 1-21,23-3388,3390-65535
authorizedUdpPorts: 1-21,23-3388,3390-65535
Source:
Owner: AWS
SourceIdentifier: VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS
3. SSM Automation を用いた自動修復
Systems Manager Automation
は、AWS Config
で 直接指定できる、現時点で唯一の自動修復手段 となっている。そこで、セキュリティグループ を修復する Systems Manager Automation
ドキュメント と AWS Config
との紐付けを行う。
修復には、あらかじめ用意されている AWS-DisablePublicAccessForSecurityGroup
ドキュメントを使用する。このドキュメントは、すべての IP アドレスに対して開かれているデフォルトの SSH および RDP ポートを無効にする。
Resources:
ConfigVpcSgOpenOnlyToAuthorizedPortsRemediationConfiguration:
Condition: CreateRemediationResources
Type: 'AWS::Config::RemediationConfiguration'
Properties:
# NOTE: AutomationAssumeRole, MaximumAutomaticAttempts and RetryAttemptSeconds are Required if Automatic is true.
Automatic: true
ConfigRuleName: !Ref ConfigSVpcSgOpenOnlyToAuthorizedPorts
MaximumAutomaticAttempts: 1
Parameters:
AutomationAssumeRole:
StaticValue:
Values:
- !GetAtt IAMRoleForSSM.Arn
GroupId:
ResourceValue:
Value: RESOURCE_ID
RetryAttemptSeconds: 30
TargetId: AWS-DisablePublicAccessForSecurityGroup
TargetType: SSM_DOCUMENT
以上で、すべての IP アドレスに対して開かれているデフォルトの SSH および RDP ポートを無効にすることができた。