如何在 AWS 上创建临时安全凭证

How to create Temporary Security Credentials on AWS

我正在尝试使用 Apache Libcloud (Web) and reading the Documentation 如何将它与 Amazon EC2 一起使用我在开始时卡在了一个步骤上。

关于这一步:

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

cls = get_driver(Provider.EC2)
driver = cls('temporary access key', 'temporary secret key',
             token='temporary session token', region="us-west-1")

您需要传递临时访问数据并告诉您阅读 Amazon Documentation 但我也阅读了文档 我不太清楚我必须做什么才能获得我的临时凭证。

文档上说您可以与 AWS STS API 交互以连接到端点,但我不明白您如何获得凭据。此外,在 Libcloud Web 的示例中,他们使用个人凭据:

ACCESS_ID = 'your access id'
SECRET_KEY = 'your secret key'

所以我有点迷路了。如何获得我的临时凭证以在我的代码中使用它?

感谢和问候。

如果此代码不 运行 在 EC2 实例上,我建议您使用静态凭证:

ACCESS_ID = 'your access id'
SECRET_KEY = 'your secret key'

cls = get_driver(Provider.EC2)
driver = cls(ACCESS_ID, SECRET_KEY, region="us-west-1")

创建访问凭据:

  1. https://console.aws.amazon.com/iam/ 登录身份和访问管理 (IAM) 控制台。
  2. 在导航窗格中,选择用户。
  3. 选择所需用户的名称,然后选择“安全凭据”选项卡。

如果需要,展开“访问密钥”部分并执行以下任一操作:

选择创建访问密钥,然后选择下载凭据以将访问密钥 ID 和秘密访问密钥保存到计算机上的 CSV 文件中。将文件存储在安全位置。此对话框关闭后,您将无法再次访问秘密访问密钥。下载 CSV 文件后,选择“关闭”。

如果您想 运行 来自 EC2 机器的代码,您可以通过使用 AWS SDK 为 Python https://boto3.readthedocs.io/en/latest/guide/quickstart.html by calling assume_role() on the STS service https://boto3.readthedocs.io/en/latest/reference/services/sts.html

担任 IAM 角色来获取临时凭证

@Aker666 从我在网上查到的信息来看,您仍然需要使用常规 AWS api 来获取这些信息。

适合我的基本片段是:

import boto3
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver


boto3.setup_default_session(aws_access_key_id='somekey',aws_secret_access_key='somesecret',region_name="eu-west-1")
sts_client = boto3.client('sts')
assumed_role_object = sts_client.assume_role(
                    RoleArn="arn:aws:iam::701********:role/iTerm_RO_from_TGT",
                    RoleSessionName='update-cloud-hosts.aviadraviv@Aviads-MacBook-Pro.local'
)


cls = get_driver(Provider.EC2)
driver = cls(assumed_role_object['Credentials']['AccessKeyId'], assumed_role_object['Credentials']['SecretAccessKey'],
             token=assumed_role_object['Credentials']['SessionToken'], region="eu-west-1")


nodes = driver.list_nodes()
print(nodes)

希望这对任何人都有帮助。