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 小时前
Grafana——如何迁移Grafana到一台新服务器
运维·服务器·grafana
wangjun51598 小时前
linux redis ipv6、ipv4 只接收本地访问、接收本地和远程访问
linux·运维·服务器
x66ccff8 小时前
【nvidia】NCCL禁用P2P后果权衡
服务器·网络协议·p2p
信阳农夫8 小时前
linux中yum是干啥的?
linux·运维·服务器
黑客老李9 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
java·运维·服务器·前端·xss
huosenbulusi9 小时前
Linux多版本管理工具介绍
linux·运维·服务器
猪萌萌9 小时前
关于如何利用群晖Docker搭建Project Zomboid(僵尸毁灭工程)私人服务器-保姆级教程
服务器·docker·容器·僵尸世界大战·游戏服务器搭建
G皮T9 小时前
【弹性计算】IaaS 和 PaaS 类计算产品
阿里云·云计算·paas·iaas·云服务器·弹性服务器·弹性计算
vdigital10 小时前
本地主机(localhost)11434端口 HTTP 连接10061原因及解决
java·服务器·数据库
147SEO10 小时前
解决DeepSeek服务器繁忙的有效方法
运维·服务器