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

问题

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

1.创建EC2

搜索找到EC2服务,如下图:
EC2服务
点击“启动实例”,开始EC2实例创建,如下图:
EC2主页

1.1选择镜像

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

镜像选择

1.2创建密钥对

点击“创建新密钥对”,如下图:
创建新密钥对
输入密钥对名称,为dev,如下图:
密钥对

1.3创建安全组

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

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

2.配置队列管理器

左上角,搜索SSM,找到System Manager,如下图:
SSM服务
选择队列管理器,如下图:

队列管理器
选择“配置默认主机管理”,如下图:

配置默认主机管理
启用EC2主机托管到SM管理,如下图:
主机托管到SM
这个创建的权限策略,可以在各个环境共用。点击“配置”,如下图:
fleet manager托管主页
等待一段时间,可能时间比较长,就会出现之前创建的EC2实例,如下图:

被托管的EC2实例
注意,这里使用了一个AWSSystemsManagerDefaultEC2InstanceManagementRole角色,还需要在这个角色基础上面添加AmazonEC2RoleforSSM权限策略,如下图操作:
添加AmazonEC2RoleforSSM权限策略
添加权限策略
最终所有权限策略,如下图:
所有权限策略

3.配置SSM

3.1创建KMS密钥

搜索KMS,找到该服务,如下图:
KMS搜索
点击“创建密钥”,如下图:
KMS创建密钥
这里我选择对称加密,如下图:
对称加密
设置别名,如下图:
别名
设置密钥管理员,如下图:
密钥管理设置
设置使用人员,如下图:
使用人
审计一下kms,如下图:
KMS审计
点击“完成”,进行密钥创建,成功后如下图:
KMS完成
接下来需要调整KMS密钥使用权限策略,添加只能是指定日志组使用,如下图:
KMS密钥
点击“切换到策略视图”,如下图:
切换到策略视图
点击“编辑”,如下图:
编辑KMS权限策略
添加只能是指定的日志组才能使用这个KMS密钥,完整的密钥策略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,找到该服务,如下图:
cloudwatch主页
点击“创建日志组”,如下图:
日志组
输入日志组名称,然后点击创建即可,如下图:
创建日志组关键步骤
注意,这里需要使用到上一步创建到KMS密钥,进行日志组创建。

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

3.2配置SSM

回到Systems Manager主页,找到会话管理器,点击“配置首选项”,如下图:
Systems Manager主页
这里设置会话管理器的日志通过CloudWatch,写入到/aws/ssm/session日志组中,如下图:
SSMr日志写入

4.配置本地AWS设置

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

[profile my]
region = us-east-1
output = json

5.配置本地AWS访问Key

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

IAM创建访问密钥
点击下一步,如下图:
下一步创建访问密钥
点击“创建访问密钥”,如下图:
创建访问密钥
点击下载.csv文件,保存自己的访问密钥配置文件,完成访问密钥创建。如下图:
访问密钥文件下载
打开~/.aws/credentials文件,将上述得到的访问密钥以如下方式加入,具体如下:
[my]
aws_access_key_id = xxxx
aws_secret_access_key = xxxxx

6. 测试连接EC2

如下命令:

export AWS_PROFILE=my
aws ssm start-session --target i-xxxx

如下图,表示使用AWS CLI登录EC2成功:
awscli登录成功
接下来配置,SSH配置文件,打开~/.ssh/config文件,添加如下内容:

# 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登录,具体命令如下:

chmod 400 "dev.pem"
ssh -i "dev.pem" ec2-user@i-xxxx

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

总结

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

参考

  • 使用 AWS Key Management Service 对 CloudWatch Logs 中的日志数据进行加密
  • 满足 Session Manager 先决条件
  • AWS SSM中切换AWS不同的profile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/318037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 配置国内镜像源加速

1. 国内镜像源总览 名称路径中国官方镜像https://registry.docker-cn.com网易163镜像http://hub-mirror.c.163.com中科大镜像https://docker.mirrors.ustc.edu.cn阿里云镜像https://[xxx].mirror.aliyuncs.com 2. 阿里云镜像源 地址:https://cr.console.aliyun.c…

【开源】基于JAVA+Vue+SpringBoot的校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

PLSQL启动报错:Initialization error,不能初始化

出现场景:我这里原来有个旧版的PLSQL,想用新版的又装了个新版,启动的时候报错 解决办法 1.核对程序位数 第一个提示明显看到是和程序位数相关的,不管是32位还是64位要做到向匹配 2.设置oci.dll 第二个提示可以看到是和oci.dll…

jenkins环境搭建

jenkins环境搭建 1.环境说明2.环境准备1.jdk安装2.安装Git3.安装sshpass4.安装Maven 3.安装Jenkins(war包方式安装)1.安装2.镜像加速 4.官网提供的yum方式安装5.访问 1.环境说明 keyvalue环境centos7jdk版本11git2.43.0maven3.9.6jenkins最新版本http://mirrors.jenkins-ci.or…

