如何使用AWS CDK为S3存储桶配置跨多AWS账户写入的资源策略
解决方案
你当前使用AnyPrincipal作为授权主体会开放所有AWS身份的访问权限,不符合只允许指定账户访问的要求,需要替换为指定账户的主体对象。
正确实现步骤
- 首先从IAM模块导入
AccountPrincipal类 - 定义你需要授权的付款账户ID列表
- 构造资源策略时将账户ID映射为
AccountPrincipal实例传入主体列表
完整代码示例:
// 导入依赖 import { AccountPrincipal, Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; // 替换为你实际的付款账户A、B的12位AWS账户ID const allowedPayerAccounts = ['111122223333', '444455556666']; accessLogsBucket.addToResourcePolicy( new PolicyStatement({ effect: Effect.ALLOW, actions: [ "s3:ReplicateObject", "s3:ReplicateDelete" ], principals: allowedPayerAccounts.map(accountId => new AccountPrincipal(accountId)), resources: [ accessLogsBucket.arnForObjects("*") ] }) );
可选补充说明
- 如果你需要允许这些账户执行常规写入操作而非仅跨区域复制操作,可以在
actions数组中追加s3:PutObject等所需权限 - 你创建存储桶时已经开启了版本控制、禁止公共访问,符合日志存储桶的安全最佳实践
- 部署前可以执行
cdk diff命令查看生成的资源策略是否和你预期的JSON示例完全匹配
内容的提问来源于stack exchange,提问作者khinester
相关产品推荐
相关产品推荐

