Amazon Web Services - 使用 AWS Cognito 和 API Gateway 进行精细的访问管理



我有几组用户(在 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 个端点和策略。

相关内容

  • 没有找到相关文章

最新更新