如何将 Cognito 身份池与另一个 AWS 账户集成以进行 API 网关访问

How to integrate cognito identity pool with another AWS account for API Gateway access

我在 AWS 账户 A 中有一个工作项目,它使用 Cognito 用户池对用户进行身份验证。通过使用细粒度角色、策略和身份池,已成功限制对某些 API 网关端点的访问(使用 AWS_IAM 授权方)。这一切都很好。现在,我正在尝试弄清楚如何在另一个 AWS 账户(账户 B)中获取 API 网关端点,以使用来自账户 A 的这些相同凭证(AccesskeyId、SecretAccessKey 和 SessionToken),以便能够点击 API 账户 B 中的网关端点,无需在账户 B 中创建身份池 ID 等。

我尝试了一种方法,我将另一个资源添加到帐户 A 中的现有策略,用于附加到用户所附加的角色的其中一个策略。像这样

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:<Account A id>:<api gateway resourceId account A>/*/*/*",
                "arn:aws:execute-api:us-east-1:<Account B id>:<api gateway resourceId account B>/*/*/*"
            ]
        }
    ]
}

因此,通过添加第二个资源 arn:aws:execute-api:us-east-1:<Account B id>:<api gateway resourceId account B>/*/*/* 当在帐户 A 中进行身份验证的用户获取凭证(AccesskeyId、SecretAccessKey 和 SessionToken)并使用相同的凭证时,我在帐户 B 中的端点似乎可以正常工作访问帐户 B 中的端点。为了使此工作正常进行,在帐户 B api 网关上,我还必须启用 AWS_IAM 授权方。

所以想知道这是否是一种有效的跨帐户授权方法?有没有其他方法我们不必专门手动更新这些策略?有什么想法吗?

IMO 方法是有效的,请确保 API 资源策略仅允许假定身份角色执行操作(假设这是您的用例)。

您还可以将授权类型更改为 Cognito,并使用 Cognito 用户访问令牌和范围来授权访问。那么你就不需要管理政策了,见https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-cross-account-cognito-authorizer.html.