我找到了一个boto + MFA的例子:
http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_sample-code.html
但是我找不到一个如何用boto3做的例子。任何等效的boto3例子?
谢谢!
答案 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')