1

我正在尝试使用Apache Libcloud (Web)并阅读有关如何将其与 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 文档,但我也阅读了文档,但我不太清楚我必须做什么才能获得我的临时凭证。

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

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

所以我有点失落。如何获取我的临时凭证以在我的代码中使用它?

谢谢并恭祝安康。

4

2 回答 2

1

如果此代码不在 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. 选择所需用户的名称,然后选择 Security Credentials 选项卡。

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

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

如果您想从 EC2 机器上运行您的代码,您可以通过使用 AWS SDK for Python https://boto3.readthedocs.io/en/latest/guide/quickstart.html代入一个 IAM 角色来获取临时凭证,方法是调用assume_role( ) 在 STS 服务上https://boto3.readthedocs.io/en/latest/reference/services/sts.html

于 2016-07-27T17:55:49.187 回答
1

@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)

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

于 2020-03-21T14:34:15.380 回答