我是否应该在客户端应用程序中为 CloudWatch 日志记录硬编码 IAM 凭证?

Should I hard code IAM credentials for CloudWatch logging within client apps?

我有一个 IAM 用户可以通过访问/秘密密钥以编程方式访问 CloudWatch Log API。我正在使用以下策略来限制它对特定 LogGroup.

的访问
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "logs:DescribeLogGroups",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "logs:DescribeLogStreams",
            "Resource": "arn:aws:logs:us-west-2:223237870883:log-group:/myappname/dev/client/uwp"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-west-2:223237870883:log-group:/myappname/dev/client/uwp:log-stream:*",
                "arn:aws:logs:us-west-2:223237870883:log-group:/myappname/dev/client/uwp"
            ]
        }
    ]
}

密钥将随移动应用程序一起发送到 Android/iOS/Windows/macOS 应用程序商店。每个应用程序都有自己的 key/Policy(以上是针对 UWP 应用程序),将其限制在自己的 CloudWatch LogGroup 我通过 CloudFormation 创建。

我的问题是关于按键本身。我可以将它们放在配置文件中,也可以将它们硬编码到二进制文件中。我打算对它们进行硬编码,因为无论如何我都无法在事后更改配置文件——如果我想更改它们,无论如何我都需要发布一个新版本的应用程序。似乎在应用程序中对它们进行硬编码会让有人更难尝试和窃取。

如果它们被盗,更糟糕的情况是它们会向我发送大量 CloudWatch 日志。我能做些什么来阻止这种情况发生吗?我试图查看 Amplify 及其处理方式,但没有看到任何突出的内容。

从安全角度来看,我采用的方法是否存在任何问题,或者这是否与课程相当?

作为旁注,我最初集成了 Visual Studio App Center 日志记录,但不想处理构建一个流程来从 App Center 为客户端聚合日志,为我的后端聚合 CloudWatch。 App Center 似乎以同样的方式工作 - 访问 key/client 密钥,没有任何东西可以真正阻止某人在应用程序之外窃取和登录。

感谢任何人就您在此类事情上的经历提供的任何指导。不是在寻找正确答案。想看看人们采取了哪些其他方法来了解我是否完全不走寻常路。

是的,您可以通过将凭据隐藏在 API 端点后面来防止传送凭据,然后您可以对每个应用程序部署进行速率限制、保护、轮换访问等。

虽然最坏的情况是他们可以用日志淹没你,但如果你已经有一个后端 API,最好在你和 Cloudwatch 之间有一个专用的日志记录端点。

不过我不会太担心,你是 granting the least privilege 这是最重要的因素。