如何 correctly/safely 为我在 EC2 实例上的 Python 脚本从 AWS SSM 参数存储访问参数?

How to correctly/safely access parameters from AWS SSM Parameter store for my Python script on EC2 instance?

我有一个 Python 脚本,我想要 运行 并在满足特定条件时给我发短信通知。我正在使用 Twilio,所以我有一个 Twilio API 令牌,我想对其保密。我在本地成功 运行ning,现在我正在努力在 EC2 实例上 运行ning。

关于 AWS 步骤,我创建了一个具有权限的 IAM 用户,启动了 EC2 实例(并保存了 ssh 密钥),并在 AWS SSM 参数存储中创建了一些参数。然后我 ssh 进入实例并安装了 boto3。当我尝试使用 boto3 获取参数时,我无法找到凭据:

# test.py
import boto3

ssm = boto3.client('ssm', region_name='us-west-1')

secret = ssm.get_parameter(Name='/test/cli-parameter')
print(secret)

# running the file in the console
>> python test.py
...
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

我很确定这意味着它找不到在我 运行 aws configure 和它创建 .aws/credentials 文件时创建的凭据。我相信这是因为我在我的本地机器上 运行 aws configure,而不是在 ssh 进入实例时 运行 连接它。我这样做是为了让我的 AWS ID 和密钥远离我的 EC2 实例,因为我认为我应该保持私有而不是将 tokens/keys 放在我的 EC2 实例上。我想我可以在 ssh 进入我的实例时通过 运行ning aws configure 来解决这个问题,但我想了解如果我的实际 EC2 实例上有一个 .aws/credentials 文件会发生什么,以及这是否危险。我只是不确定这一切应该如何构建,或者 运行 设置我的脚本和访问秘密变量的 safe/correct 方式是什么。

任何见解都是有帮助的!

我怀疑您正在寻找的答案类似于:

  1. 创建允许访问 SSM 参数的 IAM 策略(为什么不使用 SecretStore?)
  2. 将该 IAM 策略附加到一个角色。
  3. 将角色附加到您的 EC2 实例(实例配置文件)
  4. boto3 现在会在需要与参数存储对话时从元数据服务自动收集 AWS 密钥等。