ios - 使用 "AssumeRole"api AWS iOS sdk 生成临时凭证

标签 ios amazon-web-services credentials temporary

我是 AWS iOS SDK 的新手。我正在尝试使用来自 iPhone 应用程序的 "assumeRole" api 生成临时安全凭证。我在我的项目中添加了 AWSSecurityTokenService、AWSRuntime 框架。下面是代码。

#import <AWSSecurityTokenService/AWSSecurityTokenService.h>
#import <AWSSecurityTokenService/SecurityTokenServiceAssumeRoleRequest.h>
#import <AWSSecurityTokenService/SecurityTokenServiceAssumeRoleResponse.h>
#import <AWSSecurityTokenService/AmazonSecurityTokenServiceClient.h>

- (void)viewDidLoad
{
    [super viewDidLoad];
    TSC = [[AmazonSecurityTokenServiceClient alloc]init];
    request = [[SecurityTokenServiceAssumeRoleRequest alloc]init];
    request.roleArn = @"arn:aws:iam::xxxxxxxxxx:role/test";
    request.roleSessionName = @"Bob";
    request.policy = @"None";
    request.durationSeconds=[NSNumber numberWithInt:3600];
    request.externalId=@"abc";

    //[self assumeRole:request];
    @try {
        response =  [TSC assumeRole:request];
        NSLog(@"%@ is response",response);
    }
    @catch (AmazonClientException *exception) {
        NSLog(@" \n\n\nexception %@ \n\n\n", exception);
    }
    @finally {
        NSLog(@"Done");
    }    
}

我收到以下错误消息和异常。任何帮助,将不胜感激。

objc[1938]:AXEmojiUtilities 类在/Applications/Xcode5-DP.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/System/Library/中实现PrivateFrameworks/AccessibilityUtilities.framework/AccessibilityUtilities 和/Applications/Xcode5-DP.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/usr/lib/libAXSpeechManager.dylib。将使用两者之一。哪一个是未定义的。 2013-01-17 17:16:51.807 AssumeRoleTest[1938:3207] NSURLConnection/CFURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9807) 2013-01-17 17:16:51.810 AssumeRoleTest[1938:c07]
exception AmazonServiceException { RequestId:(null), ErrorCode:(null), Message:Error Domain=NSURLErrorDomain Code=-1202 “此服务器的证书无效。您可能正在连接到伪装成“sts.amazonaws”的服务器.com”,这可能会使您的 secret 信息面临风险。” UserInfo=0xa381cb0 {NSErrorFailingURLStringKey= https://sts.amazonaws.com/ , NSLocalizedRecoverySuggestion=您是否仍要连接到服务器?, NSErrorFailingURLKey= https://sts.amazonaws.com/ , NSLocalizedDescription=此服务器的证书无效。您可能正在连接到一个伪装成“sts.amazonaws.com”的服务器,这可能会使您的 secret 信息面临风险。NSUnderlyingError=0x8a64a70“此服务器的证书无效。您可能正在连接到一个服务器假装是“sts.amazonaws.com”,这可能会使您的 secret 信息面临风险。”,NSURLErrorFailingURLPeerTrustErrorKey=}

  1. 还有一个问题。如何在请求中提供保单详情?我是说直接贴json格式可以吗?

    { “陈述”: [ { "效果": "允许", “行动”: [ “s3:放*”, “s3:获取*” ], “资源”:[ “*” ] } ]

最佳答案

我是适用于 iOS 的 AWS 开发工具包的维护者之一。我会尝试一次解决您的一个问题。

  1. 请务必了解 AssumeRoleRequest 是一个签名请求,并且确实需要使用凭证初始化您的 AmazonSecurityTokenServiceClient。您可能需要考虑使用 AssumeRoleWithWebIdentityRequest 来代替。我们有a sample这展示了如何使用网络身份联合。
  2. 将政策设置为“无”可能会导致错误。您应该提供您想要提供的策略的 JSON,或者提供 nil。此策略必须是为您所担任的角色设置的权限的子集。
  3. 您收到的 SSL 错误似乎意味着您要么得到了错误的 DNS 结果,要么可能位于某种代理后面。其他 AWS 服务是否会给出类似的结果?

最后,您的代码中应该只需要以下导入行:

#import <AWSRuntime/AWSRuntime.h>
#import <AWSSecurityTokenService/AWSSecurityTokenService.h>

关于ios - 使用 "AssumeRole"api AWS iOS sdk 生成临时凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19450108/

相关文章:

ios - 为什么 didUpdateLocations 值与 map 上的 "my location"不同?

ios - 在 iOS 中动态创建表单

Python - put_item() S3、Lambda、DynamoDB——发生错误(ValidationException)

amazon-web-services - Terraform Auto Scaling 组 - 为什么没有启动任何实例?

amazon-web-services - 什么是 AWS DynamoDB 持久性 SLA?

android - 使用配对的 Google 帐户作为您的 Android 应用登录

java - Spring Data从文件库或其他 protected 源读取MongoDB密码

windows-7 - 从 Windows 7 凭据管理器获取 PowerShell 中的缓存凭据

ios - iOS 6.1 中用于自定义相机 View 的自动旋转

ios - 带有 UITextfield 的 UITableViewCell 没有以正确的方式居中