Amazon cloudformation 仅创建S3用户

Amazon cloudformation 仅创建S3用户,amazon-cloudformation,Amazon Cloudformation,我试图创建一个仅限S3的用户,根据定义,该用户将无法访问任何其他资源。用户可以从S3上传和下载文件。我已经创建了一个基本的模板,可以在这里找到 但在我的情况下,允许访问云信息是不必要的。我已经阅读了以下页面,但不知道如何将它们包含在我的模板中 创建仅S3用户所需的最小参数是什么 更新: 以下是我尝试的cloudformation代码和我得到的错误: 错误消息:无法创建以下资源:[CFNRole,cfUser]。用户请求的回滚 模板: Parameters: NewUsername:

我试图创建一个仅限S3的用户,根据定义,该用户将无法访问任何其他资源。用户可以从S3上传和下载文件。我已经创建了一个基本的模板,可以在这里找到

但在我的情况下,允许访问云信息是不必要的。我已经阅读了以下页面,但不知道如何将它们包含在我的模板中

创建仅S3用户所需的最小参数是什么

更新: 以下是我尝试的cloudformation代码和我得到的错误:

错误消息:无法创建以下资源:[CFNRole,cfUser]。用户请求的回滚

模板:

Parameters:
  NewUsername:
    NoEcho: 'false'
    Type: String
    Description: New account username
    MinLength: '1'
    MaxLength: '41'
    ConstraintDescription: the username must be between 1 and 41 characters
  Password:
    NoEcho: 'true'
    Type: String
    Description: New account password
    MinLength: '1'
    MaxLength: '41'
    ConstraintDescription: the password must be between 1 and 41 characters

Resources:
  CFNUser:
    Type: AWS::IAM::User
    Properties:
      LoginProfile:
        Password: !Ref 'Password'
      UserName : !Ref 'NewUsername'
  CFNRole:
    Type: AWS::IAM::Role
    Properties :
      PermissionsBoundary : arn:aws:iam::aws:policy/AmazonS3FullAccess
      RoleName : 'myPermissionBoundary'
  CFNKeys:
    Type: AWS::IAM::AccessKey
    Properties:
      UserName: !Ref 'CFNUser'

Outputs:
  AccessKey:
    Value: !Ref 'CFNKeys'
    Description: AWSAccessKeyId of new user
  SecretKey:
    Value: !GetAtt [CFNKeys, SecretAccessKey]
    Description: AWSSecretAccessKey of new user
我已检查此链接,但不确定如何在当前模板中包含策略。

您明确授予新用户在模板中访问Cloudformation的权限。 你有这个部分:

  CFNUserPolicies:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: CFNUsers
      PolicyDocument:
        Statement:
        - Effect: Allow
          Action: ['cloudformation:Describe*', 'cloudformation:List*', 'cloudformation:Get*']
          Resource: '*'
      Groups: [!Ref 'CFNUserGroup']
  CFNAdminPolicies:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: CFNAdmins
      PolicyDocument:
        Statement:
        - Effect: Allow
          Action: cloudformation:*
          Resource: '*'
Groups: [!Ref 'CFNAdminGroup']
其中您的allow语句专门提供对Cloudformation的访问。如果您试图访问s3,那么为什么要访问Cloudformation

如果您希望用户只能访问s3,并进一步访问一个特定的s3存储桶,那么您的策略将类似于以下内容:json中的注释:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                        "s3:GetBucketLocation",
                        "s3:ListAllMyBuckets"
                      ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET",
                "arn:aws:s3:::YOUR-BUCKET/*"
            ]
        }
    ]
}
如果您希望您的用户能够访问所有存储桶,那么您的策略将更像这样:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1557048549844",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

查看此来源:

首先,您确定要通过CloudFormation模板创建此用户吗?这意味着堆栈必须在需要该用户时运行。通常,在IAM控制台中手动创建IAM用户,然后将凭据提供给将使用IAM用户的人员或应用程序。第二,我认为你是从某处复制模板而不是自己编写模板,这是否正确?该策略非常明确地授予了CloudFormation权限,但没有授予S3任何权限。您个人是否熟悉IAM政策的工作方式?