amazon-web-services - 在 Cloudformation 中创建策略,授予从单独的 AWS 账户访问 s3 存储桶的权限

标签 amazon-web-services amazon-s3 aws-cloudformation amazon-iam

我已阅读“在策略中指定主体”文档: 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

引用号:Cross account tutorial

关于amazon-web-services - 在 Cloudformation 中创建策略,授予从单独的 AWS 账户访问 s3 存储桶的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811368/

相关文章:

aws-cloudformation - 上传模板文件 CloudFormation 以允许 EKS 集群上的外部 DNS 时出现错误 : At least one Resources member must be defined.

amazon-web-services - CloudFormation - 在禁用状态下创建 SNS 订阅

amazon-web-services - aws-sdk-go describeStacks() 试图获取 stackids 列表或从堆栈名称获取 stackid

java - aws 为多个设备推送通知

python - boto3 - 获取 boto3 中特定方法所需的所有 API 调用

python - css 在 aws 上的 django 的管理页面中不起作用

amazon-web-services - 如何使用 S3、Cloudfront 和 Route 53 使用裸域将 HTTP 重定向到 HTTPS?

amazon-web-services - 在 AWS Parallelcluster 安装后脚本中访问其他账户的 s3 存储桶

node.js - 如何使用 aws-sdk 获取 AWS S3 上文件的 URL?

python - Django-storages S3Boto3Storage 在读取时发出 HEAD 和 GET 请求