 chenchenandClaude Opus 4.8
|
8529340a40
|
feat(discovery): AWS full-account resource discovery — EC2/RDS/S3/Lambda List/Describe (#62)
#5 的 AWS 适配器只走 Resource Groups Tagging API GetResources,仅覆盖「已打标签」资源,
不含未打标签的 EC2/RDS/S3 等(代码已据实声明,#5 全量诉求未据此关闭)。本次补齐:
- 新增服务级发现(aws_resource_discovery_services.go):EC2 DescribeInstances、
RDS DescribeDBInstances、S3 ListBuckets、Lambda ListFunctions,均复用已通过 AWS
get-vanilla 向量验证的 SigV4 签名(awsSigV4Authorization),无 AWS SDK 依赖。
- discoverAWS 改为编排:tagged + 各服务级结果按 ARN 合并去重(tagged 优先保留,标签信息更全);
原 tagged 逻辑保留为 discoverAWSTagged。
- 失败降级:单服务调用失败(如缺该服务读权限)只记日志并跳过,不让整次发现失败;仅当
tagged 报错且无任何结果时才抛原始错误,保证凭据/区域问题可见。
- 区域:EC2/RDS/Lambda 用账号配置 region;S3 ListBuckets 全局(us-east-1 签名)。跨 region
扫描不在本次范围(单 region),后续可在 #62 跟踪。
安全:沿用 applyDiscoveredResourceFields 既有约束——发现出的资源 SecretRef 恒空,绝不继承
账号 secret_ref;凭据仍走 cloud_account secret 链路,不落代码/日志。
影响面:仅 HM 内部云资源发现;不涉及 Client、AM、agent_swarm、计费、审计字段、密钥写入。
测试:parseEC2Instances/parseRDSInstances/parseS3Buckets/parseLambdaFunctions(真实响应
样本 XML/JSON)+ mergeDedupeByExternalID(去重/优先/空 id);SigV4 向量与既有发现测试不变;
go build ./... 与 controller 测试全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 20:38:17 +08:00 |
|
 chenchenandClaude Opus 4.8
|
df8fa80eba
|
fix(discovery): address #5 review — no secret inheritance, GCP URL, tagged-only scope
回应 Fasthei 复审(PR #52 CHANGES_REQUESTED):
1. 发现出的子资源不再继承账号 secret_ref:抽出 DB 无关的 applyDiscoveredResourceFields,
恒置 SecretRef=""(避免账号级凭据引用经 resourceToResponse / grant manifest 扩散到每个
VM/S3/DB)。加 TestApplyDiscoveredResourceFields_NoSecretInheritance。
3. GCP searchAllResources URL 修正:gcpSearchAllResourcesURL 不再 PathEscape 整个 scope
(slash 是路径模板一部分),生成 /v1/projects/<id>:searchAllResources。加 TestGCPSearchAllResourcesURL。
2. AWS 覆盖范围据实声明:Resource Groups Tagging GetResources 仅覆盖 tagged/曾 tagged 资源,
不覆盖未打标签 EC2/RDS/S3;注释明确「tagged resources only」,#5 全量发现诉求不据此关闭。
controller 全套测试通过,go build/vet 干净。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-10 14:29:57 +08:00 |
|
 chenchenandClaude Opus 4.8
|
3fb07ad5fb
|
feat(discovery): provider-agnostic cloud discovery — AWS + GCP adapters (#5)
#5 三项 DoD 全部落地(纯 Go,无云 SDK,REST + std crypto,非 mock):
- 抽象 provider 接口(DoD #3):cloudDiscoveryProvider{ name, discover } + 统一
upsertDiscoveredCloudResources + 跨云一致分类 classifyCloudResourceType(vm/
database/blob/cloud_resource)。新增 dispatcher DiscoverCloudResources 按
account.Provider 路由 azure/aws/gcp。Azure 适配器复用既有 ARM 客户端,三家同抽象。
- AWS adapter(DoD #1):纯 Go AWS Signature V4(crypto/hmac+sha256)+ Resource
Groups Tagging API GetResources(分页)→ ARN 归一化。SigV4 实现以 AWS 官方
"get-vanilla" 测试向量验证签名正确(TestAWSSigV4_VanillaVector)。
- GCP adapter(DoD #2):服务账号 RS256 JWT 断言 → OAuth2 token → Cloud Asset
Inventory searchAllResources(分页)→ asset 归一化。JWT 以生成密钥 RS256 验签
roundtrip 验证(TestBuildGCPAssertion_RS256Roundtrip)。
路由:新增 POST /api/resources/:id/discover-cloud(按 provider 路由);保留既有
/:id/azure/discover 向后兼容。落库与 Azure 一致(resource_type=cloud_resource,
跨云类别入 metadata.classified_type),幂等 upsert(user+type+provider+external_id)。
测试:分类 / ARN 解析 / SigV4 官方向量 / GCP RS256 roundtrip;controller 全套通过,
go build/vet 干净。
Affects: Manager only(资源发现,新增只读发现端点 + 抽象层)。无计费/审计/部署改动;
凭据经既有 secret store 读取,不落明文。
Closes #5
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-10 13:07:48 +08:00 |
|