亚马逊AWS官方博客

基于 AWS Config 实现持续合规:以多重身份验证的持续合规配置为例

随着近年来企业对网络安全的重视,越来越多的企业已建立起了安全配置基线,并通过定期安全合规检查来确保云环境的配置合规。然而,传统模式下安全合规工作往往以基于检查表格的人工方式为主,存在抽样受限、效率不高等不足。

持续合规以合规即代码(Compliance-as-code)为思路。持续合规通过将合规要求转换为安全配置、将合规检测和修正响应转换为相应自动化检测和修正响应代码的方式,可以大幅提高安全合规工作的质量和效率。

多重身份验证(MFA)是一项常见的安全合规控制要求。本文将以多重身份验证的持续合规配置为例,向您介绍基于AWS云服务实现持续合规的思路和方法。

整体思路

持续合规的整体思路包括:(1)确立指导性的控制目标(2)配置预防性控制措施(3)建立代码化的检测性控制(4)建立对偏离情况的响应性控制。针对本文所介绍的多重身份验证场景,整体思路如下:

  • 指导性控制:用户敏感操作应通过多重身份验证
  • 预防性控制:(1)为用户启用MFA设备;(2)配置IAM策略,保证用户敏感操作通过多重身份验证
  • 检测性控制:自动发现未对敏感操作启用MFA(未配置相关IAM策略)的用户
  • 响应性控制:对未对敏感操作启用MFA(未配置相关IAM策略)的用户强制配置相关IAM策略

实施方案

(一)预防性控制的配置

1、为用户启用MFA设备

您首先需要为用户启用MFA设备。目前AWS中国区域支持虚拟MFA设备,您可以参阅相关文档完成配置:https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html

2、配置IAM策略

您还需要配置IAM策略,以要求用户在通过AWS多重身份验证进行身份验证后,才允许执行特定的敏感操作。这里以对当前账户中的 API 操作访问实施 MFA 保护的场景为例,一种配置方法如下:

(1)进入AWS IAM控制台 (https://console.amazonaws.cn/iam/),点击Policies,选择 Create policy。

(2)点击JSON标签栏,复制以下内容

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "MFA0",
            "Effect": "Deny",
            "Action": [
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": false
                }
            }
        }
    ]
}

说明:这里将ec2:StopInstances、ec2:TerminateInstances 定义为敏感操作,若用户未使用 MFA 进行身份验证,则将拒绝执行这些操作。您可以补充其它敏感操作。

(3)为IAM策略命名后保存

(4) 将该IAM策略附加到用户或用户所在的组,使策略对用户生效(作为最佳实践,建议您将策略附加到组,然后使用户成为相应的组的成员)

注:关于MFA保护的其它配置方法可参见:https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.htmlhttps://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-multifactorauthpresent

3、配置效果

在完成上述配置后,用户需要通过 AWS 多重身份验证进行身份验证,然后才可以执行特定的敏感操作。

(二)检测性控制的配置

检测性控制的目的是发现用户偏离合规配置的情况。本文将使用AWS Config服务,通过检测目标用户是否已配置对敏感操作启用MFA的策略的方式,检测配置合规情况。主要配置步骤如下:

1、为自定义 Config 规则创建 AWS Lambda 函数

