我可以用.aws /凭证中的IAM角色替换aws密钥以用于boto3用法吗?

时间:2018-05-17 00:23:54

标签: amazon-web-services boto3

我尝试将角色用作:

~/.aws/credentials
[default]
role_arn=arn:aws:iam::xxxxxxx:role/yyyy

但我收到错误:

Partial credentials found in assume-role, missing: source_profile or credential_source

所以看来IAM角色无法取代

[default]
aws_access_key_id = AAAAAAAAAAAAAAAAAAAAAAAA
aws_secret_access_key =  BBBBBBBBBBBBBBBBBBBBBBBBBBB

因为http://boto3.readthedocs.io/en/latest/guide/configuration.html

# In ~/.aws/credentials:
[development]
aws_access_key_id=foo
aws_access_key_id=bar

# In ~/.aws/config
[profile crossaccount]
role_arn=arn:aws:iam:...
source_profile=development

即使没有在代码中使用,我仍然必须使用密钥,这可能会带来安全风险

有没有办法在没有使用aws API凭证的情况下使用具有管理员权限的boto3?

基本上是这样的:

  1. Associate" admin"您将用于运行boto3脚本的ec2实例的角色
  2. 确保它看起来不错。 $curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
  3. test boto3 script

    #!/usr/bin/env python import boto3
    ec2_client = boto3.client('ec2')
    def main(): vpcs = ec2_client.describe_vpcs() for vpc_info in vpcs['Vpcs']: print(vpc_info['VpcId'])
    if name == "main": main()

  4. 我在github上遇到了一个解决这个问题的应用程序:

    https://github.com/AdRoll/hologram

2 个答案:

答案 0 :(得分:4)

如果你有一个角色附加到EC2实例,你可以使用:

〜/ .aws / config

[default]
credential_source=Ec2InstanceMetadata

https://docs.aws.amazon.com/cli/latest/topic/config-vars.html

credential_source - 用于获取初始假设角色调用凭据的凭据提供程序。此参数不能与source_profile一起提供。有效值为:

Environment从环境变量中提取源凭据。

Ec2InstanceMetadata将EC2实例角色用作源凭据。

EcsContainer使用ECS容器凭据作为源凭据。

答案 1 :(得分:1)

您无法仅提供角色ARN。仅这一点还不够。您需要提供提供凭据的source_profile以承担ARN指定的角色。

请参阅:Assume Role Provider

  • role_arn - 您想要承担的角色的ARN。
  • source_profile - 包含我们应该用于初始AssumeRole调用的凭据的boto3配置文件。
  

如果您不需要MFA身份验证,那么您只需要   指定role_arn source_profile。