AWS ELB访问日志策略账号ID表适用范围及代码获取方式咨询
问题1解答
- ELB官方文档提供的区域对应账号ID表仅适用于弹性负载均衡(ELB)全类型(经典CLB、应用ALB、网络NLB、网关GLB)的访问日志投递S3场景,不可用于其他AWS服务。
- 不同AWS服务的日志投递、跨账号操作使用的服务关联账号是相互独立的,比如CloudTrail、Config、GuardDuty等服务向S3投递日志时,需要使用对应服务专属的账号ID或服务主体,混用会导致权限校验失败。
问题2解答
- 目前没有公开的AWS API可以直接拉取全区域的ELB服务账号ID列表,也没有单接口可以直接查询当前区域对应的ELB服务账号ID。
- 实际使用中有两种更便捷的实现方案:
- 优先使用ELB服务主体代替固定账号ID配置S3权限,策略示例如下,无需硬编码账号ID,自动适配所有商用区域:
{ "Effect": "Allow", "Principal": { "Service": "elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/your-aws-account-id/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } - 如果必须使用固定账号ID,可以将官方公开的ELB区域-账号映射表预置在代码配置中,代码运行时先调用STS接口
GetCallerIdentity获取当前所在区域,再匹配配置表得到对应账号ID即可。主流IaC工具(AWS CDK、Terraform等)已经内置了该映射表,直接调用对应封装属性即可自动获取当前区域的正确账号ID。
- 优先使用ELB服务主体代替固定账号ID配置S3权限,策略示例如下,无需硬编码账号ID,自动适配所有商用区域:
内容的提问来源于stack exchange,提问作者keren
相关产品推荐
相关产品推荐

