使用STS凭证授权AWS - 不使用会话令牌

时间:2014-03-12 08:38:37

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

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

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

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

除此之外,我还会回来AccessKeyIdSecretAccessKey& SessionToken。通过PHP传递所有这三个很好,我可以上传很好。但是,我正在将这些凭据传递给应用程序,需要从那里使用它们。

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

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

2 个答案:

答案 0 :(得分:1)

以下是AWS iOS SDK文档中示例的链接。 他们初始化对象名称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];

答案 1 :(得分:0)

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

如果我没记错的话,AWS在4月份不推荐使用新帐户的主凭据,因此无论如何熟悉IAM都是一个不错的选择!