使用 AWS SSM 运行 命令的环境变量

Environment variables with AWS SSM Run Command

我正在将 AWS SSM 运行 命令与 AWS-运行ShellScript 文档一起用于 运行 AWS Linux 1 实例上的脚本。脚本的一部分包括使用环境变量。当我自己 运行 脚本时,一切都很好。但是当我 运行 使用 SSM 的脚本时,它看不到环境变量。 此变量需要传递给 Python 脚本。我本来一直在尝试 os.environ['VARIABLE'] 但没有效果。

我知道 AWS SSM 使用 root 权限,所以我在 root ~/.bashrc 文件中放了一行导出变量,但它仍然看不到变量。我自己运行的时候root用户就可以看到了。 是 AWS SSM 无法使用环境变量,还是我没有正确导出它?如果不可能,我将尝试使用 AWS KMS 来存储我的变量。

~/.bashrc

export VARIABLE="VALUE"

script.sh

"$VARIABLE"

安全很重要,因此我不想只将变量存储在脚本中。

SSM 不会打开实际的 SSH 会话,因此传递环境变量将不起作用。盒子上的守护程序 运行 是必不可少的,它可以接收您的请求并处理它们。这是一个非常基本的产品:它不支持 SSH 附带的任何标准功能,例如 SCP、端口转发、隧道、环境变量传递等。将您需要的值传递给脚本的另一种方法是将其存储在 AWS Systems Manager Parameter Store 中,并让您的脚本从存储中提取变量。
您需要更新您的实例角色权限才能访问您 运行 访问存储值的脚本的 ssm:GetParameters

我是我的 SSM 命令文档中的 运行 bash 脚本,所以我只是获取 profile/script 以准备好环境变量以供后续命令使用。例如,

"runCommand": [
      "#!/bin/bash",
      ". /tmp/setEnv.sh",
      "echo \"myVar: $myVar, myVar2: $myVar2\""
]

可以参考Can a shell script set environment variables of the calling shell? for sourcing your env variables. For python, you will have to parse your source profile/script, see Emulating Bash 'source' in Python

我对这个问题的解决方案:

set -o allexport; source /etc/environment; set +o allexport

-o allexport 允许导出 /etc/environment 中的所有变量。 +o allexport 禁用此功能。

有关详细信息,请参阅 Set builtin documentation

我已经使用 AWS CLI 命令测试了这个解决方案 aws ssm send-command:

"commands": [
    "set -o allexport; source /etc/environment; set +o allexport",
    "echo $TEST_VAR > /home/ec2-user/app.log"
]