我有几组用户(在Cognito中有自己的身份池),它们在API网关中对端点具有不同的权限。我使用IAM角色管理访问权限。例如,我有一个标识池的策略:
{
"Sid": "Stmt1467885818000",
"Effect": "Allow",
"Action": [
"apigateway:Invoke"
],
"Resource": [
"arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/usergroup/*"
]
}
现在我希望拥有基于一个个人身份的访问规则。原因是,我有一些资源,我只能由用户改变这些资源" onws"资源(或列为允许访问资源)。
我可以以某种方式为此用户IAM吗? 我的想法是这样的:
"Resource": [
"arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*"
]
所以这样每个用户只能使用他的用户名(而且这个用户名可以转发到lambda,这可以确保给定用户有权执行操作)。
这可能吗?如果不是,我将如何配置细粒度访问?
答案 0 :(得分: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 端点和策略。