【问题标题】:Authorise AWS with STS credentials - without session token使用 STS 凭证授权 AWS - 没有会话令牌
【发布时间】:2014-07-02 20:43:50
【问题描述】:

我正在使用 Titanium 开发 iOS 应用程序。部分应用需要将照片直接上传到 S3。现在我不想把主要的 AWS 凭证放在这里,所以我使用安全令牌服务来生成一些临时凭证。这部分工作正常

如果有帮助,生成凭证的代码:

$sts = StsClient::factory(array(
    'key'    => 'KEY_HERE',
    'secret' => 'SECRET_HERE'
));
$result = $sts->getSessionToken();

除其他外,我还回复了AccessKeyIdSecretAccessKeySessionToken。通过 PHP 传递所有这 3 个效果很好,我可以很好地上传。但是,我随后将这些凭据传递给应用程序并需要从那里使用它们。

问题在于,连接到 AWS 的每种方法(包括“官方”AWS 模块)仅使用访问密钥和密钥 - 即无法传递会话令牌,因此我无法授权。例如Titanium AWS 模块的工作方式类似于 AWS.authorize(accessKey, secretKey); - 它不接受会话令牌。

现在,我真正的问题是 - 我如何只用一个密钥/秘密连接并让它被接受。我需要设置一些配置吗?我是否需要破解模块以某种方式传递令牌?我对 AWS 的世界还很陌生,所以有些事情仍然令人困惑,任何指针都将不胜感激!

【问题讨论】:

    标签: php ios amazon-web-services amazon-s3 titanium


    【解决方案1】:

    这是 AWS iOS 开发工具包文档中的示例链接。 他们初始化对象名称 AmazonCredentials(其中包含密钥、访问密钥和会话令牌),然后使用 AmazonCredentials 来初始化 AmazonS3Client。

    https://github.com/awslabs/aws-sdk-ios-samples/blob/master/S3_SimpleDB_SNS_SQS_DemoTVM/AWSiOSDemoTVM/Classes/AmazonClientManager.m

    AmazonCredentials *credentials = [AmazonKeyChainWrapper getCredentialsFromKeyChain];
    
    [s3 release];
    s3  = [[AmazonS3Client alloc] initWithCredentials:credentials];
    s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];
    

    【讨论】:

      【解决方案2】:

      另一种选择是使用 IAM 生成仅允许将文件上传到 S3 的用户。该用户拥有自己的访问密钥和秘密,您可以将其与您的应用程序一起提供。

      如果我没记错的话,AWS 将在 4 月份弃用新账户的主凭证,所以无论如何熟悉 IAM 是一个不错的选择!

      【讨论】:

      • 看起来 IAM 方法是我正在寻找的方式,所以谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2021-01-01
      • 2021-05-23
      • 2016-10-22
      相关资源
      最近更新 更多