0

AWS를 처음 사용하며 기존 프로젝트를 상속 받았습니다.AWS IAM 고급 액세스 제어 (APIGateway 및 Lambda)

프로젝트는 Vue.js를 프런트 엔드로 사용하며 데이터는 DynamoDB에 저장됩니다. 사용자 인증은 IAM 역할이 첨부 된 Cognito를 사용하여 수행되었습니다. 데이터는 다른 역할을 통해 데이터베이스에서 APIGateway 및 Lambda를 통해 검색됩니다.

프론트 엔드 역할

신뢰할 수있는 기관 : cognito-identity.amazonaws.com

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

백엔드 역할

신뢰할 수있는 엔티티 : ID 공급자 (들) apigateway.amazonaws.com, 아이디 공급자 lamda.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" 
     ] 
    } 
] 
} 

그러나 사용자 권한을 구현해야 특정 사용자에게 그룹을 할당하여 특정 항목에 액세스 할 수 있으므로 DynamoDB의 다른 항목에 대한 액세스를 제한 할 수 있습니다.

IAM Fine-Grained Access에 대해 읽었습니다. 제어하지만 사용자가 모든 데이터에 액세스 할 수있는 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