如何使用Python boto3库修改角色的最大会话持续时间

goucqfw6  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(144)

我们正在使用Python boto3库,并通过配置文件承担角色。假设角色的原因是我们要访问的S3存储桶只能通过该角色访问。现在我看到AWS配置文件的令牌没有过期,但我们使用此配置文件假设的角色在1小时内到期。这将导致以下错误:

An error occurred (ExpiredToken) when calling the ListObjectsV2 operation: The provided token has expired

我在AWS documentation中发现有这样做的选项,但不清楚。我尝试从会话对象或客户端对象获取DurationSeconds参数,但找不到。
我试

boto_client.get_object_attributes(Bucket='bucket_name', Key='secret_access_key', ObjectAttributes=['LastModified'])`

但得到错误:
botocore.exceptions.ClientError:调用GetObjectAttributes操作时出错(InvalidArgument):指定的属性名称无效。

ccgok5k5

ccgok5k51#

您可以在使用DurationSeconds承担角色时指定会话持续时间:

import boto3

creds = boto3.client('sts').assume_role(
    RoleArn="arn:aws:iam::0000000000000000:role/custom-role",
    RoleSessionName="AssumeRoleSession1",
    DurationSeconds=10800 # 3 hours
)['Credentials']
    
session = boto3.Session(
    aws_access_key_id=creds['AccessKeyId'],
    aws_secret_access_key=creds['SecretAccessKey'],
    aws_session_token=creds['SessionToken']
)
s3_client = session.client('s3')
...

DurationSeconds最高可达43200(12小时)
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts/client/assume_role.html

相关问题