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不能写日志问题。

参考

相关推荐
迎風吹頭髮8 分钟前
Linux服务器编程实践27-详解TCP状态转移:从LISTEN到TIME_WAIT的完整路径
linux·服务器·网络
G31135422739 分钟前
云服务器怎么设置虚拟IP,云服务器能起虚拟ip吗
运维·服务器·tcp/ip
ZhengEnCi26 分钟前
FastAPI 项目结构完全指南-从零基础到企业级应用的 Python Web 开发利器
服务器·python·web3
Jtti1 小时前
SSH连接服务器超时?可能原因与解决方案
服务器·网络·php
Ching·2 小时前
linux系统编程(十③)RK3568 socket之 TCP 服务器的实现【更新客户端断开重连依旧可以收发】
linux·服务器·tcp/ip·rk3568
huangyuchi.2 小时前
【Linux网络】初识网络,网络的基础概念
运维·服务器·ip地址·tcp/ip协议·linux网络·mac地址·网络传输流程
deng-c-f2 小时前
Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例
linux·服务器·网络·c++·网络编程·kcp
wanhengidc3 小时前
如何使用云手机进行游戏挂机?
运维·服务器·游戏·智能手机·云计算
汪汪大队u3 小时前
为什么 filter-policy 仅对 ASBR 的出方向生效,且即使在该生效场景下,被过滤的路由在协议内部(如协议数据库)依然存在,没有被彻底移除?
服务器·前端·网络
kyle~3 小时前
设计模式---观察者模式
服务器·观察者模式·设计模式