如何延长FargateCluster(Dask Cloud Provider)的角色令牌时长或刷新会话
解决Dask FargateCluster令牌时长仅6小时的问题
核心原因
Dask FargateCluster默认使用boto3的默认会话,即便IAM角色已设置12小时最大会话时长,若未显式指定会话时长,boto3会采用6小时默认值,且AWS配置文件的seconds_duration可能未被Dask底层客户端读取。
解决方案
1. 显式配置boto3会话时长并传入集群
手动创建指定12小时(43200秒)会话时长的boto3客户端,覆盖Dask默认的会话配置:
import boto3 # 通过STS获取带12小时时长的临时凭证 sts_client = boto3.client('sts') assumed_role = sts_client.assume_role( RoleArn=f"arn:aws:iam::{aws_account_id}:role/{your_assumed_role_name}", RoleSessionName="DaskFargateSession", DurationSeconds=43200 # 该值不能超过角色设置的最大会话时长 ) # 用临时凭证创建ECS客户端 ecs_client = boto3.client( 'ecs', aws_access_key_id=assumed_role['Credentials']['AccessKeyId'], aws_secret_access_key=assumed_role['Credentials']['SecretAccessKey'], aws_session_token=assumed_role['Credentials']['SessionToken'], region_name='eu-west-2' ) # 初始化FargateCluster时传入自定义客户端 cluster = FargateCluster( cloudwatch_logs_group="{project}_log_group", cluster_name_template="{project}-{uuid}", environment={"DEFAULT_GSF_VERSION": gsf_version}, image=f"{aws_account_id}.dkr.ecr.eu-west-2.amazonaws.com/{project}:latest", n_workers=9, scheduler_cpu=4096, scheduler_mem=30720, scheduler_timeout="240 minutes", security_groups=[aws_security_group_id], task_role_arn=f"arn:aws:iam::{aws_account_id}:role/{project}ECSTaskRole", worker_cpu=4096, worker_mem=30720, worker_extra_args=algorithm_extra_cluster_args, fargate_use_private_ip=use_private_ip, vpc=vpc, subnets=subnets, skip_cleanup=True, platform_version="LATEST", shutdown_on_close=True, mount_points=mount_points, volumes=volumes, client=ecs_client # 传入自定义ECS客户端 ) cluster.adapt(minimum=9, maximum=80)
2. 验证IAM角色配置
- 确认目标IAM角色的最大会话时长已设为12小时(43200秒),可在IAM控制台角色详情页的“信任关系”标签上方查看该设置。
- 检查角色的信任策略,允许调用
sts:AssumeRole时指定DurationSeconds,示例策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{your_account_id}:user/{your_local_user}" }, "Action": "sts:AssumeRole", "Condition": { "NumericLessThanEquals": { "sts:DurationSeconds": 43200 } } } ] }
3. 令牌刷新说明
- 若集群需运行超过12小时,需手动编写定时逻辑刷新STS临时凭证,并更新Dask集群的客户端配置。
- Fargate任务自身的角色凭证由AWS ECS自动刷新,无需干预;但本地启动集群时使用的假设角色凭证,需自行处理过期后的刷新操作。
内容的提问来源于stack exchange,提问作者Javrel
相关产品推荐
相关产品推荐

