2016-12-27 62 views
1

在API网关,我有以下资源ARN:cognito细粒度访问控制和API网关

arn:aws:execute-api:us-east-2:XXXXXXXXXXXXX:syx381ecq9/*/GET/members/* 

它提供了一个链接,获取基于一个标识码(class_id)成员的名单 - /会员/ {ID }
位于类中的用户只能看到属于该类的成员列表。

我指定cognito用户池具有以下IAM策略(假设1类为类标识码)

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "cognito-identity:*", 
       "mobileanalytics:PutEvents", 
       "cognito-sync:*", 
       "lambda:*", 
       "execute-api:*" 
      ], 
      "Resource": [ 
       "arn:aws:execute-api:us-east-2:XXXXXXXXXXXXX:syx381ecq9/*/GET/members/class1" 
      ] 
     } 
    ] 
} 

然而,使用的链接GET /会员/ class1的,我收到以下消息时:

Execution failed due to configuration error: API Gateway could not determine the callers credentials 

我检查了cloudwatch,没有从lambda日志,因此我认为lambda没有执行。 我继续尝试class2。这一次表现出以下信息:

User:arn:aws:sts::XXXXXXXXXXXX:assumed-role/Cognito-sample_client1/CognitoIdentityCredentials is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-2:********8469:syx381ecq9/sample/GET/inspectors/client2

我在policy stimulate检查,一切正常与消息允许

我不知道为什么我不能打电话拉姆达?我该如何解决这个问题?

谢谢

回答

1

好的,我找到了答案。上述政策只允许调用拉姆达功能

arn:aws:execute-api:us-east-2:XXXXXXXXXXXXX:syx381ecq9/*/GET/members/class1 

因此,当cognito凭证已过,API将尝试调用拉姆达但不幸的是,该政策限制了。为了通过它来获得,我们需要像下面分成另一份声明:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "cognito-identity:*", 
       "mobileanalytics:PutEvents", 
       "cognito-sync:*", 
       "execute-api:*" 
      ], 
      "Resource": [ 
       "arn:aws:execute-api:us-east-2:XXXXXXXXXXXXX:syx381ecq9/*/GET/members/class1" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:*" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

我们可以定制的拉姆达的ARN如果需要