0

AWSを初めて使用し、既存のプロジェクトを継承しました。AWS IAMファイングレイン・アクセス・コントロール(APIGatewayとLambda)

プロジェクトでは、Vue.jsがフロントエンドとして使用され、データはDynamoDBに保存されます。ユーザー認証は、Cognitoを使用して行われ、IAMロールが添付されています。データは、APIGatewayとLambdaを介してデータベースから別の役割で取得されます。

フロントエンドの役割

信頼できるエンティティ:cognito-identity.amazonaws.com

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "lambda:InvokeFunction" 
     ], 
     "Resource": [ 
      "*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "execute-api:Invoke" 
     ], 
     "Resource": [ 
      "*" 
     ] 
    } 
] 
} 

バックエンドの役割

トラステッド・エンティティ: アイデンティティプロバイダ(S)apigateway.amazonaws.com、 アイデンティティプロバイダlambda.amazonaws.com

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stmt1493183261000", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:BatchGetItem", 
      "dynamodb:BatchWriteItem", 
      "dynamodb:DeleteItem", 
      "dynamodb:DescribeStream", 
      "dynamodb:DescribeTable", 
      "dynamodb:GetItem", 
      "dynamodb:GetRecords", 
      "dynamodb:GetShardIterator", 
      "dynamodb:ListStreams", 
      "dynamodb:ListTables", 
      "dynamodb:PutItem", 
      "dynamodb:Query", 
      "dynamodb:Scan", 
      "dynamodb:UpdateItem", 
      "dynamodb:UpdateTable" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:*:table/foo", 
      "arn:aws:dynamodb:us-east-1:*:table/bar", 
      "arn:aws:dynamodb:us-east-1:*:table/bar/index/dayKey-captureTime-index" 
     ] 
    } 
] 
} 

しかし、特定のユーザーにグループを割り当てて、特定のアイテムにアクセスできるようにするため、ダイナミックデータベース内の他のアイテムへのアクセスを制限することができます。

IAMファイングレインアクセスコントロールが必要ですが、ユーザーはすべてのデータにアクセスできるAPIGatewayを通じてデータベースにアクセスしているため機能しません。

私はAPIGatewayとLambdaをドロップして、直接DynamoDBと話すことができます(Lambdaはデータに対していくつかの作業を行うので、この考え方は悪い考えです。このアプローチにより、私のアプリケーションはAWSにあまりにも緊密に接続されます) 。

別のアクセス許可を使用してAPIを作成することもできますが、これは適切な方法ではないようです。

誰にも提案はありますか?より良いアプローチを知っていますか?

答えて

0

APIゲートウェイは、メソッドレベルまでのアクセス制御をサポートしています。 DDBの特定のアイテムへのアクセスを動的に制御するのは難しいですが、特定の静的なアイテムについて話している場合は、テーブル/アイテムをAPI GWまたはLambdaレイヤにハードコードし、そのAPIメソッドへのアクセスをAPIで制御できますゲートウェイのアクセス許可。

APIゲートウェイアクセスコントロールを使用すると、APIの調整/再設計が必要になることがあります。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Permission", 
     "Action": [ 
     "execute-api:Invoke"   
     ], 
     "Resource": [ 
     "arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/resource-path" 
     ] 
    } 
    ] 
} 

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html

関連する問題