AWS SSM中切换AWS不同的profile
问题
在自己的开发笔记本上面,通过AWS SSM方式访问EC2服务,只需要通过简单的命令就可以访问EC2了,如下:
aws ssm start-session --target i-xxxx12350
这个命令就是利用aws命令行工具中ssm提供的会话管理能力访问ec2服务,这个会话管理的能力,相当于跳板机了。
我如果只有一个aws开发账号还好,如果我有多个aws开发账号,就需要在不同环境上面切换配置才能正常使用上面这个命令,有没有简单一点的配置?
使用上面这个能力,需要在~/.ssh/config
,~/.aws/config
和~/.aws/credentials
这3个文件事先进行如下配置 :
~/.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代理命令配置,具体效果如下图:
~/.aws/config
[default]
region = cn-north-1
output = json
[profile demo]
region = cn-north-2
output = json
在这个文件中设置两个环境,一个默认环境,一个demo环境,这就是设置aws的profile需要切换的环境。
~/.aws/credentials
[default]
aws_access_key_id = xxxx
aws_secret_access_key = xcvsdafgs
[demo]
aws_access_key_id = sdfsg
aws_secret_access_key = dfurtyuirh34564687u
这是不同环境使用的不同的secret授权。
切换aws profile
假设我们需要登录demo环境的中的ec2机器,只需要在运行aws ssm登录命令之前,设置环境变量AWS_PROFILE
即可,具体命令如下:
export AWS_PROFILE=demo
这个命令运行成功后,就可以在这个环境变量基础上面,运行如下命令,登录demo环境的ec2机器了:
aws ssm start-session --target i-xxxdemo
总结
只有设置了正确的AWS_PROFILE环境变量,才可以在同一个aws cli中使用不同的aws账号。