我已阅读“在策略中指定主体”文档: https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html ,并从中推断出一些行为以及其他不专门涉及 Cloudformation 的 SO(如 aws lambda function getting access denied when getObject from s3 )问题。
当我尝试创建授予外部角色访问本地存储桶的策略时,我仍然被这个错误所困扰。 Cloudformation 的错误是:策略文档不应指定主体。
情况分割
我有两个 AWS 账户。账户 A 创建了一个存储桶,我想授予账户 B 对其的写入权限。
在账户 A Cloudformation 中,我创建了一项策略,授予账户 B 角色对所述存储桶的访问权限。来自 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html 的指南。帐户 B 存在该角色。
AccountBWriteToS3策略:
类型:'AWS::IAM::策略'
特性:
策略名称:AccountBWriteToS3Policy
政策文件:
版本:2012-10-17
陈述:
- 主要的:
AWS: 'arn:aws:iam::123456789876:role/AccountBRole'
效果:允许
行动:
- 's3:PutObject'
- 's3:列表桶'
资源:!Sub
- '${bucketArn}/*'
- BucketArn: !GetAtt
- 账户ABucket
- 阿恩
角色:
- 账户角色
但是cloudformation执行失败,并报错回滚
策略文档不应指定主体。
我很困惑。
谁能解释一下这个错误吗?
有人能指明前进的道路吗?
这似乎是一个简单而常见的需求,有大量示例涵盖。也许我应该在存储桶声明本身中指定策略,而不是创建帐户范围的策略?
最佳答案
您需要创建一个具有原则的“信任策略”角色,然后创建一个“权限策略”以允许对 S3 存储桶进行读/写访问。
这是我的 Cloudformation 的片段。
Role:
Type: "AWS::IAM::Role"
Properties:
RoleName: !Sub '${RuleName}-Role'
Path: "/"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: !Sub 'arn:aws:iam::${AccountID}:user/*'
Action: sts:AssumeRole
RolePolicies:
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: !Sub '${RuleName}-RolePolicies'
Roles:
- Ref: "Role"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- s3:Get*
- s3:Put*
- s3:List*
- s3:AbortMultipartUpload
Resource:
- !Ref Bucket
关于amazon-web-services - 在 Cloudformation 中创建策略,授予从单独的 AWS 账户访问 s3 存储桶的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811368/