首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为云模板中的桶编写策略

如何为云模板中的桶编写策略
EN

Stack Overflow用户
提问于 2017-06-06 14:25:25
回答 1查看 771关注 0票数 1

我已经准备了一个云模板,它用AWS::IAM::Role策略创建了arn:aws:iam::aws:policy/AmazonS3FullAccess

在模板成功运行之后,我执行一个python脚本来创建两个前缀为foobar-bucket1foobar-bucket2的桶。

目前,我的模板的上述部分是这样的:

代码语言:javascript
复制
Resources:
  MyRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - ssm.amazonaws.com
            - ec2.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AmazonS3FullAccess
      Path: "/"

问题

我想知道是否需要通过云模板创建的IAM::Role拥有AmazonS3FullAccess来创建这两个桶?

我是否可以只授予角色创建桶的权限,然后只在前缀为foobar-bucket1foobar-bucket2的存储桶上授予foobar-bucket1权限。

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 15:06:14

只要桶名是动态的,您就不能在cloudformation模板中创建包含正确名称的策略。

按实用性的递减顺序:

选项1:在cloudformation模板中创建桶,然后在该模板中相应地创建IAM角色(参见下面的示例)。

代码语言:javascript
复制
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  foobarBucket1:
    Type: AWS::S3::Bucket
  foobarBucket2:
    Type: AWS::S3::Bucket
  LambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action:
          - sts:AssumeRole
      Path: "/"
      Policies:
        - PolicyName: LambdaRolePolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
            - Effect: Allow
              Action:
              - s3:DeleteObject
              - s3:GetObject
              - s3:PutObject
              Resource: !Join ['', ['arn:aws:s3:::', !Ref foobarBucket1 ]]
            - Effect: Allow
              Action:
              - s3:DeleteObject
              - s3:GetObject
              - s3:PutObject
              Resource: !Join ['', ['arn:aws:s3:::', !Ref foobarBucket2 ]]

选项2:另一种可能是将固定前缀合并到策略中,从而部分限制访问。

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::foobarbucket1-*",
            "Effect": "Allow"
        }
    ]
}

选项3:使用桶名作为cloudformation参数,并使用新创建的名称更新现有模板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44392703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档