-
配置AWS EMR集群和堡垒主机:
• 确保AWS EMR集群和堡垒主机都在同一个VPC中,并且安全组配置允许它们之间的SSH连接。
• 在堡垒主机上安装并配置SSH服务器,确保它可以接受来自受信任客户端的连接。
-
设置SSH隧道:
• 使用SSH隧道将客户端连接到堡垒主机,然后通过堡垒主机再连接到AWS EMR集群的主节点。
• 这可以通过在SSH客户端上配置代理转发来实现,确保SSH流量通过堡垒主机进行转发。
-
限制直接访问EMR集群:
• 修改AWS EMR集群主节点的安全组规则,禁止来自非堡垒主机的直接SSH连接。
• 这样,只有经过堡垒主机中转的连接才能访问EMR集群,增加了安全性。
-
监控和日志记录:
• 在堡垒主机上启用SSH会话的监控和日志记录功能。
• 这可以帮助跟踪和审计所有通过堡垒主机进行的SSH连接,确保任何异常行为都能被及时发现和响应。
-
定期更新和维护:
• 定期更新堡垒主机和AWS EMR集群的安全补丁和配置。
• 保持软件和系统的最新状态,以减少已知漏洞被利用的风险。
-
使用AWS Systems Manager(SSM):
• AWS SSM可以提供对EC2实例(包括EMR集群中的实例)的远程访问和管理。
• 通过SSM,可以在不直接暴露SSH端口的情况下,安全地访问和管理EMR集群。
-
加强身份验证和访问控制:
• 使用强密码、多因素身份验证(MFA)等方法保护SSH账户的安全。
• 确保只有经过授权的用户才能访问堡垒主机和EMR集群。
以下是分步配置AWS EMR通过堡垒主机进行SSH连接的详细操作指南,包含关键配置代码示例:
1. 配置VPC和安全组
# EMR集群安全组入站规则(JSON示例)
[
{
"IpProtocol": "tcp",
"FromPort": 22,
"ToPort": 22,
"UserIdGroupPairs": [
{
"GroupId": "sg-0abcdef1234567890" # 堡垒主机的安全组ID
}
]
}
]
# 堡垒主机安全组规则
[
{
"IpProtocol": "tcp",
"FromPort": 22,
"ToPort": 22,
"CidrIp": "0.0.0.0/0" # 或限制为办公网络IP段
}
]
2. SSH隧道配置
# 方式一:直接建立隧道
ssh -J ec2-user@bastion-host-public-ip ec2-user@emr-master-private-ip
# 方式二:分步端口转发
ssh -i key.pem -L 2222:emr-master-private-ip:22 ec2-user@bastion-host-public-ip
# 新终端执行:
ssh -i key.pem -p 2222 ec2-user@localhost
# ~/.ssh/config配置示例
Host emr-via-bastion
HostName emr-master-private-ip
User hadoop
IdentityFile ~/.ssh/emr-key.pem
ProxyJump ec2-user@bastion-host-public-ip
3. 安全组访问控制
# 移除EMR主节点原有开放规则
aws ec2 revoke-security-group-ingress \
--group-id sg-emr \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
# 添加仅允许堡垒主机的规则
aws ec2 authorize-security-group-ingress \
--group-id sg-emr \
--protocol tcp \
--port 22 \
--source-group sg-bastion
4. 监控与日志配置
# 修改/etc/ssh/sshd_config(堡垒主机)
LogLevel VERBOSE
SyslogFacility AUTHPRIV
# 安装CloudWatch日志代理
sudo yum install amazon-cloudwatch-agent -y
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-linux
5. 自动化更新(使用Ansible示例)
# bastion-update.yml
- hosts: bastion
become: yes
tasks:
- name: Update all packages
yum:
name: '*'
state: latest
- name: Reboot if needed
reboot:
6. SSM访问配置
// EMR实例IAM角色策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession",
"ssm:TerminateSession"
],
"Resource": "arn:aws:ec2:*:account-id:instance/*"
}
]
}
# 通过SSM连接EMR节点
aws ssm start-session --target i-0123456789abcdef0
7. 强化身份验证
# 禁用密码登录(堡垒主机sshd_config)
PasswordAuthentication no
ChallengeResponseAuthentication no
# 配置MFA(Google Authenticator示例)
sudo yum install google-authenticator -y
google-authenticator # 按提示完成配置
# 修改PAM配置
# /etc/pam.d/sshd 添加:
auth required pam_google_authenticator.so
验证流程
- 测试SSH隧道连接:
ssh -v emr-via-bastion
- 检查安全组流量:
aws ec2 describe-security-group-references \
--group-id sg-emr
- 验证SSM会话:
aws ssm describe-sessions --state Active
注意事项
- 堡垒主机建议部署在私有子网,通过NAT网关访问外网
- 使用AWS Secrets Manager存储SSH密钥
- EMR集群建议启用Kerberos认证增强安全性
- 定期轮换SSH密钥(可通过AWS KMS自动化)
通过以上配置,就可以在AWS环境中实现符合企业安全规范的SSH访问控制体系。