我尝试将角色用作:
~/.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?
基本上是这样的:$curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
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()
我在github上遇到了一个解决这个问题的应用程序:
答案 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指定的角色。
role_arn
- 您想要承担的角色的ARN。source_profile
- 包含我们应该用于初始AssumeRole调用的凭据的boto3配置文件。如果您不需要MFA身份验证,那么您只需要 指定role_arn 和 source_profile。