我有几组用户(在 Cognito 中有自己的身份池),它们对 API 网关中的端点具有不同的权限。我使用 IAM 角色管理访问权限。例如,我有一个身份池的以下策略:
{
"Sid": "Stmt1467885818000",
"Effect": "Allow",
"Action": [
"apigateway:Invoke"
],
"Resource": [
"arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/usergroup/*"
]
}
现在,我希望拥有基于单个标识的访问规则。原因是,我有资源,只有"onw"资源(或被列为允许访问资源)的用户才能更改。
我可以以某种方式为此使用 IAM 吗?我的想法是这样的:
"Resource": [
"arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*"
]
因此,这样每个用户只能使用他的用户名来终端节点(并且此用户名可以转发到 lambda,它可以确保给定用户有权执行该操作)。
这可能吗?如果不是,我将如何配置细粒度访问?
您可以使用 IAM 条件来检查用户身份。查看此博客文章以查看更多示例。它应该看起来像这样:
{
"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 网关集成配置中,您可以将认知池和身份传递给 lambda。然后,在 Lambda 中,您知道调用方的身份(如果您需要有关用户身份的更多信息,可以调用 Cognito API)。
您将能够创建可能看起来像GET /user/me/my-resource
的端点,并将根据 API 网关调用方的 Cognito 身份执行操作。您无需为 Cognito 身份池中的每个身份创建 x 个端点和策略。