如何通过Terraform将AWS SSO权限集分配至多账户组?
解决Terraform自动化分配AWS SSO权限集到组的问题
你遇到的错误是因为旧文档中的aws_sso_permission_set_group_assignment等资源类型已被AWS Provider弃用,当前HashiCorp AWS Provider v4.0及以上版本使用aws_ssoadmin_account_assignment资源来实现权限集到身份(组/用户)在指定账户的分配。
核心步骤与代码示例
1. 确保使用兼容的AWS Provider版本
在Terraform配置中指定AWS Provider版本至少为v4.0:
terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 4.0.0" } } }
2. 获取SCIM同步组的ID
通过aws_identitystore_group数据源自动获取SCIM同步到AWS SSO的组ID,无需手动查找:
data "aws_identitystore_group" "dev_team" { identity_store_id = aws_ssoadmin_instance.main.identity_store_id display_name = "Dev-Team" # 替换为你的SCIM组名 }
3. 批量分配权限集到组与指定账户
使用for_each遍历选定的账户列表,批量创建分配:
# 定义需要分配的账户ID列表 variable "target_accounts" { type = list(string) default = ["123456789012", "234567890123"] # 替换为你的目标账户ID } # 已创建的权限集示例(假设你已有此资源) resource "aws_ssoadmin_permission_set" "dev_access" { name = "Dev-Access" instance_arn = aws_ssoadmin_instance.main.arn } # 批量创建权限集到组的账户分配 resource "aws_ssoadmin_account_assignment" "dev_team_to_accounts" { for_each = toset(var.target_accounts) instance_arn = aws_ssoadmin_instance.main.arn permission_set_arn = aws_ssoadmin_permission_set.dev_access.arn principal_type = "GROUP" principal_id = data.aws_identitystore_group.dev_team.group_id target_type = "AWS_ACCOUNT" target_id = each.value }
关键注意事项
- 权限验证:确保Terraform执行的IAM身份拥有
ssoadmin:CreateAccountAssignment、identitystore:DescribeGroup等相关权限。 - SSO实例关联:所有目标账户必须已关联到你的AWS SSO实例,否则分配会失败。
- 重复分配处理:如果同一组+权限集+账户的分配已存在,Terraform会跳过创建,不会报错。
内容的提问来源于stack exchange,提问作者BobMonk
相关产品推荐
相关产品推荐

