简介
出于安全考虑,生产环境中如果服务器是用密码登录的,我们一般要求定期更新,比如一天一改。
本文介绍如何利用 AWS SSM(AWS system manager)对 windows EC2 的管理员密码进行自动更新。
首先,我们会创建一个 KMS Key,然后利用 SSM 定期对 windows EC2 的本地管理员密码进行更改,
并利用 KMS Key 加密,最后会把密码保存在 Parameter Store 中。
在使用时,有权限的用户可以从 Parameter Store 中查看最新密码。
注意:本文用到了 SSM Document “AWSSupport-RunEC2RescueForWindowsTool”,这个 Document 目前只在 Global 区存在,中国区还没有
目录
- 环境(配置)
- 实战步骤
- 创建 EC2 Role
- 创建 KMS Key
- 更改 win EC2 profile
- 创建 maintenance window
- 检查结果
- 查看当前密码
- 总结
- 后记
环境(配置)
- AWS Global 帐号,可在官网申请,一年内使用指定资源免费
实战步骤
1. 创建 EC2 Role
我们首先创建一个 Role,做为 win EC2 的 profile。
这个 Role 为 EC2 提供必要的权限,包括启用 SSM,写入 parameter store 和使用 KMS Key。
在 AWS 中控台,选择“IAM”进入 IAM 中控台,在左边列表中选择“Roles”,然后点击“Create role”
trusted entity 选择“Amazon Web Services service”,
搜索 policy “AmazonSSMManagedInstanceCore”并勾选,点击“Next: Tags”
添加 Tags,可选项,点击“Next:Review”
添加 Role 名称“tsWinEC2PwdRotationRole”,点击“Create role”
Role 创建好之后,我们搜索“tsWinEC2PwdRotationRole”,并点击 Role 名称,进入这个 Role
下面我们给 Role 加一个 inline policy,赋予 Role 写入 parameterstore 的权限(inline policy 的细节请参考《一文搞懂 AWS IAM 权限 基础篇下 实战》一文)
点击“Add inline policy”
选择 JSON,添加以下内容
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:PutParameter",
"Resource": "arn:aws:ssm:YOUR_REGION:YOUR_ACCOUNT_NUMBER:parameter/EC2Rescue/Passwords/*"
}
]
}
说明:注意替换地区和 Account,等以后中国区也有这个功能时,需要把aws替换aws-cn
点击“Review policy”
添加名称“ec2-write-to-Parameter-Store”后,点击“Create policy”
现在,Role “tsWinEC2PwdRotationRole”中有一个 AWS managed policy 和一个 inline policy,分别提供启用 SSM 和写入 parameter store 的权限
2. 创建 KMS Key
KMS(Key Management Service)AWS 提供的创建 CMK(customer master key)的服务。
KMS 与 AWS 其它服务深度集成,我们可以利用 KMS Key 给数据加密。
比如,我们可以利用 KMS 创建的 Key 为 EC2 的 volume 加密。
本文中,我们利用 KMS 创建的 Key 给 windows EC2 的本地管理员帐号加密。
下面我们利用图形界面,创建一个 Key
在 AWS 中控台,选择“Key Management Service”服务,进入 KMS 界面,在左边列表选择“Customer managed keys”,然后点击“Create key”
Key type 选择“Symmetric”,然后点击“Asymmetric”
可以给 Key 起一个别名“tstestWinEC2PwdKey”,方便记忆。Description 和 Tags 是可选项,点击“Next”
选择一个或多个 Key 的管理员,然后点击“Next”
选择可以使用 Key 的 User 或 Role
我们先利用搜索框,搜索用户“tstest”并勾选
然后再搜索我们在上面创建的 Role “tsWinEC2PwdRotationRole”并勾选,然后点击“Next”
拉到最下面,点击“Finish”,创建 Key
创建成功
3. 更改 win EC2 profile(Role)
在 EC2 控制台,选择要定期更改密码的 windows EC2,点击“Actions”,选择“Security”,然后点击“Modify IAM role”
搜索我们在上面创建的 Role “tsWinEC2PwdRotationRole”,然后点击“Save”
说明:如果不更换 EC2 Role,我们也可以在原来 windows EC2 的 Role 中直接添加上面的需要的 policy
~~休息一下~~
本次推荐大刘的另一长篇力作“球状闪电”。雷电交加的夜晚,原本温馨的家庭被突然打破。无法解释的灵异现象,让主人公毅然踏上寻找真相的艰程。
4. 创建 maintenance window
下面我们在 SSM 中创建 maintenance window,并设置 task 来更新密码。
在 AWS 中控台选择“Systems Manager”,进入 SSM 界面,在左边列表中选择“Maintenance Windows”
点击“Create maintenance window”
设置下列内容,然后点击“Create maintenance window”
- 给 maintenance window 一个名称“tsWinEc2PwdRotation”
- 设置定时配置,这里设定了 1 小时一次
- Duration 是指全天都运行,即每小时都运行一次任务,设为 24
点击创建好的 maintenance window,进入详细配置页面
配置 Targets
下面我们为 maintenance window 添加 Targets
选择“Targets”,点击“Register target”
拉到最下面的 Targets,选择“Choose instances manually”,然后勾选我们的 windows ec2,点击“Register target”
说明:
- 这里除了直接选择 EC2,还可以通过 Tags 或者 resource group 来选择 EC2,这适用于存在大数量 EC2 的情况
- 如果在 Instances 列表中找不到需要的 EC2,则说明 SSM 无法配置 EC2,这时可能需要检查以下事项
- EC2 需要能连接到外网,或者 EC2 所在的 VPC 存在到 SSM 的 VPC endpoint
- EC2 Profile(IAM role)需要设置使用 SSM 的权限
注册 target 成功
配置 Tasks
SSM Document 定义了 SSM 服务可以在 EC2 上运行的操作,Document 使用 JSON 或者 YAML 的格式,我们可以其中定义每一步动作和参数。
AWS 也提供了自定义的 Document,比如下面要用到的“AWSSupport-RunEC2RescueForWindowsTool”,我们将利用这个 Document 更改管理员密码。
下面我们为 maintenance window 添加 Task(Document)
选择“Tasks”,点击“Register tasks”,选择“Register Run commandtask”
进入注册任务详细界面,以下为必添项,然后点击“Register Run command task”
- 自定义一个任务名称“AWSSupport-RunEC2RescueForWindowsTool”
- 在 Command document 部分,搜索“AWSSupport-RunEC2RescueForWindowsTool”并勾选,这个 document(AWS 提供的任务)包含了更改本地管理员密码的操作
- 在 Targets 部分,选择“Selecting registered target groups”,然后勾选我们的上面创建的 target
- Rate conrol 部分,Concurrency 控制在几个 target 上同时运行 task,可以按个数也可以按百分比;Error threshold 控制在几个 target 上运行出错就停止 task
- Parameters 部分,Command 选择“ResetAccess”,Parameters 中添加上面创建的 KMS Key 的 id
创建成功
5. 检查结果
下面的截图是另一个设置每天更新密码的 maintenance window
点击 maintenance window 的 Description,可以看到 maintenance window 概况
点击 History,可以看到每次执行的记录
6. 查看当前密码
在使用上述方法定期更新 windows EC2 本地管理员密码之后,我们就不能直接从 EC2 控制台获取密码了,我们要从 SSM parameter store 中获取
进入 SSM 中控台,选择左边列表中的“Parameter Store”,然后根据 EC2 Instance ID 选择 Parameter 点击
点击“Show”显示本地管理员密码,然后就可以用这个密码登录 EC2
总结
本文主要利用 SSM 的 Document 来定期更改 windows EC2 本地管理员密码。创建 KMS Key 的目的是用其加密密码,不让任意人都可以查看。
我们在创建 KMS Key 时,分别选择了 Key 管理员和 Key 的使用者。只有用户被选为使用者或者其 role 被选为使者时,这个用户才有权限查看密码(即有解码 Key 的权限)。
SSM maintenance window 做为一个桥梁把任务(Document)和 Target(EC2)连接起来,并在其中设置定时任务。
后记
不知道有没有读者看出来,这篇文章后面用的 Key ID 和前面截图的 Key ID 不相同。
因为我在中国区做测试截图的时候,做到最后发现中国区没有 Document “AWSSupport-RunEC2RescueForWindowsTool”。。。
好在其它部分的截图都相同,所以最后截了 Global 区的图顶上,所以出现了前后 ID 不一致的情况。
喜欢请点赞,禁止转载,转发请标明出处
关注 B 站 UP 主“我是手拉面” 观看更多视频
微信公众号“全是 AWS 干货”