允许第三方应用将文件上传到AWS s3

时间:2016-01-12 22:29:10

标签: amazon-web-services amazon-s3 aws-sdk

我需要一种方法来允许第三方应用将txt文件(350KB并缓慢增长)上传到AWS中的s3存储桶。我希望有一个涉及端点的解决方案,他们可以使用标头中的某些授权密钥等进行PUT。该桶不能公开给所有人。

我读过这个:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html 而这:http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html

但似乎无法找到我正在寻找的解决方案。

2 个答案:

答案 0 :(得分:1)

我建议使用AWS API网关,lambda函数和最终S3的组合。

您的客户将调用API网关端点。 端点将执行AWS lambda函数,然后将该文件写入S3。 只有lambda函数需要对存储桶的权限,因此存储桶将保持非公开和受保护。

如果您已经运行了EC2实例,则可以使用EC2实例上运行的自定义代码替换lambda部分,但使用lambda将允许您拥有无服务器'解决方案,自动缩放,没有分钟。每月费用。

答案 1 :(得分:0)

我最终使用了AWS SDK。它可用于Java,.NET,PHP和Ruby,因此第三方应用程序使用其中之一的可能性非常高。见这里:http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpNET.html

在这种情况下,只需使用SDK上传文件即可。我在我的本地机器上运行的.NET中编写了一个示例版本。首先,安装AWSSDK Nuget包。然后,这是代码(取自AWS样本):

C#:

var bucketName = "my-bucket";
var keyName = "what-you-want-the-name-of-S3-object-to-be";
var filePath = "C:\\Users\\scott\\Desktop\\test_upload.txt";

var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);

try
{
    PutObjectRequest putRequest2 = new PutObjectRequest
    {
        BucketName = bucketName,
        Key = keyName,
        FilePath = filePath,
        ContentType = "text/plain"
    };
    putRequest2.Metadata.Add("x-amz-meta-title", "someTitle");

    PutObjectResponse response2 = client.PutObject(putRequest2);

}
catch (AmazonS3Exception amazonS3Exception)
{
    if (amazonS3Exception.ErrorCode != null &&
(amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                    ||
                    amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
        {
            Console.WriteLine("Check the provided AWS Credentials.");
            Console.WriteLine(
                        "For service sign up go to http://aws.amazon.com/s3");
        }
        else
        {
            Console.WriteLine(
                "Error occurred. Message:'{0}' when writing an object"
                        , amazonS3Exception.Message);
        }
}

的Web.config:

<add key="AWSAccessKey" value="your-access-key"/>
<add key="AWSSecretKey" value="your-secret-key"/>

您可以通过在AWS账户中创建新用户来获取accesskey和密钥。当您这样做时,他们会为您生成这些内容并提供下载。然后,您可以将AmazonS3FullAccess策略附加到该用户,并将文档上载到S3。

注意:这是一个POC。在使用此实际的第三方应用程序中,出于安全目的,他们不想在Web配置中对凭据进行硬编码。见这里:http://docs.aws.amazon.com/AWSSdkDocsNET/latest/V2/DeveloperGuide/net-dg-config-creds.html