(1)进入AWS Lambda 控制台 (https://console.amazonaws.cn/lambda/),选择 Create function 。

(2)Create function 页面,选择Author from scratch,主要配置如下:

  • 在Function Name输入函数名称
  • 在Runtime栏选择Python 3.6
  • 在Choose or create an execution role选择Create a new role from AWS policy templates
  • 在Role name输入名称
  • 在Policy templates选择AWS Config Rules permission,
  • 完成上述配置后,点击Create Function

(3)在Function Configuration页面,在Function code部分粘贴此处的代码(https://github.com/awslabs/aws-config-rules/blob/master/python/IAM_POLICY_REQUIRED/IAM_POLICY_REQUIRED.py ),完成后保存。

(4)为Function增加IAM:ListAttachedGroupPolicies权限:在Function Permission页面,点击Execution role下方您刚才设置的Role Name,进入Role Summary页面;在Role Summary页面的Permissions policies部分选择一条类型为Managed policy的策略(名称类似AWSLambdaBasicExecutionRole-XXXXX),以JSON方式编辑该策略,在Statement代码块中添加以下权限:

 

        {
            "Effect": "Allow",
            "Action": [
                "IAM:ListAttachedGroupPolicies"
            ],
            "Resource": [
                "*"
            ]
        }	

(5)完成后保存。

2、配置AWS Config

(1)进入AWS Config控制台( https://console.amazonaws.cn/config/ ),确认AWS Config已启用(启用方法参见:https://docs.aws.amazon.com/zh_cn/config/latest/developerguide/gs-console.html)。

(2)在Rules 页面,选择 Add rule进入 Add rule 页面,然后点击 Add custom rule,完成以下主要配置:

  • Name (名称):输入规则名称。
  • AWS Lambda function ARN :填写在前一步中所创建的 AWS Lambda函数对应的ARN值。
  • Trigger type:选择 Configuration changes。
  • Scope of changes:选择 Resources。
  • Resources:选择 IAM: Users。
  • Rule parameters (规则参数):
    • 在第一个Key 输入 policyArns,在对应的 Value中输入 在预防性控制中所创建的对敏感操作启用MFA的IAM策略对应的ARN值。
    • (可选)若您需要将部分用户排除在检查范围内,您可以再增加一个名为“exceptionList”的 Key,并在对应的 Value输入 users:[userName1,userName2](userName1、userName2为需要排除的用户名;建议您采取其它措施对这些账号的敏感操作行为进行控制)。
  • 完成上述配置后点击 Save。

3、配置效果

在完成上述配置后, AWS Config在检测到用户配置发生更改时,会对用户是否具有对敏感操作启用MFA的策略进行检查,从而实现对配置合规情况的持续检测。

(三)响应性控制的配置

响应性控制是对安全配置基线的偏离情况进行响应。本文将演示如何结合AWS Config和AWS Systems Manager 自动化文档,对安全配置基线的偏离情况进行修正。

1、配置AWS Systems Manager

(1)进入AWS Systems Manager控制台(https://console.amazonaws.cn/systems-manager/ ),点击左侧导航栏Documents,在Documents页面点击 Create Automation。

(2)在 Create Automation页面,主要配置如下:

  • Name:输入名称
  • 以Editor方式进行配置,在Editor处输入以下代码:
schemaVersion: '0.3'
assumeRole: '{{AutomationAssumeRole}}'
parameters:
  UserID:
    type: String
    description: (Required) The Resource ID from AWS Config.
  PolicyArn:
    type: String
    description: (Required) The ARN of the policy attach to the user.
  AutomationAssumeRole:
    type: String
    description: (Required) The ARN of the role that allows Automation to perform the actions on your behalf.
mainSteps:
  - name: GetUserName
    action: 'aws:executeAwsApi'
    outputs:
      - Name: UserName
        Selector: '$.resourceIdentifiers[0].resourceName'
        Type: String
    inputs:
      Service: config
      Api: ListDiscoveredResources
      resourceType: 'AWS::IAM::User'
      resourceIds:
        - '{{ UserID }}'
  - name: AttachIAMPolicy
    action: 'aws:executeAwsApi'
    inputs:
      Service: iam
      Api: AttachUserPolicy
      PolicyArn: '{{ PolicyArn }}'
      UserName: '{{ GetUserName.UserName }}'

(3)点击Create automation

2、配置Systems Manager Automation服务角色

(1)配置策略:进入AWS IAM控制台,点击Policies,选择 Create policy。点击JSON标签栏,复制以下内容,并为策略命名后保存。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMIAMAutomation0",
            "Effect": "Allow",
            "Action": [
                "config:ListDiscoveredResources",
                "iam:AttachUserPolicy"
            ],
            "Resource": "*"
        }
    ]
}

(2)配置角色:在AWS IAM控制台,点击Roles,选择 Create role。选择AWS service下的Systems Manager后点击Next: Permissions,为角色配置在前一步中创建的策略。在最后一步为角色命名后保存。

3、配置AWS Config

(1)进入AWS Config控制台,点击左侧导航栏的Rules进入Rule页面,选择在检测性控制部份建立的AWS Config规则。

(2)在规则页面,点击右上角Edit。

(3)在 Choose remediation action部分,完成以下主要配置:

  • Remediation action:选择在前一步骤中建立的AWS Systems Manager 自动化文档名称
  • Auto remediation:若您希望自动修正,选择Yes;若希望以点击修复按钮的形式进行修正,则选择No(建议在启用自动修正前先进行测试)。
  • Resource ID parameter:选择UserID
  • Parameters:
    • AutomationAssumeRole:输入在前一步中为AWS Systems Manager 自动化文档所创建的角色对应的ARN值。
    • PolicyArn:输入在预防性控制中所创建的对敏感操作启用MFA的IAM策略对应的ARN值。

(4)点击保存。

4、配置效果

在完成上述配置后,当AWS Config发现用户未配置对敏感操作启用MFA的策略时,若您配置了自动修正,AWS Config将自动为用户配置该策略,从而实现对配置不合规项的自动修正响应。

总结

本文以多重身份验证为例,介绍了基于AWS云服务实现持续合规的思路和方法。您可以将本文所介绍的思路和方法应用到其它场景,帮助您提高合规工作的效率和质量,实现合规工作向合规即代码的进化。

 

本篇作者

胡妙超

亚马逊AWS专业服务团队云安全咨询顾问,在网络与信息安全领域拥有丰富的管理、技术和运营经验,负责云安全咨询、架构设计和技术实施。