Curl ELI5:如何授予单个用户对S3存储桶的完全访问权限?

Curl ELI5:如何授予单个用户对S3存储桶的完全访问权限?,curl,amazon-web-services,amazon-s3,amazon-iam,Curl,Amazon Web Services,Amazon S3,Amazon Iam,我已经阅读了大量的AWS文档,并尝试了几十种示例配置,但我唯一能够成功使用的AWS策略是允许所有人完全访问S3存储桶的策略。这太可怕了 单用户完全访问场景: 以下是设置: AWS用户jenkins,不属于任何组或角色 包含jenkins AWS_密钥和AWS_访问密钥的服务器 全新的空S3存储桶,使用默认权限记录 问题是是否可以使用与jenkins用户关联的凭据使用curl来实现以下操作: 将包含短语“hello,world”的文本文件foo上载到notes 从notes下载文本文件foo 获取

我已经阅读了大量的AWS文档,并尝试了几十种示例配置,但我唯一能够成功使用的AWS策略是允许所有人完全访问S3存储桶的策略。这太可怕了

单用户完全访问场景:

以下是设置:

  • AWS用户jenkins,不属于任何组或角色
  • 包含jenkins AWS_密钥和AWS_访问密钥的服务器
  • 全新的空S3存储桶,使用默认权限记录 问题是是否可以使用与jenkins用户关联的凭据使用
    curl
    来实现以下操作:

  • 将包含短语“hello,world”的文本文件
    foo
    上载到notes
  • 从notes下载文本文件
    foo
  • 获取notes中所有文件的列表
  • 好的解决方案是什么样的:

    我的问题的可接受解决方案包括以下几个部分:

  • 演示解决方案的一组
    curl
    命令
  • 任何S3设置(即ACL)或IAM用户/组/角色策略的解释,以及这些该死的东西应该如何工作
  • [可选]从2014年起对第三方博客/帖子的引用,其中包含对这些安全部件如何组合的合理解释

  • 然而,像“使用SDK X”或“下载工具Y”这样的解决方案很好,但最终没有帮助,像“您在这里真正想做什么,也许有一个更简单的方法”这样的解决方案将遇到一个涉及本节的评论。感谢您理解,我只需要3条curl语句,以及针对此场景的S3 ACL和IAM策略的解释。

    实现这一点需要两个部分:构建请求和在S3存储桶上设置正确的策略

    简单的部分:对于构建bucket策略,您可以使用
    您可以在此处看到示例:

    用于生成请求。构建请求需要做很多工作,其中最具挑战性的部分是对请求进行签名。您将无法仅使用curl,但您可以不使用sdk就离开。以下是您发布最终卷曲所需的所有事项的示例:


    最后你会看到最后的卷曲。别忘了更新s3(例如SQS,但如果你不想或不能使用sdk,这基本上就是所有需要完成的繁重工作)。

    我正在寻找一个地方来分享这个解决方案,以解决我自己的难题,因为它部分符合你的问题

    我认为aws策略生成器是新手,不友好。我被大量的
    访问被拒绝
    ,我不明白为什么。在我看来,这是一条非建设性的信息,因为它没有说明您违反了什么政策。原来lib还设置了上传文件的公共读取权限,即ACL。长话短说,我错过了PutObjectACL。下面是一些使用AWS IAM设置单个S3存储桶访问的示例,不允许访问任何其他存储桶

    服务器策略 ie IAM用户
    myapp登台
    
    {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “行动”:[
    “s3:ListBucket”,
    “s3:ListMultipartPloadParts”,
    “s3:GetBucketLocation”
    ],
    “资源”:[
    “arn:aws:s3:::myappbucket暂存”
    ]
    },
    {
    “效果”:“允许”,
    “行动”:[
    “s3:PutObject”,
    “s3:PutObjectAcl”
    ],
    “资源”:[
    “arn:aws:s3:::myappbucket暂存/*”
    ]
    }
    ]
    }
    


    人类政策 这里有一个策略,供人类IAM用户使用AWS S3控制台或其他S3查看器来验证上传的内容,而不公开其他bucket的内容(它会列出bucket名称,但不知道如何限制,我也不在乎)

    IAM用户myuser与策略MyappTeamPolicy:

    
    {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “行动”:[
    “s3:ListAllMyBucket”
    ],
    “资源”:[
    “arn:aws:s3::*”
    ]
    },
    {
    “效果”:“允许”,
    “行动”:[
    “s3:ListBucket”,
    “s3:ListMultipartPloadParts”,
    “s3:GetBucketLocation”
    ],
    “资源”:[
    “arn:aws:s3:::myappbucket”,
    “arn:aws:s3:::myappbucket暂存”
    ]
    },
    {
    “效果”:“允许”,
    “行动”:[
    “s3:PutObject”,
    “s3:PutObjectAcl”,
    “s3:GetObject”,
    “s3:GetObjectAcl”,
    “s3:ListMultipartPloadParts”,
    “s3:DeleteObject”
    ],
    “资源”:[
    “arn:aws:s3:::myappbucket/*”,
    “arn:aws:s3:::myappbucket暂存/*”
    ]
    }
    ]
    }
    

    看来您实际上并没有阅读该问题。感谢您提供指向用于签名标题的bash脚本的指针。那很有帮助。关于策略:我已经通读了策略生成器,但是使用该策略生成器生成一个有效的用户特定访问策略失败。你有一个你愿意分享的吗?