【问题标题】:How to correctly/safely access parameters from AWS SSM Parameter store for my Python script on EC2 instance?如何正确/安全地从 AWS SSM 参数存储访问 EC2 实例上我的 Python 脚本的参数?
【发布时间】:2021-02-21 10:30:57
【问题描述】:

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

关于 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 实例,因为我认为我应该保持它的私密性,而不是在我的 EC2 实例上放置令牌/密钥。我想我可以通过在 ssh 进入我的实例时运行 aws configure 来解决这个问题,但是我想了解如果我的实际 EC2 实例上有一个 .aws/credentials 文件会发生什么,以及这是否危险。我只是不确定这一切应该如何构建,或者运行我的脚本和访问秘密变量的安全/正确方法是什么。

任何见解都是有帮助的!

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 boto3 aws-ssm


    【解决方案1】:

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

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

    【讨论】:

    • 嗨。我认为,如果您能够提供指向什么是实例配置文件、实例元数据的链接,这将有助于您更好地回答。
    • @xH7UuDv2CW,我想我有 1-3 个。我创建了一个用户,该用户位于具有 AdministratorAccess 策略的组中。这应该使他们能够访问参数,对吧?关于#4,我想我对它是否可以在实际的 EC2 实例上拥有 .aws/credentials 文件感到困惑(我认为如果我运行 aws configure 而 ssh 进入我的实例)。
    • @xH7UuDv2CW 实际上,我错过了第 3 步。我没有意识到您专门为您的 EC2 实例添加了一个角色。我将“EnablesEC2ToAccessSystemsManagerRole”添加到我的 EC2 实例中。现在,当我运行aws configure list 时,它会显示访问 ID 和密钥。我的 botocore 调试日志显示它“从 IAM 角色找到凭据:EnablesEC2ToAccessSystemsManagerRole”。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2021-07-23
    • 1970-01-01
    • 2021-11-28
    • 2022-08-12
    • 1970-01-01
    • 2018-09-06
    • 2019-02-19
    相关资源
    最近更新 更多