3

Cognito と一緒に AWS SDK for Android を使用して、(Login With Amazon 経由で) ユーザーを AWS リソースに認証しています。私がやろうとしているのは、次のように S3 バケットをセットアップすることです。

./my-bucket
  ├── first_user@email.com
  └── second_user@email.com

したがって、my-bucketバケットには、ユーザーの電子メール アドレスに基づくフォルダーが含まれます。

ポリシーを設定するための最初の刺し傷は次のとおりです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::my-bucket"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket/${www.amazon.com:user_id}",
        "arn:aws:s3:::my-bucket/${www.amazon.com:user_id}/*"
      ]
    }
  ]
}

テストとして、次のようなユーザーのフォルダーをダウンロードしようとしています。

final Map logins = new HashMap();
logins.put("www.amazon.com", token);
credentialsProvider.withLogins(logins);

final TransferManager transferManager = new TransferManager(credentialsProvider);
MultipleFileDownload download = transferManager.downloadDirectory("my-bucket", "first_user@email.com", new File("/sdcard/Download"));

ただし、これを実行すると、「禁止」例外が発生します。ポリシーを変更して、明示的に参照するのfirst_user@email.comではなく、正常に${www.amazon.com:user_id}機能するようにします。

質問

  1. LWA ユーザーの電子メール アドレスを使用して、このように構成することは可能ですか?
  2. リクエストを行ったときに実際にどのパラメータが発生しているかを記録する方法はありますか?

このような参考文献を見たことがありますが、どれが実際に当てはまるかわかりません。リクエストを行ったときに、どのような値が出てくるかを何らかの方法で確認できれば素晴らしいと思います。

前もって感謝します。

4

1 に答える 1

2

あなたの質問に答えて:

  1. いいえ、Cognito または Login with Amazon だけの Web ID フェデレーションでこれを行うことはできません。このフローで返される識別子は疑似匿名です。Cognito ID はus-east-1:abcd-123456-xxxxx-xxxxx-xxxxの形式になります。Login with Amazon を直接使用する場合、ID はamzn-1234567890の形式になります。
  2. Cognito から提供された ID は、getIdentityIdメソッドを呼び出すだけで、資格情報プロバイダーで利用できます。未加工の Web ID フェデレーション フローを使用している場合、AssumeRoleWithWebIdentityResult クラスには、プロバイダー、アプリケーション/オーディエンス、およびユーザー ID の値が含まれます。
于 2014-09-05T18:07:15.707 に答える