2014-09-04 239 views
5

我一直試圖在iOS上使用AWS 2天。我從這裏下載了示例項目:https://github.com/awslabs/aws-sdk-ios-samples亞馬遜網絡服務SDK iOS

我完全按照步驟說的那樣使用cocoapods鏈接所有庫。

我還創建了一個水桶,再按照如何獲得ID,以便在代碼中改變它的步驟如下所示:

AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider 
                 credentialsWithRegionType:AWSRegionUSEast1 
                 accountId:AWSAccountID 
                 identityPoolId:CognitoPoolID 
                 unauthRoleArn:CognitoRoleUnauth 
                 authRoleArn:nil]; 

所以基本上,當我試着上傳一些圖片/文件(在使用亞馬遜S3的存儲服務的例子中,我得到一個錯誤:

2014-09-04 15:11:57.475 S3TransferManagerSample[5437:400b] AWSiOSSDKv2 [Error] AWSCredentialsProvider.m 
    line:356 | __40-[AWSCognitoCredentialsProvider refresh]_block_invoke299 | Unable to refresh. 
    Error is [Error Domain=com.amazonaws.AWSSTSErrorDomain Code=0 "The operation couldn’t be completed. (com.amazonaws.AWSSTSErrorDomain error 0.)" 
    UserInfo=0x14d17770 {Type=Sender, Message=Not authorized to perform sts:AssumeRoleWithWebIdentity, __text=(
"\n ", 
"\n ", 
"\n ", 
"\n " 
), Code=AccessDenied}] 

只是要清楚,我已經創建了一個角色,並給它一個政策:AdministratorAccess和所使用的角色ARN設置

unauthRoleArn:CognitoRoleUnauth 

我讀過文檔,似乎無法在任何地方找到問題。我有一種感覺,它與這個角色的角色和政策有關。

我真的很感激有關如何開始或如何解決此問題的任何提示。

謝謝,如果您需要關於該問題的更多細節,請隨時發表評論,我會給予更多,因爲問題有點冗長。

回答

5

您遇到的錯誤是由於信任關係在您的角色中,而不是角色上憑據的權限。

你必須確保你的角色的信任關係:

  1. 相信你正在使用的身份庫(AUD相匹配的身份池ID)。
  2. 與所提供的認證身份信託(該AMR匹配未經認證認證取決於你的使用情況)。

在修改設置嚮導期間創建的角色或重用角色時要小心,因爲這兩個值可能不匹配並生成上述錯誤。

您可能還會發現this blog post有助於理解Cognito身份驗證的工作原理。

+0

當我創建角色時,我只將該角色的權限更改爲Administrator Access,但我沒有更改任何其他內容。 我應該改變角色的信任關係嗎?我真的不知道該怎麼設置。 – RJiryes 2014-09-07 06:30:55

+0

另外,如果它是「爲了這個身份池」,你是什麼意思?我創建了身份池作爲Cognito服務的一部分,而角色則在IAM管理控制檯中設置。我已經閱讀了關於AWS的很多內容,我覺得我有點困惑。對不起,如果我看起來有點不清楚。謝謝。 – RJiryes 2014-09-07 07:49:31

+0

我繼續前進並刪除了當前的身份庫並創建了新的身份庫,但我得到的錯誤消失了。但現在它沒有上傳文件,我在嘗試上傳時遇到了另一個錯誤: – RJiryes 2014-09-07 10:50:36