VPCフローログ
CIS AWS Foundations Benchmark というセキュリティガイドラインが公開されており、このガイドラインは、AWSアカウントをセキュアに保つために必要なAWSのセキュリティ設定を集めたベストプラクティス集として活用できる。
この CIS AWS Foundations Benchmark
では、VPCフローログについて以下のように定められている。
- 2.9 すべての VPC で VPC フローログ記録が有効になっていることを確認します
この CIS AWS Foundations Benchmark
に 準拠していないVPCが存在した場合 に SSM Automation
を用いて VPCフローログを自動作成 するために以下の設定を行う。
- 上記のポリシーに準拠しているか
AWS Config
を用いて定期的にチェックを行う - 非準拠であった場合には、
AWS Config
がSSM Automation
を自動起動する SSM Automation
がVPCフローログを自動作成する
1. AWS Configの有効化
AWS Config
を有効化する手順については、こちら。
2. AWS Configを用いた定期チェック
VPCフローログの存在確認には、あらかじめAWS Config
に用意されている vpc-flow-logs-enabled
マネージドルールを使用する。VPCフローログが設定されていない場合、このVPCはルールに 非準拠(NON_COMPLIANT) であると判定される。
なお、この Config Rule
を設定する前に ConfigurationRecorder
を生成しておく必要がある。そこで、DependsOn
属性に ConfigurationRecorder
リソースを設定している。
Resources: ConfigVpcFlowLogsEnabled: DependsOn: - ConfigConfigurationRecorder Type: 'AWS::Config::ConfigRule' Properties: ConfigRuleName: vpc-flow-logs-enabled Description: Amazon Virtual Private Cloud フローログが見つかり、Amazon VPC に対して有効になっているかどうかを確認します。 Source: Owner: AWS SourceIdentifier: VPC_FLOW_LOGS_ENABLED
3. SSM Automation を用いた自動修復
Systems Manager Automation
は、AWS Config
で 直接指定できる、現時点で唯一の自動修復手段 となっている。そこで、VPCフローログ を生成する Systems Manager Automation
ドキュメント を作成し、AWS Config
との紐付けを行う。
下のSystems Manager Automation
ドキュメントは、EC2
の CreateFlowLogs
を実行して、IAM パスワードポリシーの設定を自動修復する。
Resources: SSMAutomationCreateFlowLogs: Type: 'AWS::SSM::Document' Properties: Content: schemaVersion: "0.3" assumeRole: "{{ AutomationAssumeRole }}" description: Create VPC flow logs. mainSteps: - name: CreateLogGroup action: aws:executeAwsApi inputs: Service: cloudwatch Api: CreateLogGroup logGroupName: "/aws/vpc/{{ ResourceId }}" - name: PutRetentionPolicy action: aws:executeAwsApi inputs: Service: cloudwatch Api: PutRetentionPolicy logGroupName: "/aws/vpc/{{ ResourceId }}" retentionInDays: 60 - name: CreateFlowLogs action: aws:executeAwsApi inputs: Service: ec2 Api: CreateFlowLogs DeliverLogsPermissionArn: "{{ DeliverLogsPermissionArn }}" LogDestinationType: cloud-watch-logs LogGroupName: "/aws/vpc/{{ ResourceId }}" ResourceId.N: "{{ ResourceId }}" ResourceType: VPC TrafficType: ALL parameters: AutomationAssumeRole: type: String description: Automation Assume Role Arn DeliverLogsPermissionArn: type: String description: Deliver Logs Permission Arn ResourceId: type: String description: Resource ID DocumentType: Automation Tags: - Key: !Ref TagKey Value: !Ref TagValue
4. AWS Config と SSM Automation の紐付け
Systems Manager Automation
ドキュメントは、上述の通り EC2
の CreateFlowLogs
などを実行する必要があるため、このAWS API アクションを Systems Manager Automation
から呼び出すことを可能とする IAM Role を作成する。
また、VPCからCloudWatch Logsにフローログを書き込むことのできる権限を持つIAM Roleも別途作成しておく。
Resources: IAMRoleForSSM: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: ssm.amazonaws.com Action: 'sts:AssumeRole' Description: A role required for SSM to access IAM. Policies: - PolicyName: !Sub '${PrefixOfLogicalName}-AWSSystemManagerIAMRole-${AWS::Region}' PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:PutRetentionPolicy' - 'ec2:CreateFlowLogs' Resource: - '*' RoleName: !Sub '${AWS::StackName}-SSM-${AWS::Region}' IAMRoleForVPCFlowLog: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: vpc-flow-logs.amazonaws.com Action: 'sts:AssumeRole' Description: A role required for VPC flow logs to access CloudWatch Logs. Policies: - PolicyName: !Sub '${AWS::StackName}-AWSVPCFlowLogCloudWatchLogsPolicy-${AWS::Region}' PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:PutLogEvents' - 'logs:DescribeLogGroups' - 'logs:DescribeLogStreams' Resource: '*' RoleName: !Sub '${AWS::StackName}-AWSVPCFlowLogRole-${AWS::Region}'
このIAM RoleのARNは、AWS Config
から Systems Manager Automation
へ渡されるパラメータの1つとして規定される。AWS::Config::RemediationConfiguration
は、非準拠(NON_COMPLIANT)と判定された場合の自動修復方法を規定し、Config Rule
と Systems Manager Automation
との紐付けや、受け渡されるパラメータの規定を行う。自動修復を行う場合は、AutomationAssumeRole, MaximumAutomaticAttempts, RetryAttemptSeconds の各パラメータの入力が必須である。
Resources: ConfigVpcFlowLogsEnabledRemediationConfiguration: Condition: CreateRemediationResources Type: 'AWS::Config::RemediationConfiguration' Properties: Automatic: true ConfigRuleName: !Ref ConfigVpcFlowLogsEnabled MaximumAutomaticAttempts: 1 Parameters: AutomationAssumeRole: StaticValue: Values: - !GetAtt IAMRoleForSSM.Arn DeliverLogsPermissionArn: StaticValue: Values: - !GetAtt IAMRoleForVPCFlowLog.Arn ResourceId: ResourceValue: Value: RESOURCE_ID RetryAttemptSeconds: 30 TargetId: !Ref SSMAutomationCreateFlowLogs TargetType: SSM_DOCUMENT
以上で、CIS AWS Foundations Benchmark
に準拠していないVPCに対して、VPCフローログを自動生成することができた。