2016-07-07 2 views
0

API 게이트웨이의 엔드 포인트에 대해 서로 다른 권한을 가진 여러 사용자 그룹 (Cognito에 자체 ID 풀이 있음)이 있습니다. IAM 역할을 사용하여 액세스 권한을 관리합니다. 예를 들어 하나의 ID 풀에 대한 정책이 있습니다.AWS Cognito 및 API 게이트웨이를 통한 세분화 된 액세스 관리

{ 
    "Sid": "Stmt1467885818000", 
    "Effect": "Allow", 
    "Action": [ 
     "apigateway:Invoke" 
    ], 
    "Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/usergroup/*" 
    ] 
} 

이제 개별 ID를 기반으로 액세스 규칙을 만들고 싶습니다. 그 이유는 리소스를 "onws"(또는 리소스에 액세스하도록 허용 된 것으로 나열된) 사용자 만 변경할 수있는 리소스가 있기 때문입니다.

어떻게 든이 문제에 대해 IAM을 사용자 지정할 수 있습니까? 내 아이디어는 다음과 같이이다 :

"Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*" 
    ] 

그래서 주어진 사용자가 오른쪽이 있는지 확인 할 수있는 모든 사용자는 자신의 이름 (이 사용자 이름과 엔드 포인트에 비해 람다로 전달 될 수있다 이런 식으로, 작업 수행).

이것이 가능합니까? 그렇지 않은 경우 세분화 된 액세스를 어떻게 구성합니까?

+0

API 게이트웨이와 어떤 통합을 사용하고 있습니까? HTTP 프록시, 람다 함수 또는 AWS 서비스 프록시? –

+0

다른 것들. 그러나 대부분 람다. – Nathan

답변

0

IAM conditions을 사용하여 사용자 신원을 확인할 수 있습니다. 더 많은 예제를 보려면 this blog post을보십시오. 이 형식은 다음과 같아야합니다.

{ 
    "Effect": "Allow", 
    "Action": [ 
     "apigateway:Invoke" 
    ], 
    "Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*" 
    ], 
    "Condition": { 
     "StringEquals": { 
      "cognito-identity.amazonaws.com:aud": "us-east-1:<identity-pool-id>", 
      "cognito-identity.amazonaws.com:sub": "us-east-1:<identity-id>" 
     } 
    } 
} 

하지만 다른 방법을 사용하는 것이 좋습니다.

API 게이트웨이 통합 구성에서는 pass the Cognito pool and identity to the lambda을 사용할 수 있습니다. 그런 다음 람다에서 발신자의 신원을 알 수 있습니다 (사용자 신원에 대한 추가 정보가 필요하면 Cognito API으로 전화하십시오).

GET /user/me/my-resource처럼 보이는 끝점을 만들 수 있으며 은 API 게이트웨이 호출자의 Cognito ID에 따라 동작을 수행합니다. Cognito ID 풀의 각 ID에 대해 x 끝점 및 정책을 만들 필요가 없습니다.

관련 문제