ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 aws_organizations_delegated_services 数据源查询 AWS Organizations 委托管理员服务列表

使用 aws_organizations_delegated_services 数据源查询 AWS Organizations 委托管理员服务列表 使用 aws_organizations_delegated_services 数据源查询 AWS Organizations 委托管理员服务列表【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇技术指南围绕 Terraform AWS Provider 中的aws_organizations_delegated_services数据源展开讲解如何通过 Terraform 查询指定账号被委托管理Delegated Administrator的所有 AWS 服务清单。读完本文你将掌握该数据源的完整参数与属性结构、底层 AWS Organizations API 调用链与分页处理机制、与aws_organizations_delegated_administrator资源及aws_organizations_delegated_administrators数据源的搭配用法并了解如何基于仓库源码与验收测试验证查询结果。数据源概述在 AWS Organizations 中管理账号Management Account可以将组织内的成员账号注册为某个 AWS 服务的委托管理员Delegated Administrator使其能够代表组织管理该服务例如 Config、CloudTrail、GuardDuty 等。aws_organizations_delegated_services数据源正是用于查询指定账号当前作为哪些 AWS 服务的委托管理员。官方文档的原始说明为Get a list the AWS services for which the specified account is a delegated administrator该数据源以账号 ID 为唯一入参返回该账号名下全部已启用的委托服务集合每个服务条目包含服务主体service principal以及委托启用的时间。它解决了根据账号查服务的查询方向与之互补的 aws_organizations_delegated_administrators 数据源则解决根据服务查账号的方向。示例用法最简单的用法如下直接传入待查询的账号 IDdata aws_organizations_delegated_services example { account_id AWS ACCOUNT ID }在真实场景中账号 ID 通常来自其他资源或数据源的输出而不是硬编码。例如结合aws_caller_identity与aws_organizations_delegated_administrator资源动态获取data aws_caller_identity delegated {} resource aws_organizations_delegated_administrator example { account_id data.aws_caller_identity.delegated.account_id service_principal config-multiaccountsetup.amazonaws.com } data aws_organizations_delegated_services example { account_id data.aws_caller_identity.delegated.account_id depends_on [aws_organizations_delegated_administrator.example] }查询结果可以通过如下方式输出output delegated_service_principals { value data.aws_organizations_delegated_services.example.delegated_services[*].service_principal } output delegated_service_dates { value data.aws_organizations_delegated_services.example.delegated_services[*].delegation_enabled_date }参数参考该数据源支持的参数如下参数类型必填说明account_idstring是组织中作为委托管理员的账号 ID 号码account_id是唯一的必填参数它指定要查询哪个账号的委托服务列表。从源码实现看delegated_services_data_source.goaccount_id在 Schema 中声明为TypeString且Required: true并挂载了verify.ValidAccountID校验函数确保传入的是符合 AWS 账号 ID 格式规范的值。该校验函数位于共享校验工具包 internal/verify/validate.go与 Provider 中其他涉及账号 ID 的资源/数据源共用同一套格式校验逻辑。属性参考除参数外该数据源还会导出以下属性delegated_services— 该账号作为委托管理员的全部服务列表为一个 Set 集合集合中每个元素包含两个子属性delegation_enabled_date— 该账号成为该服务委托管理员的日期。service_principal— 可代表该账号发起操作请求的 AWS 服务名称service principal。时间字段的格式细节值得注意的实现细节是delegation_enabled_date在底层 API 中返回的是时间对象而 Provider 在序列化到 Terraform 状态时统一使用time.RFC3339格式2026-09-18T06:44:57Z这类带时区的 ISO 8601 形式。相关转换逻辑见 delegated_services_data_source.go 中的flattenDelegatedServices函数func flattenDelegatedServices(apiObjects []awstypes.DelegatedService) []map[string]any { if len(apiObjects) 0 { return nil } // ... tfList append(tfList, map[string]any{ delegation_enabled_date: aws.ToTime(apiObject.DelegationEnabledDate).Format(time.RFC3339), service_principal: aws.ToString(apiObject.ServicePrincipal), }) // ... }另外从实现上可以推断若查询到的委托服务列表为空delegated_services会被设置为空集合而非报错便于在count、for_each等场景下安全使用。数据源的唯一标识ID该数据源在读取完成后会调用d.SetId(meta.(*conns.AWSClient).AccountID(ctx))即使用当前执行 Terraform 的调用者账号 ID作为数据源实例的 ID而不是被查询账号的 ID见 delegated_services_data_source.go。因此数据源id仅用于 Terraform 内部的状态跟踪与depends_on依赖管理不应把它当作被查询账号的标识来使用若需要对多个不同账号执行查询应分别声明多个数据源实例每个实例拥有独立的account_id。底层 API 调用链与分页机制从数据源源码可以梳理出完整的底层调用链这也是理解该数据源行为的关键入口dataSourceDelegatedServicesRead从meta中取出 Organizations 客户端conns.AWSClient.OrganizationsClient(ctx)构造请求findDelegatedServicesByAccountID组装organizations.ListDelegatedServicesForAccountInput{AccountId: ...}分页拉取findDelegatedServices使用 AWS SDK for Go v2 提供的organizations.NewListDelegatedServicesForAccountPaginator自动翻页循环HasMorePages()/NextPage(ctx)把每页的DelegatedServices累积到结果切片中见 delegated_services_data_source.go扁平化flattenDelegatedServices将 API 对象转换为 Terraform 可识别的 map 集合写状态d.Set(delegated_services, ...)将结果写入 Terraform 状态。由于底层ListDelegatedServicesForAccount存在分页上限Provider 通过分页器自动处理了委托服务数量较多的场景用户无需关心翻页细节数据源会返回完整集合。该数据源通过 SDK v2 的ReadWithoutTimeout实现读取逻辑并使用sdkdiag.AppendErrorf统一包装诊断信息与仓库内其他 Organizations 数据源的错误处理风格一致。与相关资源、数据源的组合使用在 AWS Provider 中委托管理员相关的三个资源/数据源构成了完整的查询与管理体系资源/数据源类型职责aws_organizations_delegated_administrator资源将成员账号注册/注销为某服务的委托管理员aws_organizations_delegated_administrators数据源查询组织内所有委托管理员账号可按service_principal过滤返回账号的 ARN、邮箱、状态、加入方式等aws_organizations_delegated_services数据源查询指定账号名下所有被委托的服务三者典型的配合模式# 1. 先注册委托管理员 resource aws_organizations_delegated_administrator config_delegated { account_id 123456789012 service_principal config.amazonaws.com } # 2. 再查询该账号名下的所有委托服务注册完成后结果应包含 config.amazonaws.com data aws_organizations_delegated_services config_delegated { account_id aws_organizations_delegated_administrator.config_delegated.account_id depends_on [aws_organizations_delegated_administrator.config_delegated] } # 3. 反向查询某服务如 Config当前委托给了哪些账号 data aws_organizations_delegated_administrators config { service_principal config.amazonaws.com }注意aws_organizations_delegated_administrator资源还支持在 Terraform v1.5.0 使用import块以账号ID/服务主体如123456789012/config.amazonaws.com的格式导入v1.12.0 则可通过identity属性指定service_principal与delegated_account_id导入详见 资源文档。验收测试与使用前提仓库中的验收测试 delegated_services_data_source_test.go 为我们展示了该数据源的完整使用场景与约束测试前置条件acctest.PreCheck(ctx, t)、acctest.PreCheckAlternateAccount(t)需要备用账号以及acctest.PreCheckOrganizationManagementAccount(ctx, t)需要组织管理账号权限说明该数据源只能在组织场景下使用测试依赖测试通过aws_organizations_delegated_administrator资源先注册委托管理员服务主体如config-multiaccountsetup.amazonaws.com、config.amazonaws.com随后查询并断言delegated_services.# 1单服务场景或 2多服务场景Provider 配置测试使用acctest.ProtoV5FactoriesAlternate创建双 Provider 配置aws与awsalternate分别对应组织管理账号与备用账号。这给实际使用者带来两点重要提示仅组织账号可用查询必须由组织管理账号或具有 Organizations 读取权限的账号发起被查询的账号必须已注册为至少一个服务的委托管理员否则返回空集合数据一致性由于委托管理员注册RegisterDelegatedAdministrator属于组织级异步操作在资源创建后立即查询时建议使用depends_on显式声明依赖测试中也采用了这一写法避免竞态导致查询结果不完整。小结aws_organizations_delegated_services数据源以极简的接口单一必填参数account_id封装了 AWS Organizations 的ListDelegatedServicesForAccountAPI自动处理分页、时间格式化与错误诊断。将其与 aws_organizations_delegated_administrator 资源、aws_organizations_delegated_administrators 数据源组合即可在 Terraform 中完成注册委托 → 按账号查服务 → 按服务查账号的完整闭环适合用于组织合规审计、跨账号权限盘点以及基础设施即代码中的委托关系治理。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表