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

如何自动化分配IAM Identity Center用户到CDK创建的AWS账户?

解决方案:自动化IAM Identity Center用户分配到新建AWS账户

一、核心背景说明

目前AWS CDK确实没有直接封装IAM Identity Center(原AWS SSO)的用户/组到账户权限集分配的专属构造,AWS CLI也没有一键式的批量分配命令,但可以通过在CDK中集成AWS SDK或CLI脚本结合部署流程两种方式实现自动化分配。

二、方式1:TypeScript CDK中集成AWS SDK实现

利用CDK的CustomResource或部署钩子,调用IAM Identity Center的SDK接口,在新建账户完成后自动执行分配操作。

步骤示例

  1. 提前准备必要信息
    先在IAM Identity Center控制台创建好目标权限集,再通过CLI获取实例ARN和权限集ARN:

    # 获取IAM Identity Center实例ARN
    aws sso-admin list-instances
    # 获取目标权限集ARN
    aws sso-admin list-permission-sets --instance-arn <你的实例ARN>
    # 获取要分配的用户ID(若分配组则替换为list-groups)
    aws sso-admin list-users --instance-arn <你的实例ARN>
    
  2. CDK代码中添加自动分配逻辑
    在创建AWS账户的Stack中,新增CustomResource通过Lambda调用CreateAccountAssignment API:

    import * as cdk from 'aws-cdk-lib';
    import * as iam from 'aws-cdk-lib/aws-iam';
    import * as customres from 'aws-cdk-lib/custom-resources';
    import { Construct } from 'constructs';
    
    export class AccountProvisionStack extends cdk.Stack {
      constructor(scope: Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props);
    
        // 假设已通过CDK创建新账户,这里用变量存储账户ID
        const newAccountId = '123456789012';
        // 替换为你的实际参数
        const ssoInstanceArn = 'arn:aws:sso:::instance/ssoins-xxxxxxxxx';
        const permissionSetArn = 'arn:aws:sso:::permissionSet/ssoins-xxxxxxxxx/ps-xxxxxxxxx';
        const targetUserId = 'user-xxxxxxxxx';
    
        // 创建执行分配操作的Lambda角色
        const ssoAssignRole = new iam.Role(this, 'SsoAccountAssignRole', {
          assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
          managedPolicies: [
            iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
          ],
        });
    
        // 赋予角色SSO账户分配权限
        ssoAssignRole.addToPolicy(new iam.PolicyStatement({
          actions: ['sso:CreateAccountAssignment'],
          resources: [
            `${ssoInstanceArn}/accountAssignments/*`,
            permissionSetArn,
          ],
        }));
    
        // 自定义资源执行用户分配
        new customres.AwsCustomResource(this, 'AssignUserToNewAccount', {
          onCreate: {
            service: 'SSOAdmin',
            action: 'createAccountAssignment',
            parameters: {
              InstanceArn: ssoInstanceArn,
              TargetId: newAccountId,
              TargetType: 'AWS_ACCOUNT',
              PermissionSetArn: permissionSetArn,
              PrincipalType: 'USER',
              PrincipalId: targetUserId,
            },
            physicalResourceId: customres.PhysicalResourceId.of(`assign-${targetUserId}-${newAccountId}`),
          },
          role: ssoAssignRole,
          // 添加重试逻辑,应对账户同步延迟
          retryAttempts: 3,
          retryDelay: cdk.Duration.minutes(2),
        });
      }
    }
    

    若需分配组而非用户,仅需将PrincipalType改为GROUP,PrincipalId替换为目标组ID即可。

三、方式2:AWS CLI脚本结合部署流程

如果偏好轻量化脚本方案,可在CDK部署完成后,通过Shell脚本调用CLI完成分配:

示例bash脚本

#!/bin/bash

# 配置参数
SSO_INSTANCE_ARN="arn:aws:sso:::instance/ssoins-xxxxxxxxx"
PERMISSION_SET_ARN="arn:aws:sso:::permissionSet/ssoins-xxxxxxxxx/ps-xxxxxxxxx"
NEW_ACCOUNT_ID="123456789012"
TARGET_USER_ID="user-xxxxxxxxx"

# 检查账户是否已同步到SSO(避免因同步延迟导致失败)
check_account_sync() {
  aws sso-admin list-accounts --instance-arn $SSO_INSTANCE_ARN | grep -q $NEW_ACCOUNT_ID
  return $?
}

# 等待账户同步
echo "等待新账户同步到IAM Identity Center..."
until check_account_sync; do
  sleep 60
done

# 执行用户分配
aws sso-admin create-account-assignment \
  --instance-arn $SSO_INSTANCE_ARN \
  --target-id $NEW_ACCOUNT_ID \
  --target-type AWS_ACCOUNT \
  --permission-set-arn $PERMISSION_SET_ARN \
  --principal-type USER \
  --principal-id $TARGET_USER_ID

echo "用户分配完成"

可将该脚本与cdk deploy命令串联,比如在CDK部署成功后自动执行:

cdk deploy --require-approval never && ./assign-sso-user.sh

四、关键注意事项

  • 权限要求:执行CDK或脚本的身份必须拥有SSOAdmin:CreateAccountAssignment权限,以及访问IAM Identity Center实例和权限集的权限。
  • 账户同步延迟:新创建的AWS账户同步到IAM Identity Center需要几分钟,需添加等待或重试逻辑避免分配失败。
  • 批量处理:若需批量分配多用户/多账户,可通过循环遍历用户列表、账户列表实现批量操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:22:31