【问题标题】:AWS Cognito and Private Access key in the app应用程序中的 AWS Cognito 和私有访问密钥
【发布时间】:2020-01-23 03:22:33
【问题描述】:

我看了here

您有一个移动应用程序。不要在应用程序中嵌入访问密钥,即使 在加密存储中。相反,使用 Amazon Cognito 来管理用户 应用中的身份

我想了解一些事情。如果我在 Cognito AWS 中使用未经身份验证的身份,是否与在应用程序中嵌入访问密钥一样,因为任何可以访问互联网的人都可以获得 AWS 凭证?

启用此选项意味着 任何可以访问互联网的人都可以获得 AWS 凭证。 未经身份验证的身份通常是未登录的用户 你的申请。通常,您为其分配的权限 未经身份验证的身份应该比那些未经身份验证的身份更具限制性 身份验证。

有人可以解释在应用中嵌入访问密钥使用 Cognito 获取未经身份验证的身份之间的区别吗?

【问题讨论】:

    标签: android authentication key amazon-cognito


    【解决方案1】:

    让我解释清楚。

    如果您对访问密钥 ID、秘密访问密钥和会话令牌进行硬编码,则意味着您在应用程序中嵌入了高度敏感的数据。一个例子如下:

    AwsSessionCredentials awsCreds = AwsSessionCredentials.create(
        "your_access_key_id_here",
        "your_secret_key_id_here",
        "your_session_token_here");
    

    Cognito 身份池用于生成临时 AWS 访问密钥 ID、秘密访问密钥和会话令牌。这是由GetIdGetCredentialsForIdentity API 调用返回的。它们是未签名(非 SigV4 签名)的 API 调用,您可以检索临时 AWS 凭证,而无需在 API 调用中指定登录参数映射作为参数。

    建议使用 Cognito 身份池 API 调用(由 AWS STS 提供),而不是对敏感数据进行硬编码,因为每个应用程序都可能容易受到逆向工程。

    【讨论】:

    • 感谢您的回答,但我还是有些不明白。如果我所有的访问密钥 ID、秘密访问密钥和会话令牌都属于权限非常有限的 IAM 用户“XXX”(假设只能从 S3 读取),为什么它比 Cognito 中的未经身份验证的身份更敏感?它看起来像数据的相同级别的敏感度。
    • 作为一名开发人员,我可以证明,在生产代码中包含任何类型的硬编码字符串不是一个好习惯。即使您具有有限权限的凭证(引用您的示例,从 AWS S3 只读)被暴露,它仍然可能对您的 AWS 账户的计费和使用有害。每个 AWS API 都有 API 限制,潜在的违规可能会导致您的 API 限制达到其限制。为避免出现这种情况,使用 Cognito 身份池获取临时 AWS 凭证可使流程更加安全。
    猜你喜欢
    • 2021-12-25
    • 2018-05-31
    • 2015-05-14
    • 2023-01-02
    • 1970-01-01
    • 2016-06-10
    • 2019-10-10
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多