【问题标题】:Secured upload to S3 from mobile applications从移动应用程序安全上传到 S3
【发布时间】:2019-10-07 14:55:14
【问题描述】:

我有一个 IOS 和 Android 应用程序。每个应用程序都会将几个文件一一上传到 AWS S3。有没有一种安全的方法可以做到这一点,而无需提供 AWS 凭证?我不希望应用访问如此敏感且始终有效的信息。

到目前为止,我找到的最接近的解决方案是 preSignURL,它由我的服务器生成,并在临时时间内有效。最大的问题是它只对一个特定的文件有效。我需要一个对临时时间和许多文件都有效的 URL。

我还找到了 POST 解决方案: https://docs.aws.amazon.com/en_us/AmazonS3/latest/API/sigv4-post-example.html

但在这种情况下,他们对 AWS 凭证进行硬编码,这对我来说很成问题。

是否有任何解决方案可以让我的服务器提供一些临时链接来上传应用程序需要的任何文件?类似于 PreSignURL 但没有名称限制?

谢谢。

【问题讨论】:

  • 为什么不尝试从服务器上传文件而不是直接从应用程序上传?
  • 您能否提供其他信息,例如谁将成为应用程序的用户,您计划针对任何后端服务(您提到服务器)对用户/应用程序进行身份验证?跨度>
  • 我打算以后用访问令牌与服务器通信

标签: amazon-web-services amazon-s3 mobile


【解决方案1】:

我为您做了一个小研究,我认为最好的解决方案是创建一个临时 AWS 凭证。您每 1 小时重新创建一次有效期为 2 小时或类似时间的新临时凭据。

    private Credentials GenerateTempCredentials()
    {         
        AssumeRoleRequest _assumeRoleRequest = new AssumeRoleRequest
        {
            DurationSeconds = 3600,
            RoleSessionName = "MySession",
            RoleArn = "arn:aws:iam::123123123123:role/RoleName"
        };
        AssumeRoleResponse res = _sts_client.AssumeRole(_assumeRoleRequest);                  
        Credentials cred = res.Credentials;                    
        return cred;                   
    }

    public Credentials GetTempCredentials()
    {
        return _credentials;
    }

当您创建 AWS 用户时,请确保根据您的需要设置其策略。

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 2013-03-26
    • 2015-08-31
    • 2015-07-24
    • 1970-01-01
    • 2015-10-01
    • 2010-11-06
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多