2016-07-07 60 views
0

我有幾組用戶(在Cognito中有自己的身份池),這些用戶在API網關中的端點上擁有不同的權限。我使用IAM角色管理訪問權限。例如,我有一個身份池的這個政策:使用AWS Cognito和API網關的細粒度訪問管理

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

現在我想有訪問規則,基於一個人的身份。原因是,我擁有的資源只能由「資源」(或被列爲允許訪問資源)的用戶更改。

我可以以某種方式爲此用戶IAM嗎? 我的想法是這樣的:

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

所以這樣每個用戶都可以只用他的用戶名(與該用戶名的端點可以不是被轉發到拉姆達,可以肯定的是,給定用戶擁有的權利執行操作)。

這可能嗎?如果不是,我將如何配置細粒度訪問?

+0

您在API Gateway中使用哪種集成? HTTP代理,Lambda函數或AWS服務代理? –

+0

不同的。但主要是lambda。 – 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。然後,在Lambda中,您知道調用者的身份(如果您需要有關用戶身份的更多信息,則可以致電Cognito API)。

您將能夠創建可能看起來像GET /user/me/my-resource的端點,並且將根據API網關調用者的Cognito身份執行操作。您不需要爲Cognito身份池中的每個身份創建x端點和策略。

相關問題