You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3创建AWS SSO账号分配时先显示进行中后失败的问题

AWS SSO 账户分配状态与失败排查

环境信息

  • env: python3 venv and using boto3 apis

问题描述

已在身份存储中创建组和权限集,尝试通过API将组绑定到权限集(已获取两者的ID和ARN),但调用create_account_assignment后返回状态为IN_PROGRESS,后续通过list_account_assignment_creation_status查询显示失败,且未获取到失败原因。需求是实现操作能明确返回成功/失败状态,并获取失败原因。

相关代码

创建权限集代码

def create_permission_set(self, instance_arn, name):
        client = boto3.client('sso-admin', aws_access_key_id=self.access_key,aws_secret_access_key=self.secret_key, region_name =self.region_name)
        response = client.create_permission_set(
            InstanceArn=instance_arn,
            Name=name
        )

绑定组与权限集代码

def bind_group_permission_set(self,permission_set_arn,group_id,instance_id,instance_arn):
        client = boto3.client('sso-admin', aws_access_key_id=self.access_key, 
                                aws_secret_access_key=self.secret_key, 
                                region_name =self.region_name)
        
        response = client.create_account_assignment(
            InstanceArn=instance_arn,
            PermissionSetArn=permission_set_arn,
            PrincipalId=group_id,
            PrincipalType='GROUP',
            TargetId='8xxxxxxxxxxxx3',
            TargetType='AWS_ACCOUNT'
        )
        return response

调用返回示例

{'AccountAssignmentCreationStatus': 
{'PermissionSetArn': '', 'PrincipalId': '', 'PrincipalType': 'GROUP', 'RequestId': '', 'Status': 'IN_PROGRESS', 'TargetId': '', 'TargetType': 'AWS_ACCOUNT'}, 'ResponseMetadata': {'RequestId': '', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Thu, 11 Jan 2024 06:05:43 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '334', 'connection': 'keep-alive', 'x-amzn-requestid': ''}, 'RetryAttempts': 0}}

解决方案与说明

1. 关于IN_PROGRESS状态的说明

AWS SSO的create_account_assignment接口本身是异步操作,设计逻辑就是先返回IN_PROGRESS状态,后台执行实际的分配任务,无法直接同步返回最终结果。必须通过后续查询获取最终状态。

2. 获取失败原因的正确方式

list_account_assignment_creation_status通常不会返回详细失败信息,应改用describe_account_assignment_creation_status接口,传入create_account_assignment返回的RequestId,该接口会返回FailureReason字段,包含具体失败原因。

以下是添加轮询逻辑的示例代码:

import time

def wait_for_assignment_status(self, instance_arn, request_id):
    client = boto3.client('sso-admin', aws_access_key_id=self.access_key, 
                          aws_secret_access_key=self.secret_key, 
                          region_name=self.region_name)
    
    while True:
        response = client.describe_account_assignment_creation_status(
            InstanceArn=instance_arn,
            RequestId=request_id
        )
        status = response['AccountAssignmentCreationStatus']['Status']
        if status in ['SUCCEEDED', 'FAILED']:
            failure_reason = response['AccountAssignmentCreationStatus'].get('FailureReason', '无详细失败原因')
            return status, failure_reason
        # 间隔3秒重试,可根据实际情况调整
        time.sleep(3)

# 改造后的绑定方法
def bind_group_permission_set(self,permission_set_arn,group_id,instance_id,instance_arn):
        client = boto3.client('sso-admin', aws_access_key_id=self.access_key, 
                                aws_secret_access_key=self.secret_key, 
                                region_name =self.region_name)
        
        response = client.create_account_assignment(
            InstanceArn=instance_arn,
            PermissionSetArn=permission_set_arn,
            PrincipalId=group_id,
            PrincipalType='GROUP',
            TargetId='8xxxxxxxxxxxx3',
            TargetType='AWS_ACCOUNT'
        )
        request_id = response['AccountAssignmentCreationStatus']['RequestId']
        # 等待获取最终状态
        final_status, failure_reason = self.wait_for_assignment_status(instance_arn, request_id)
        return {
            'final_status': final_status,
            'failure_reason': failure_reason,
            'original_response': response
        }

3. 常见失败原因排查

如果最终状态为失败,可优先排查以下几点:

  • 权限集ARN、组ID是否正确,确认资源属于当前SSO实例
  • 目标AWS账户是否已加入SSO实例,账户ID是否输入错误
  • 调用API的IAM身份是否拥有sso-admin:CreateAccountAssignment等相关权限
  • 权限集是否完成预配置(若关联了托管/自定义策略,需确保配置生效)

内容的提问来源于stack exchange,提问作者Sandeepa Kariyawasam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:12:42