我将AWS SSM Run Command与AWS-RunShellScript文档结合使用,以在AWS Linux 1实例上运行脚本。该脚本的一部分包括使用环境变量。当我自己运行脚本时,一切都很好。但是,当我使用SSM运行脚本时,它看不到环境变量。 该变量需要传递给Python脚本。我最初一直尝试os.environ ['VARIABLE']无效。
我知道AWS SSM使用root特权,因此我在导出行到〜/ .bashrc根文件中放置了一行,但仍然看不到该变量。我自己运行时,root用户可以看到它。 AWS SSM是否不可能使用环境变量,或者我没有正确导出它?如果不可能,我将尝试使用AWS KMS来存储我的变量。
〜/ .bashrc
export VARIABLE="VALUE"
script.sh
"$VARIABLE"
安全性很重要,因此为什么我不想只将变量存储在脚本中。
答案 0 :(得分:0)
SSM无法打开实际的SSH会话,因此传递环境变量将不起作用。在接收请求并处理它们的盒子上运行的守护程序是必不可少的。这是一个非常基本的产品:它不支持SSH附带的任何标准功能,例如SCP,端口转发,隧道传输,环境变量的传递等。将值传递给脚本的另一种方法是:将其存储在AWS Systems Manager Parameter Store中,并让您的脚本从存储中提取变量。
您需要更新您的实例角色权限,以访问运行您访问存储值的脚本的ssm:GetParameters
。
答案 1 :(得分:0)
我在我的 SSM 命令文档中运行 bash 脚本,所以我只是获取配置文件/脚本来让 env 变量准备好供后续命令使用。例如,
"runCommand": [
"#!/bin/bash",
". /tmp/setEnv.sh",
"echo \"myVar: $myVar, myVar2: $myVar2\""
]
您可以参考 Can a shell script set environment variables of the calling shell? 来获取您的 env 变量。对于 python,您必须解析源配置文件/脚本,请参阅 Emulating Bash 'source' in Python