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を作成することもできますが、これは適切な方法ではないようです。
誰にも提案はありますか?より良いアプローチを知っていますか?