(收藏)数据治理:一文讲透数据安全

数据治理:一文讲透数据安全 数据安全是数据治理的核心内容之一,随着数据治理的深入,我不断的碰到数据安全中的金发姑娘问题(指安全和效率的平衡)。 DAMA说,降低风险和促进业务增长是数据安全活动的主要…

【从零开始学习Java重要集合】深入解读ThreadLocal类

目录 前言: ThreadLocal: ThreadLocal的内部结构: ThreadLocal的常用方法: 1.set方法: 2.get方法: 3.setInitialValue方法 remove方法(): ThreadLocalMap&…

第十二章 Java内存模型与线程(一)

文章目录 12.3 Java内存模型12.3.1 主内存与工作内存12.3.2 内存间交互操作小结12.3.3 对于volatile型变量的特殊规则12.3.5 原子性、可见性与有序性12.3.6 先行发生原则 12.3 Java内存模型 12.3.1 主内存与工作内存 1.Java 内存模型规定了所有的变量都存储在主内存&#xff…

Java反转单链表

/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ //核心思想,利用cur和Curnex…

驱动树莓派直流电机(二)——python

一、安装spyder 我喜欢用spyder编写python 有两种方法安装spyder,第一种(版本更新),但是我更细化第二种,简单 方法一:在ubuntu PC端输入如下代码 wait~~~~~~~~~~~ 安装的慢就用下面这个代码 或者设置切…

脱离于ASP.NET 和Visual Studio编辑Razor脚本

Razor Pad是一个编辑Razor脚本的工具,脱离于ASP.NET 和Visual Studio。 github地址:https://github.com/RazorPad/RazorPad 如果在编译源码时出现:签名时出错: 未能对 bin\Debug\app.publish\RazorPad.exe 签名。SignTool Error: No certifi…

JFinal学生信息管理系统

JFinal学生信息管理系统 项目地址:mendianyu/StudentManage: JFinal学生信息管理系统 (github.com) 环境介绍: IDE:IDEA 2021.2.3 jdk:1.8 maven:3.6.3 项目介绍:JFinal框架实现的学生信息管理系统,完成简单的学生信…

一文解析低代码平台

一、低代码概念 低代码开发平台是一种无需编码或者只需要少量代码即可快速生成应用程序的开发平台,通过可视化进行应用程序开发的方法,让不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程…

【QT】多层QTreeWidget与QStackedWidget的关联操作

通过点击多层QTreeWidget来控制QStackedWidget中的page页面切换 treeWidget设计 treeWidget设计&#xff1a; // treeWidget设计ui->treeWidget->clear();ui->treeWidget->setColumnCount(1);//第一层QStringList l;l<<"管理系统";QTreeWid…

JavaScript基础(26)_dom增删改练习

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>DOM增删改练习</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>table {borde…

分布式事务:构建无障碍的云原生应用的完美解决方案

目录 一、前言 二、分布式事务概述 2.1 什么是分布式事务 2.2 分布式事务的挑战 2.3 分布式事务的分类 三、传统解决方案分析 3.1 两阶段提交协议&#xff08;2PC&#xff09; 3.2 三阶段提交协议&#xff08;3PC&#xff09; 3.3 补偿事务 3.4 其他传统解决方案 四…

Qt/QML编程学习之心得:slider(34)

滑条slider&#xff0c;有时也成为进度条progressbar&#xff0c;在GUI界面中也是经常用到的。 import QtQuick 2.9 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.2ApplicationWindow {id:rootvisible: truewidth: 1920height: 720//title: qsTr("Hello World&q…

慕尼黑工业大学最新提出!单目实时密集建图的混合隐式场方法

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 我们提出了一种新颖的方法&#xff0c;它将基于深度学习的密集SLAM与神经隐式场相结合&#xff0c;实时生成密集地图&#xff0c;而无需像以前的方法那样依赖RGB-…

Vue的api接口封装以及使用说明、模块说明

在Api目录下面建立user.js&#xff0c;如果以后有不同的接口请求地址都可以单独创建不同的&#xff0c;目的是方便维护&#xff01; import request from /utils/request 这个代码是引入之前封装好的 request.js 文件&#xff0c;具体可以参考上门一篇文档 Vue的request.js模…

基于springboot生鲜交易系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项…

Seata TC端协调全局事务

1、Seata server注册器 //来自RM分支事务注册 super.registerProcessor(MessageType.TYPE_BRANCH_REGISTER, onRequestProcessor, messageExecutor); //开启全局事务 super.registerProcessor(MessageType.TYPE_GLOBAL_BEGIN, onRequestProcessor, messageExecutor); //提交全…