AWS EC2的SSM配置(AWS云中的跳板机)

问题

开发人员需要访问AWS云中私有子网的数据库服务等,都需要通过EC2进行SSH隧道代理。这里假设本地已经有一款稳定优秀的SSH客户端工具,并且假设已经会熟练使用SSH的隧道代理。

1.创建EC2

搜索找到EC2服务,如下图:

点击"启动实例",开始EC2实例创建,如下图:

1.1选择镜像

填入名称后,选择默认的免费套餐镜像,如下图:

1.2创建密钥对

点击"创建新密钥对",如下图:

输入密钥对名称,为dev,如下图:

1.3创建安全组

设置ssh端口的安全组,方便ssh访问ec2,如下图:

这里设置IP白名单,指定这个IP白名单能够访问这个EC2,接下来,点击"启动实例"即可。下面就是,dev的EC2创建的实例,如下图:

2.配置队列管理器

左上角,搜索SSM,找到System Manager,如下图:

选择队列管理器,如下图:

选择"配置默认主机管理",如下图:

启用EC2主机托管到SM管理,如下图:

这个创建的权限策略,可以在各个环境共用。点击"配置",如下图:

等待一段时间,可能时间比较长,就会出现之前创建的EC2实例,如下图:

注意,这里使用了一个AWSSystemsManagerDefaultEC2InstanceManagementRole角色,还需要在这个角色基础上面添加AmazonEC2RoleforSSM权限策略,如下图操作:

最终所有权限策略,如下图:

3.配置SSM

3.1创建KMS密钥

搜索KMS,找到该服务,如下图:

点击"创建密钥",如下图:

这里我选择对称加密,如下图:

设置别名,如下图:

设置密钥管理员,如下图:

设置使用人员,如下图:

审计一下kms,如下图:

点击"完成",进行密钥创建,成功后如下图:

接下来需要调整KMS密钥使用权限策略,添加只能是指定日志组使用,如下图:

点击"切换到策略视图",如下图:

点击"编辑",如下图:

添加只能是指定的日志组才能使用这个KMS密钥,完整的密钥策略JSON,如下图:

json 复制代码
{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::账号ID:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::账号ID:user/zhangyalin"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt*",
                "kms:Decrypt*",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:账号ID:log-group:/aws/ssm/session"
                }
            }
        }    
    ]
}

3.2创建SSM日志组

搜索cloudwatch,找到该服务,如下图:

点击"创建日志组",如下图:

输入日志组名称,然后点击创建即可,如下图:

注意,这里需要使用到上一步创建到KMS密钥,进行日志组创建。

为ssm创建好的日志组,如下图:

3.2配置SSM

回到Systems Manager主页,找到会话管理器,点击"配置首选项",如下图:

这里设置会话管理器的日志通过CloudWatch,写入到/aws/ssm/session日志组中,如下图:

4.配置本地AWS设置

在~/.aws/config文件添加,如下:

bash 复制代码
[profile my]
region = us-east-1
output = json

5.配置本地AWS访问Key

这里假设,本地已经成功安装了AWS CLI后,需要在IAM中创建自己的访问key,如下图:

点击下一步,如下图:

点击"创建访问密钥",如下图:

点击下载.csv文件,保存自己的访问密钥配置文件,完成访问密钥创建。如下图:

打开~/.aws/credentials文件,将上述得到的访问密钥以如下方式加入,具体如下:

my

aws_access_key_id = xxxx

aws_secret_access_key = xxxxx

6. 测试连接EC2

如下命令:

bash 复制代码
export AWS_PROFILE=my
aws ssm start-session --target i-xxxx

如下图,表示使用AWS CLI登录EC2成功:

接下来配置,SSH配置文件,打开~/.ssh/config文件,添加如下内容:

bash 复制代码
# SSH over Session Manager
host i-* mi-*
	ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

配置完~/.ssh/config文件后,找到之前创建的dev.pem私钥文件,直接使用ssh进行ec2登录,具体命令如下:

bash 复制代码
chmod 400 "dev.pem"
ssh -i "dev.pem" ec2-user@i-xxxx

如下图表示使用SSH客户端工具登录EC2成功。

总结

到这里,就是dev环境SSM跳板机配置全过程,接下来,按照上述方式,依次搭建完test,uat,prod环境。第一次弄这个还是有点小复杂的,中途,还咨询了一次aws支持中心,最后,他们通过CloudTrail帮我找到了原因,并协助我解决了SSM不能写日志问题。

参考

相关推荐
女神下凡14 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾1 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
讯捷蓝达6 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
数字新视界9 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng9 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹10 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
爱莉希雅&&&1 天前
GitLab 完整学习笔记
linux·运维·服务器
陈希1231 天前
Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位
linux·服务器·网络