1

私はこの問題のロープの最後です。私はFirebaseからFacebookにログインしたユーザーを認証しようとしていたので、S3バケットへの画像のアップロードを許可することができます。私は、などのドキュメント、サンプルコード、ブログエントリ、上に注ぎました。しかし、私は、次のエラーを取得しておいてください。AWS Cognitoは連合IDを使用して認証していません

Error: Not authorized to perform sts:AssumeRoleWithWebIdentity 

これは私がいない成功を収め、その後のドキュメントです: External Identity Providers » Facebook

私もしましたこのブログのエントリを読んで数回Understanding Amazon Cognito Authenticationと、この引用は何が起こっているかのように見える:

If you see this, double check that you are using an appropriate role for your identity pool and authentication type.

私はそれを言っているか理解が、私は解決策を見つけることができません。私はユーザーを保存したくない、私はちょうど認証し、一時的な資格情報を取得したい。ここに私のコード、役割、およびポリシーファイルがあります。

はJavaScript

AWS.config.update({ 
    region: bucketRegion, 
    credentials: new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: IdentityPoolId, 
    Logins: { 
     'graph.facebook.com': 'my-valid-auth-token-from-fb-after-login' 
    } 
    }) 
}); 

AWS.config.credentials.get(function(err) { 
    // error here 
} 

認証IAMロールポリシー - インラインIAMロールポリシーについて

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "myuserBucketActions", 
     "Action": [ 
      "s3:GetBucketLocation", 
      "s3:ListBucketMultipartUploads" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bucket-name" 
    }, 
    { 
     "Sid": "myuserListBucket", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bucket-name", 
     "Condition": { 
      "StringLike": { 
       "s3:prefix": "folder-in-bucket/*" 
      } 
     } 
    }, 
    { 
     "Sid": "myuserObjectActions", 
     "Action": [ 
      "s3:AbortMultipartUpload", 
      "s3:GetObject", 
      "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bucket-name/folder-in-bucket/*" 
    } 
    ] 
} 

信頼関係

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
{ 
    "Sid": "", 
    "Effect": "Allow", 
    "Principal": { 
    "Federated": "graph.facebook.com" 
    }, 
    "Action": "sts:AssumeRoleWithWebIdentity", 
    "Condition": { 
    "StringEquals": { 
     "graph.facebook.com:appId": "FACEBOOK_APP_ID" 
    } 
    } 
    } 
] 
} 

私は、自分のプール内の信頼関係と認証プロバイダに適切なFB App IDを持っています。私はまた、私のプールでAuthenticated roleの下で上記の認証ロールを選択しました。私も認証されていないアイデンティティを許可していません。

私は正直に何がうまくいかないのか分かりません。この時点で、私は壁にスパゲッティを投げて、何がついているのかを見ています。

クイックサイドの質問:これを動作させて認証されていないユーザーと一緒に行くことができない場合は、認証済みに切り替えると、潜在的な影響がありますか?

ご協力いただきありがとうございます!

答えて

2

信頼関係のように見えるので、sts:AssumeRoleWithWebIdentityを呼び出すことはできません。

あなたはこの

"ForAnyValue:StringLike": { 
    "cognito-identity.amazonaws.com:amr": "graph.facebook.com" 
} 

によって

"Condition": { 
    "StringEquals": { 
     "graph.facebook.com:appId": "FACEBOOK_APP_ID" 
    } 
    } 
    } 

を置き換えることができます。また

"Principal": { 
     "Federated": "cognito-identity.amazonaws.com" 
     } 
によって

"Principal": { 
    "Federated": "graph.facebook.com" 
    } 

を置き換えます

関連する問題