那里有boto3 + MFA的例子吗?

时间:2017-03-09 21:58:26

标签: python amazon-web-services boto3

我找到了一个boto + MFA的例子:

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sample-code.html

但是我找不到一个如何用boto3做的例子。任何等效的boto3例子?

谢谢!

4 个答案:

答案 0 :(得分:4)

下面的代码可以使用,但您必须使用带有正确凭据的〜/ .boto文件。 SerialNumber是您的MFA设备序列或完整的AWS arn

#!/usr/bin/env python

import boto3

mfa_TOTP = raw_input("Enter the MFA code: ")

client=boto3.client( 'sts' )

response = client.assume_role(
    RoleArn='arn:aws:iam::123456789:role/admin_full',
    RoleSessionName='mysession',
    DurationSeconds=3600,
    SerialNumber='arn:aws:iam::987654321:mfa/myaccount',
    TokenCode=mfa_TOTP,
)

答案 1 :(得分:3)

您可以使用sts和get_session_token方法通过boto3调用使用MFA。对于此预先要求,您应该创建sts的客户端对象,然后使用mfa令牌调用该函数。这将为您提供可以使用的临时凭证,这些凭证有效期为36小时 代码 -

    sts= boto3.client('sts')
    response = client.get_session_token(DurationSeconds=<time>, SerialNumber='string',TokenCode='string')

http://boto3.readthedocs.io/en/latest/reference/services/sts.html#STS.Client.get_session_token

答案 2 :(得分:3)

除了Zoltan和Fauxsys的答案,这可能是创建AWS客户端的另一种方式

import boto3

mfa_otp = raw_input("Enter the MFA code: ")

client = boto3.client('sts')

mfa_creds = client.get_session_token(
    DurationSeconds=36000,
    SerialNumber='<MFA serial number>',
    TokenCode=mfa_otp
)


boto3 \
    .client(service_name="<service name e.g. secretsmanager>",
            region_name='us-west-2',
            aws_access_key_id=mfa_creds['Credentials']['AccessKeyId'],
            aws_secret_access_key=mfa_creds['Credentials']['SecretAccessKey'],
            aws_session_token=mfa_creds['Credentials']['SessionToken'])
        

如果您不使用MFA,则可以省略这些部分,并且仍然可以使用。

答案 3 :(得分:0)

下面描述的MFA方法可用于boto3以及AWS CLI:

~/.aws/credentials

[local-keys]
aws_access_key_id = ABCDEFG
aws_secret_access_key = HIJKLMNOP

[stackoverflow]
role_arn = arn:aws:iam::123456789:role/RoleName
source_profile = local-keys
mfa_serial = arn:aws:iam:987654321:mfa/UserName

~/.aws/config

[profile stackoverflow]
region = us-east-1

以下是如何在Python中使用此示例:

aws_MFA.py

#!/usr/bin/env python3
import boto3

session = boto3.session.Session(profile_name='stackoverflow')
ec2client = session.client('ec2')