1

私の Android アプリでは、AWS の一時認証情報を作成して、秘密の AWS 認証情報をアプリに保存する必要がないようにしたいと考えています。このコードを使用して資格情報を作成します。

CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(), // get the context for the current activity
                "XXXXXXXXXX",
                "us-east-1:XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
                "arn:aws:iam::XXXXXXXXXXX:role/myUnauthRole",
                "arn:aws:iam::XXXXXXXXXXX:role:role/myAuthRole",
                Regions.US_EAST_1
        );
AWSCredentials awsCredentials = new BasicAWSCredentials(cognitoProvider.getCredentials().getAWSAccessKeyId(), cognitoProvider.getCredentials().getAWSSecretKey());

このように試してみると、コードの最後の行に error というエラーが表示されます"Not authorized to perform sts:AssumeRoleWithWeb Identity"myUnauthRoleと で使用しているポリシーに問題があると思いますmyAuthRole。次のようになります。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "sts:GetFederationToken",
    "Resource": "*"
  }]
}

ポリシー内で他に何かしなければならないことはありますか? インターネットで私のユースケースの実例を見つけることができませんでした。ここでサポートを得ることができれば最高です。

ありがとう!

4

2 に答える 2

0

他の回答で述べたように、問題はアクセス ポリシーではなく、信頼関係にあります。信頼関係を確認するためのいくつかの事項:

  • 使用している ID プール ID は、信頼関係に記載されているものと一致していますか?
  • unauth ロールと auth ロールを使用して資格情報プロバイダーを正しい順序でインスタンス化していることを確認してください。

Cognito コンソールを使用する場合、作成されたロールには、その ID プールに対して信頼関係が正しく設定されている必要があります。Cognito 認証について詳しく知りたい場合は、当社のブログで読むことができます。

私が注意したいいくつかの追加事項:

  • CognitoCachingCredentialsProvider、ID プールを変更しても ID をキャッシュします。clear を呼び出して、古いプールからキャッシュされた ID を使用していないことを確認できます。
  • 資格情報の一部をプロバイダーから抽出する必要はありません。単に資格情報プロバイダーをサービス クライアントのコンストラクターに直接渡すことができます。
于 2014-09-25T04:38:48.417 に答える