Assume Role Session Hour设置

在上一节我们创建了一个Role用于Assume,注意到它的Max Session Duration是1个小时:

image-20231211195813906

我们可以在代码中这样使用它:

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),则运行会报错:

image-20231211195951039

将这个值设置为12个小时:

image-20231211200009128

此时再使用大于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