1

identity level fine grained accessを使用してDynamoDBテーブルのユーザーデータにアクセスしようとしています。ユーザー認証のために私はDeveloper Authenicated Identitiesを使用しています。 Lambdaを使用したDynamoDBファイングレインアクセス

は私のポリシーが含まれていることを達成するために:

{ 
     "Action": [ 
      "dynamodb:GetItem", 
      "dynamodb:UpdateItem" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:dynamodb:eu-west-1:817949094961:table/Users", 
     "Condition": { 
      "ForAllValues:StringEquals": { 
       "dynamodb:LeadingKeys": [ 
        "${cognito-identity.amazonaws.com:sub}" 
       ] 
      } 
     } 
    } 

DynamoDBのテーブルからユーザーのデータにアクセスしようとしている - 私は、次のエラーが取得していますラムダ関数内:それだけで動作しますが

Error in updateUser: AccessDeniedException: User: arn:aws:sts::12312313:assumed-role/LambdAuthEditAccount/awslambda_123_20160410184653936 is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:eu-west-1:12312312:table/Users"}

をJS APIを使用してクライアントブラウザから直接DynamoDBにアクセスする場合は問題ありません。細粒度のアクセス制御が正しく機能します。上記のポリシーブロックは、ユーザー認証ロールとラムダ関数が想定しているロールの両方に追加されます。

ラムダ(上記のエラーに含まれている)が引き受けた役割がユーザー認証された役割に解決されるべきではないと思いますか?

答えて

3

上記のポリシーは、Cognitoによって発行されたidトークンがロールを引き継いでクレデンシャルを取得する必要があるため、ラムダ機能によって引き継がれたロールに対しては機能しません。 次の方法を試すことができます。 1)ID IDとトークン(GetOpenIdTokenForDeveloperIdentityから受け取った)をラムダ関数に渡します。 2)lambda関数からgetCredentialsforIdentityを呼び出して、ログインIDのIDと上記のトークンをログイン・マップに渡します。 3)これらの資格情報を使用して、dynamoDBにアクセスします。

関連する問題