config: restricted-ssh
最后更新于
最后更新于
假设,你的安全组织不允许公网开放的SSH端口。你的安全团队希望你检测任何开放的SSH端口,并且尽快关闭。
为了检测开放的SSH 端口,你可以创建一个AWS Config rule。
打开 AWS Config 控制台,选择 Rules,然后选择 Add rule。
在 Specify rule type,选择 Add AWS managed rule。
在 AWS Managed Rules, 检索和选择 restricted-ssh
, 然后选择 Next. 后面都选择Next直到完成。
现在,为了测试规则的效果,创建一个安全组开放SSH。
在EC2 控制台左边的菜单中,选择 安全组, 然后选择 创建安全组。
在 创建安全组, 输入以下信息,
在 安全组名称 中输入 PublicSSH
.
在 入站规则 , 选择 添加规则。类型使用 SSH
. 来源选择 Anywhere
.
安全组创建好以后,记录下安全组的ID,后面会需要使用。
几分钟后返回到 AWS Config 控制台,可以看到刚才创建的安全组不合规。
我们来看看如何通过自动化修复这个问题。
首先,创建一个 IAM policy 和 role 给自动修复工具。下面的策略包含了所需的所有的能力和权限。
在 IAM 控制台左侧菜单,选择 Policies, 然后选择 Create policy.
选择 JSON 页签,然后复制以下的内容到策略中,替换 111111111111
成你的 AWS account ID。
策略名称设置为ConfigAutoRemediation
。
在左边的菜单中,选择 Roles, 然后选择 Create role.
在 Select type of trusted entity, 选择 AWS service, 然后选择 Systems Manager.
在 Select your use case, 选择 Systems Manager.
选择 Next: Permissions.
检索 ConfigAutoRemediation
, 勾选后点击下一步
名称填写:ConfigAutoRemediation
选择 Next:Tags.
选择 Next: Review.
完成创建角色。选择查看角色的详情,拷贝role ARN留着备用。
打开 Systems Manager 控制台左边菜单栏中的 Automation 自动化, 然后选择 Execute Automation 执行自动化。
检索并选择 AWS-DisablePublicAccessForSecurityGroup
文档,然后选择 执行自动化。
执行类型中选择 Simple execution简单执行.
输入安全组ID, 对于 AutomationAssumeRole, 选择刚才创建的角色 ConfigAutoRemediation, 然后选择 Execute.
查看执行的结果。IPv6 和 RDP 可能会失败,但是这是OK的,因为DisableSSHFromIpV4 步骤会成功。
验证自动执行的结果,返回到 EC2 控制台,查看安全组是否没有公开的SSH规则了。
现在你有自动化的方法可以自动修复不合规的安全组,可以关联到AWS Config上,只要Config检查到不合规的资源就可以触发这个脚本自动进行修复。
AWS Config rule识别到不合规的资源,触发自动删除开放的SSH访问安全组入站规则。
打开AWS Config 控制台的左边菜单,选择 Rules, 然后选择 restricted-ssh。
从 Actions, 选择 Manage remediation.
在 Edit: Remediation Action, 选择 Automatic Remediation, 然后选择 AWS-DisablePublicAccessForSecurityGroup
在 Parameters, 选择 GroupID 作为 资源 ID 参数。 这会将已更改的安全组映射到自动化文档中的 GroupID 参数。
对于 AutomationAssumeRole 参数,使用 ConfigAutoRemediation 角色的ARN。
你可以将 IpAddressToBlock 参数留空。
选择 Save changes.
测试效果可以将之前的安全组再添加一次可以从任意IP访问SSH端口的入站规则,几分钟后,查看入站规则是否被删除了。
参考资料
[blogs]Implement AWS Config rule remediation with Systems Manager Change Manager