资讯动态

使用 aws_identitystore_groups 数据源批量检索 AWS IAM Identity Center 群组列表

发布时间:2026/9/19 7:39:37 来源:尧图企业网站定制
使用 aws_identitystore_groups 数据源批量检索 AWS IAM Identity Center 群组列表【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_identitystore_groups是 terraform-provider-aws 提供的 Terraform 数据源Data Source用于一次性列出指定 AWS IAM Identity Center原 AWS SSOIdentity Store 中的全部群组Groups并以结构化列表形式导出每个群组的 ID、显示名称、描述以及外部身份提供商IdP颁发的标识。本文将以仓库文档 website/docs/d/identitystore_groups.html.markdown 为主线结合 groups_data_source.go 源码与 groups_data_source_test.go 验收测试完整讲解其用法、参数、返回属性与底层实现原理帮助你在自动化配置中批量枚举 SSO 群组并与其他资源联动。数据源概览批量枚举 vs 单条查询Identity Store身份存储是 IAM Identity Center 中保存用户与群组等目录对象的容器。terraformer-provider-aws 在identitystore服务包位于 internal/service/identitystore中提供了两类面向群组的数据源aws_identitystore_groups本数据源批量返回 Identity Store 中的全部群组列表无过滤条件适用于全量盘点场景aws_identitystore_group单数形式按group_id、alternate_identifier或旧版filter精确查询某一个群组详见 identitystore_group.html.markdown。两者的核心输入都是identity_store_id区别在于输出形态单数数据源返回扁平属性复数数据源返回一个可遍历的groups列表。与之对应的还有用户批量数据源aws_identitystore_users见 identitystore_users.html.markdown三者共同构成 Identity Store 的只读查询入口。前置条件如何获取 identity_store_ididentity_store_id是 Identity Store 的唯一标识与 SSO 实例一一对应。最常见且推荐的方式是使用aws_ssoadmin_instances数据源动态获取而不是硬编码data aws_ssoadmin_instances example {} output arns { value tolist(data.aws_ssoadmin_instances.example.arns) } output identity_store_id { value tolist(data.aws_ssoadmin_instances.example.identity_store_ids)[0] }aws_ssoadmin_instances数据源会返回当前账号与区域下所有 SSO 实例的 ARN 集合arns以及与之关联的 Identity Store ID 集合identity_store_ids详细属性见 ssoadmin_instances.html.markdown。注意identity_store_ids与arns在返回时是无序的 Set集合因此在使用时通常需要通过tolist(...)[0]取第一个元素。如果你的账号下只有一个 SSO 实例该写法即可稳定工作。使用本数据源需要执行 AWSidentitystore:ListGroupsAPI 权限建议通过 IAM 策略为运行 Terraform 的身份用户或角色授予类似以下的最小权限仅示意实际请按组织安全规范收敛{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ identitystore:ListGroups, sso:ListInstances ], Resource: * } ] }其中sso:ListInstances用于支持aws_ssoadmin_instances数据源。基本用法示例按照官方文档最简单的用法如下data aws_ssoadmin_instances example {} data aws_identitystore_groups example { identity_store_id data.aws_ssoadmin_instances.example.identity_store_ids[0] } output group_ids { value data.aws_identitystore_groups.example.groups[*].group_id } output display_names { value data.aws_identitystore_groups.example.groups[*].display_name }执行流程为aws_ssoadmin_instances查询 SSO 实例并导出identity_store_idsaws_identitystore_groups以该 ID 为输入调用 AWS Identity Store API 枚举全部群组通过groups[*].xxx的 splat 表达式将列表中的某个字段投影为字符串集合方便后续for_each或输出。若希望确保数据源读取到刚创建/刚修改的群组可以在配置中加入显式依赖这是仓库验收测试采用的做法见下文验收测试一节resource aws_identitystore_group example { identity_store_id data.aws_ssoadmin_instances.example.identity_store_ids[0] display_name ExampleGroup description Managed by Terraform } data aws_identitystore_groups example { depends_on [aws_identitystore_group.example] identity_store_id data.aws_ssoadmin_instances.example.identity_store_ids[0] }由于数据源通常在 plan 阶段读取而群组资源在 apply 阶段才创建二者之间需要depends_on显式建立时序关系否则数据源可能读到创建前的旧状态。参数说明Argument Reference本数据源支持以下参数参数是否必填类型说明identity_store_idRequiredString与 SSO 实例关联的 Identity Store ID用于定位要枚举群组的身份存储。regionOptionalString资源将被管理的区域默认取 Provider 配置中设置的区域。适用于跨区域管理场景。其中region属于通用参数在 Provider 配置中设置了region的前提下可通过在该数据源上显式传入region覆盖默认值。该数据源的 Go 模型定义中嵌入了framework.WithRegionModel见 groups_data_source.go说明它与同服务包内其他数据源一样统一支持区域覆盖能力。返回属性说明Attribute Reference除参数外数据源还导出以下属性属性类型说明groupsListIdentity Store 中的群组列表每个元素包含下述子属性。groups.group_idString群组在 Identity Store 中的标识符。groups.descriptionString指定群组的描述信息。groups.display_nameString群组的显示名称。groups.external_idsList外部身份提供商颁发给该资源的标识列表。groups.external_ids.idString外部身份提供商颁发的标识符。groups.external_ids.issuerString外部标识的颁发方Issuer。典型取值示例如下output first_group { value { id data.aws_identitystore_groups.example.groups[0].group_id name data.aws_identitystore_groups.example.groups[0].display_name description data.aws_identitystore_groups.example.groups[0].description external_ids data.aws_identitystore_groups.example.groups[0].external_ids } }external_ids仅在群组由外部 IdP如 Okta、Azure AD置备进 Identity Store 时才可能非空用于记录该对象在外部系统中的身份由 Identity Center 本地创建的群组通常为空列表。源码实现解析ListGroups 分页与自动展平从源码层面看该数据源由 groups_data_source.go 实现注册逻辑位于 service_package_gen.goFactory: newGroupsDataSource, TypeName: aws_identitystore_groups, Name: Groups,数据源基于 Terraform Plugin Framework 构建其 Schema 定义了两个顶层属性见Schema方法groupsComputed只计算、不可配置的 List 属性元素类型为groupModelidentity_store_idRequired必填的 String 属性。Read方法是整个数据源的核心其调用链如下从配置中读取identity_store_id通过d.Meta().IdentityStoreClient(ctx)获取 AWS SDK for Go v2 的 Identity Store 客户端构造identitystore.ListGroupsInput{IdentityStoreId: ...}请求使用identitystore.NewListGroupsPaginator(conn, input)创建分页器并循环pages.HasMorePages()/pages.NextPage(ctx)拉取所有页将各页的Groups依次追加合并通过fwflex.Flatten将 AWS API 返回结构自动展平到数据源模型最终写入 State。关键点在于该数据源内部自动完成了全量分页拉取。也就是说即使 Identity Store 中群组数量超过单页上限每页 100 条数据源返回的groups也是所有页合并后的完整列表使用方无需感知分页细节。数据源模型定义groupsDataSourceModel与文档属性一一对应type groupModel struct { Description types.String tfsdk:description DisplayName types.String tfsdk:display_name ExternalIDs fwtypes.ListNestedObjectValueOf[externalIDModel] tfsdk:external_ids GroupID types.String tfsdk:group_id IdentityStoreID types.String tfsdk:identity_store_id } type externalIDModel struct { ID types.String tfsdk:id Issuer types.String tfsdk:issuer }从源码结构可以看到groupModel中额外包含了identity_store_id字段即返回的每个群组元素也携带其所属的 Identity Store ID便于在多个 Identity Store 并存时区分数据来源。该字段未在文档属性表中单独列出属于实现层的冗余导出。验收测试数据源与资源联动的标准写法仓库中为aws_identitystore_groups编写了验收测试Acceptance Test位于 groups_data_source_test.go其测试用例结构极具参考价值data aws_ssoadmin_instances test {} resource aws_identitystore_group test { identity_store_id data.aws_ssoadmin_instances.test.identity_store_ids[0] display_name 测试群组名 description Acceptance Test } data aws_identitystore_groups test { depends_on [aws_identitystore_group.test] identity_store_id data.aws_ssoadmin_instances.test.identity_store_ids[0] }测试逻辑要点通过acctest.PreCheckSSOAdminInstances预检确保测试环境存在可用的 SSO 实例先创建aws_identitystore_group资源再用depends_on保证数据源在其之后读取断言使用acctest.CheckResourceAttrGreaterThanValue(dataSourceName, groups.#, 0)即群组列表数量必须大于 0验证数据源确实枚举到了群组。这一写法可直接迁移到生产配置中当你要先建群组、再读取全量群组列表做后续处理时depends_on与数量断言是保证正确性的关键。常见应用场景批量盘点在审计或合规场景中将全量群组 ID、名称与描述导出到 Terraform 状态或输出供其他自动化消费。与for_each联动以groups列表为输入批量管理依赖群组的资源例如resource aws_ssoadmin_account_assignment example { for_each { for g in data.aws_identitystore_groups.example.groups : g.group_id g } instance_arn tolist(data.aws_ssoadmin_instances.example.arns)[0] permission_set_arn aws_ssoadmin_permission_set.example.arn principal_id each.value.group_id principal_type GROUP target_id data.aws_caller_identity.current.account_id target_type AWS_ACCOUNT }多 Identity Store 场景分别传入不同identity_store_id声明多个数据源实例实现多目录群组的统一管理。与单数数据源 aws_identitystore_group 的取舍如果只需要定位某一个群组例如按显示名称DisplayName查找推荐使用单数数据源aws_identitystore_group它支持更精细的查询条件data aws_identitystore_group example { identity_store_id tolist(data.aws_ssoadmin_instances.example.identity_store_ids)[0] alternate_identifier { unique_attribute { attribute_path DisplayName attribute_value ExampleGroup } } }而当需要全量枚举群组、或不确定具体群组 ID 时需要先列出再筛选时aws_identitystore_groups才是合适的选择。二者互相补充配合 identitystore_group.html.markdown 中的完整参数说明group_id、alternate_identifier.external_id、alternate_identifier.unique_attribute可覆盖绝大多数查询需求。小结aws_identitystore_groups是批量枚举 IAM Identity Center 群组的官方数据源参数极简仅identity_store_id必填region可选。返回的groups列表包含group_id、display_name、description与external_ids等核心字段可直接配合 splat 表达式或for_each使用。底层基于 AWS SDK for Go v2 的ListGroupsAPI并通过分页器自动拉取全量数据见 groups_data_source.go使用方无需关心分页。获取identity_store_id的标准姿势是结合aws_ssoadmin_instances数据源动态解析避免硬编码涉及与群组资源的时序依赖时务必使用depends_on参见 groups_data_source_test.go。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价