在上一节我们创建了一个Role用于Assume,注意到它的Max Session Duration是1个小时:
我们可以在代码中这样使用它:
import boto3
# Create session using your current creds
boto_sts = boto3.client('sts')
stsresponse = boto_sts.assume_role(
RoleArn="arn:aws:iam::256659126572:role/s3-access-for-assume-role",
RoleSessionName='newsession',
DurationSeconds=3600 # 通过调整role的Maximum session duration,可以同步调大这个值
)
# Save the details from assumed role into vars
newsession_id = stsresponse["Credentials"]["AccessKeyId"]
newsession_key = stsresponse["Credentials"]["SecretAccessKey"]
newsession_token = stsresponse["Credentials"]["SessionToken"]
print(newsession_key, newsession_token)
注意有一个参考DurationSeconds
来指定session的最大生存时间,如果我们将其设置为大于1个小时的值,比如3601
(单位是s),则运行会报错:
将这个值设置为12个小时:
此时再使用大于3600s来访问,也不会报错:
import boto3
# Create session using your current creds
boto_sts = boto3.client('sts')
stsresponse = boto_sts.assume_role(
RoleArn="arn:aws:iam::256659126572:role/s3-access-for-assume-role",
RoleSessionName='newsession',
DurationSeconds=10800 # 通过调整role的Maximum session duration,可以同步调大这个值
)
# Save the details from assumed role into vars
newsession_id = stsresponse["Credentials"]["AccessKeyId"]
newsession_key = stsresponse["Credentials"]["SecretAccessKey"]
newsession_token = stsresponse["Credentials"]["SessionToken"]
print(newsession_key, newsession_token)
s3_assumed_client = boto3.client(
's3',
region_name='us-east-1',
aws_access_key_id=newsession_id,
aws_secret_access_key=newsession_key,
aws_session_token=newsession_token
)
response = s3_assumed_client.list_buckets()
print(response)
在某些时刻下,我们需要assumeRole来调用另一个帐号的AWS服务,比如创建EMR大数据处理任务,如果这个任务运行时长大于1个小时,超过了session生存时间,此时就会报错。一个方案就是来调大这个Max session duration