Amazon web services 如何安全地将日志发布到云

Amazon web services 如何安全地将日志发布到云,amazon-web-services,azure,google-cloud-platform,Amazon Web Services,Azure,Google Cloud Platform,我的库是一个CLI实用程序,人们通过运行pip安装[libname]获得它。我想自动记录人们使用它时发生的异常,并将这些日志存储在云中。我已经找到了可以做到这一点的服务:AWS CloudWatch、GCP Stackdriver 然而,在查看他们的API时,我似乎必须提供我的私钥,以便库能够对我的帐户进行身份验证。这听起来不对,云提供商警告我不要这样做。 来自的示例失败,需要凭据: from google.cloud import logging client = logging.Client

我的库是一个CLI实用程序,人们通过运行
pip安装[libname]
获得它。我想自动记录人们使用它时发生的异常,并将这些日志存储在云中。我已经找到了可以做到这一点的服务:AWS CloudWatch、GCP Stackdriver

然而,在查看他们的API时,我似乎必须提供我的私钥,以便库能够对我的帐户进行身份验证。这听起来不对,云提供商警告我不要这样做。 来自的示例失败,需要凭据:

from google.cloud import logging
client = logging.Client()
logger = client.logger('log_name')
logger.log_text('A simple entry')  # API call
虽然python库公开了源代码,但我知道我提供的任何类型的身份验证都会承担人们发送任何虚假日志的风险,但这对我来说没关系,因为我只会限制我的帐户上的开支,以防有人这样做(意料之外)。当然,库附带的凭据应该仅限于日志记录


有没有关于如何从用户机器登录到云服务的示例?

对于Azure Application Insights的“Instrumentation Key”,这里有一篇关于该主题的非常好的文章:

虽然我不熟悉AWS或GCP的产品,但我认为类似的产品也可以使用

一般来说:虽然插装密钥是一种身份验证方法,但在大多数情况下,它并不被视为非常机密的密钥。一个人所能做的最坏的破坏就是发送不需要的日志。他们无法读取任何数据或用该键覆盖任何内容。你已经在上面说过,你并不真的担心你的情况下,未经处理的日志的问题

因此,只要您仅为一个特定的应用程序/目的使用AppInsights实例,我会说您很好。您还可以使用来自不同来源的数据在后台进一步聚合这些数据

为此添加一个具体示例:Microsoft的little tool(这里的具体用例并不重要),也会收集遥测数据并将其发送给Azure Application Insights(如果用户不选择退出)。我不会指出确切的代码行,但是他们的检测密钥被签入到公共GitHub repo中,供任何人查找

或者,最安全的方法是从服务器发送数据 将浏览器连接到服务器上的自定义API,然后转发到应用程序 具有正确检测键的Insights资源(参见图表 下)

(来源:上面的链接)


python的App Insights SDK在这里,顺便说一句:

要将日志写入Stackdriver,需要凭据。不支持到Stackdriver的匿名连接

在任何情况下都不授予非特权用户日志读取权限。Stackdriver在Stackdriver日志中记录敏感信息

Google Cloud IAM提供角色
角色/logging.logWriter
。此角色仅为用户提供写入日志的权限。此角色不授予读取权限

角色
roles/logging.logWriter
相当安全。用户可以写入日志,但不能读取、覆盖或删除日志。我说相当安全,因为服务帐户中存储有私人信息。我将创建一个单独的项目,只用于Stackdriver日志记录,而不使用其他服务

提供外部用户访问的第二个问题是成本。Stackdriver日志为每GiB 0.50美元。您不希望有人上传大量日志文件条目。确保监视外部使用情况。创建警报以监控成本


您正在azure上询问?在azure中,相关服务将是azure Application Insights。旁注:要求用户明确选择此行为。默认情况下启用它是不可接受的。@您认为Michael sqlbot Opt out更糟糕吗?我担心询问每个用户时会产生额外的摩擦。难道你不认为许多应用程序已经在用户不知情的情况下收集了大量信息,仅仅因为这些信息对任何人都不重要吗?假设我将数据匿名化,并排除IP等内容,结果只会是操作系统名称、异常和非特定于一个用户的详细信息。@ikamen选择退出是绝对糟糕的。你关心请求许可的摩擦这一事实应该告诉你你需要知道什么——人们通常不会对这类事情做出积极的反应。请注意,您不能排除Internet连接另一端的IP地址——当您的软件打电话回家时,在接收端会有启动连接的IP地址的踪迹。你想收集信息来帮助你改进产品--很好--但是把选择权完全和明确地交给你的产品运行防火墙的人。