程序文件上传到AWS S3存储桶

时间:2019-06-22 17:14:27

标签: node.js amazon-web-services amazon-s3

我想提供一个AWS S3存储桶和一个IAM用户(仅具有编程访问权限),因此我可以仅为该用户提供文件上传特权。用户将收到AWS访问密钥ID和秘密访问密钥,以在简单的Node.js或Python控制台应用程序中使用。 要实现此目标需要多少最小步骤?

  1. 创建具有 no 权限的IAM用户(具有编程访问权限)-完成
  2. 创建一个S3存储桶并阻止所有公共访问-完成
  3. 添加如下所示的存储桶策略:
*.cnf

我有一个简单的node.js应用程序,它将给定文件上传到存储桶:

{
    "Version": "2012-10-17",
    "Id": "Policy1234567",
    "Statement": [
        {
            "Sid": "Stmt1234567",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::1234567890:user/someuser"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::some-bucket-name/*"
        }
    ]
}
  1. 由于该用户没有任何权限,我是否仍需要创建一个自定义策略来应用为该用户的权限? OOTB策略要么过于宽松(AmazonS3FullAccess),要么过于严格(AmazonS3ReadOnlyAccess)。另一个令人困惑的地方是,我设置了一个存储桶策略来规范特定用户对存储桶的访问,这样还不够吗?

1 个答案:

答案 0 :(得分:2)

您也可以为IAM用户创建自定义策略,只允许PUTObject进入特定存储桶。

示例:

{
    "Version": "2012-10-17",
    "Id": "Policy1234567",
    "Statement": [
        {
            "Sid": "Stmt1234567",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::some-bucket-name/*"
        }
    ]
}

如果存储区和IAM用户位于同一帐户中,那么如果IAM用户具有上述策略,则不需要存储区策略。

您肯定需要基于以下链接的身份策略:

https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html