是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?

Posted

技术标签:

【中文标题】是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?【英文标题】:Can AWS Amplify Analytics be used without a Cognito User Pool? 【发布时间】:2020-08-14 15:16:53 【问题描述】:

我正在尝试通过 Amplify SDK 将 Pinpoint Analytics 实施到现有的 React Native 应用程序中。我们有一个现有的用户群和我们自己的 authN 和 authZ 实现,所以我们不需要(更重要的是,买不起)Cognito 用户池。

一方面,Pinpoint API 在recording events 时不需要与 Cognito 进行任何集成,但在使用 analytics 时,amplify documentation 似乎需要 auth 插件,而在配置时需要 auth 参数放大。

Amplify.configure(
    // To get the AWS Credentials, you need to configure 
    // the Auth module with your Cognito Federated Identity Pool
    Auth: 
        identityPoolId: 'us-east-1:xxx-xxx-xxx-xxx-xxx',
        region: 'us-east-1'
    ,
    Analytics: 
        // OPTIONAL - disable Analytics if true
        disabled: false,
       ...

有没有办法通过 Amplify 使用analytics 而不生成用户池?我试过检查 AWS 移动 SDK,但它们显然已被弃用,现在大多数文档都指向 Amplify。我们可以直接使用 Pinpoint API,但这种实现似乎有点多余。

【问题讨论】:

【参考方案1】:

免责声明:我不是 AWS Amplify/Cognito/Pinpoint 产品团队的成员。

根据我的研究,AWS Amplify Analytics(Amazon Pinpoint) 可以在没有 Cognito 用户池的情况下使用,但需要 Cognito 身份池进行授权。

Cognito 用户池和 Cognito 身份池的概念有时可能令人困惑,但简单来说,我将它们区分如下:

Amazon Cognito 用户池是一项功能齐全的用户目录服务,用于处理用户注册、存储、身份验证和帐户恢复。

Amazon Cognito 身份池(联合身份)是一种授权在您的应用中使用 AWS 服务的方法。

当您将应用程序与 Amazon Pinpoint 集成时,应用程序需要访问 AWS 服务的权限。因此,Amazon Cognito 身份池提供了一种授权在您的应用程序中使用 AWS 服务的方法。使用 Cognito 身份池,您可以获得临时具有您通过 IAM 策略定义的访问 AWS 服务的权限的 AWS 凭证。IAM 策略(auth_role 和 unauth_role)应包含允许您将数据发送到服务的 Pinpoint 相关策略。请参阅下面的示例:


    "Version": "2012-10-17",
    "Statement": [
    
        "Effect": "Allow",
        "Action": [
            "mobiletargeting:UpdateEndpoint",
            "mobiletargeting:PutEvents"
        ],
        "Resource": [
            "arn:aws:mobiletargeting:*:$accountID:apps/$appId*"
        ]
    
    ]

总结:

使用 Amazon Cognito 身份池提供了一种更安全可靠的方式来访问您的应用程序中的 AWS 后端资源,而不是将凭证(即访问密钥和秘密密钥)嵌入到您的应用程序中。

希望这会有所帮助!

【讨论】:

以上是关于是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?的主要内容,如果未能解决你的问题,请参考以下文章

在本地使用 Cognito [离线]

AWS Cognito:Cognito 用户池的元数据 URL 在哪里?

使用多个用户池的具有 Cognito 授权的 AWS API 网关

如何在没有授权人的情况下通过 API Gateway 使 AWS Cognito 用户数据可供 Lambda 使用?

链接到 Cognito 用户池的 AWS Amplify GraphQL 架构

Cognito用户池是否支持国际化?