AWS Quicksight:通过API删除用户前如何转移其资源?
使用Boto3实现QuickSight用户资源转移的方案
由于delete_user API本身不支持资源转移,需要先通过QuickSight的专属API将待删除用户的所有资源逐一转移至目标用户,再执行删除操作,具体步骤如下:
1. 准备基础信息
- 获取待删除用户的ARN:可通过
describe_userAPI获取,或直接构造格式为arn:aws:quicksight:<区域>:<账号ID>:user/<命名空间>/<用户名> - 确认目标用户的ARN,格式同上
- 初始化Boto3的QuickSight客户端:
import boto3 quicksight_client = boto3.client('quicksight', region_name='<你的区域>') AWS_ACCOUNT_ID = '<你的账号ID>' NAMESPACE = 'default' # 使用自定义命名空间则替换 source_user_arn = 'arn:aws:quicksight:us-east-1:123456789012:user/default/待删除用户名' target_user_arn = 'arn:aws:quicksight:us-east-1:123456789012:user/default/目标用户名'
2. 枚举待转移的资源
遍历QuickSight核心资源类型,筛选出属于待删除用户的资源:
- 分析(Analyses):
analyses = quicksight_client.list_analyses(AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE)['AnalysisSummaryList'] source_analyses = [a for a in analyses if a['OwnerArn'] == source_user_arn] - 仪表盘(Dashboards):
dashboards = quicksight_client.list_dashboards(AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE)['DashboardSummaryList'] source_dashboards = [d for d in dashboards if d['OwnerArn'] == source_user_arn] - 数据集(Data Sets):
datasets = quicksight_client.list_data_sets(AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE)['DataSetSummaries'] source_datasets = [ds for ds in datasets if ds['OwnerArn'] == source_user_arn] - 数据源(Data Sources):
datasources = quicksight_client.list_data_sources(AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE)['DataSourceSummaries'] source_datasources = [ds for ds in datasources if ds['OwnerArn'] == source_user_arn]
3. 逐一转移资源所有权
针对每种资源调用对应的转移API:
- 转移分析所有权:
for analysis in source_analyses: quicksight_client.update_analysis_owner( AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE, AnalysisId=analysis['AnalysisId'], AwsAccountIdTo=AWS_ACCOUNT_ID, # 同账号转移填相同账号ID NamespaceTo=NAMESPACE, OwnerArnTo=target_user_arn ) - 转移仪表盘所有权:
for dashboard in source_dashboards: quicksight_client.update_dashboard_owner( AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE, DashboardId=dashboard['DashboardId'], AwsAccountIdTo=AWS_ACCOUNT_ID, NamespaceTo=NAMESPACE, OwnerArnTo=target_user_arn ) - 转移数据集所有权:
for dataset in source_datasets: quicksight_client.update_data_set_owner( AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE, DataSetId=dataset['DataSetId'], AwsAccountIdTo=AWS_ACCOUNT_ID, NamespaceTo=NAMESPACE, OwnerArnTo=target_user_arn ) - 转移数据源所有权:
for datasource in source_datasources: quicksight_client.update_data_source_owner( AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE, DataSourceId=datasource['DataSourceId'], AwsAccountIdTo=AWS_ACCOUNT_ID, NamespaceTo=NAMESPACE, OwnerArnTo=target_user_arn )
4. 验证并删除用户
- 重新调用资源列表API,确认所有原属待删除用户的资源
OwnerArn已更新为目标用户ARN - 执行删除用户操作:
quicksight_client.delete_user( AwsAccountId=AWS_ACCOUNT_ID, Namespace=NAMESPACE, UserName='待删除用户名' )
注意事项
- 执行操作的IAM身份需具备
quicksight:UpdateAnalysisOwner、quicksight:UpdateDashboardOwner、quicksight:UpdateDataSetOwner、quicksight:UpdateDataSourceOwner及quicksight:DeleteUser权限 - 跨账号转移资源时,需调整
AwsAccountIdTo和NamespaceTo参数,并确保目标账号已配置相应权限 - 若存在主题、文件夹等其他资源类型,可调用对应的
update_<resource>_ownerAPI处理
内容的提问来源于stack exchange,提问作者Vieira
相关产品推荐
相关产品推荐

