【问题标题】:Fetch boto3 credentials only from EC2 instance profile仅从 EC2 实例配置文件中获取 boto3 凭证
【发布时间】:2018-09-04 20:58:47
【问题描述】:

boto3documentation 列出了搜索凭证的顺序,并且仅在最后才从 EC2 实例元数据服务中获取凭证。

如何强制boto3 仅从 EC2 实例配置文件或实例元数据服务中获取凭证?

我遇到了this,它让我可以从元数据服务中获取临时凭据,然后我可以将其传递给boto3 会话。

但是我的问题是是否有更好的方法来做到这一点?是否可以通过指定使用providerInstanceMetadataProvider - link 来创建boto3 会话?我尝试搜索文档很多,但无法弄清楚。

原因 - 此脚本运行的上下文还具有带有 AWS 键集的环境变量,这显然会优先,但是我需要脚本仅在分配给 EC2 实例的 IAM 角色的情况下运行。

【问题讨论】:

  • 您的意图是没有存档 aws 凭据。如果您对此表示满意,那么我们可以使用 --profile profile-name 并且如果未指定配置文件标志,则可以使用 IAM 角色。
  • 是的,我不想担心管理 AWS 凭证或设置配置文件。分配给节点的实例 IAM 角色具有脚本运行所需的权限。
  • 您能否详细说明we can use `--profile profile-name` and if profile flag isn't given IAM role can be used 如果我不提供profile,它将更喜欢已在脚本运行的上下文中设置的环境变量中的AWS 凭据。如何强制boto3 选择 EC2 实例角色

标签: amazon-ec2 boto3


【解决方案1】:

所以我最终这样做了,按预期工作。始终使用实例角色的临时凭据。该脚本是短暂的,因此信用的有效性不是问题。

from botocore.credentials import InstanceMetadataProvider, InstanceMetadataFetcher

provider = InstanceMetadataProvider(iam_role_fetcher=InstanceMetadataFetcher(timeout=1000, num_attempts=2))
creds = provider.load().get_frozen_credentials()
client = boto3.client('ssm', region_name='us-east-1', aws_access_key_id=creds.access_key, aws_secret_access_key=creds.secret_key, aws_session_token=creds.token)

如果有更好的方法,请随时发布。

【讨论】:

    【解决方案2】:

    你也可以使用 boto3。

    >>> session = boto3.Session(region_name='foo_region')
    >>> credentials = session.get_credentials()
    >>> credentials = credentials.get_frozen_credentials()
    >>> credentials.access_key
    u'ABC...'
    >>> credentials.secret_key
    u'DEF...'
    >>> credentials.token
    u'ZXC...'
    >>> access_key = credentials.access_key
    >>> secret_key = credentials.secret_key
    

    这是一个类似的想法,但我发现它返回得更快

    【讨论】:

    • 这不会强制 EC2 实例配置文件凭证。它只是从初始化会话中获取密钥和令牌。
    • @TuukkaMustonen 会话中的这些密钥和令牌基于 EC2 实例凭据。当 EC2 使用 IAM 角色初始化时,它不像个人那样具有单独的凭据。从实例的会话中获取冻结的凭据是获取在其他地方使用的凭据的唯一方法
    • 是的,如果会话已使用这些凭据初始化,它将显示 EC2 实例配置文件凭据。但是,如果您阅读 OP 的描述(最后一段),您可以看到他将 AWS 凭证作为环境变量,并且您示例中的会话将使用环境变量进行初始化,而不是使用 EC2 实例配置文件,这正是问题所在.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多