3

任何 aws 服务都可以抛出 AcceeDenied 异常。像这样记录的:

somePromise.catch((err) => {
    console.error(`Failed to store logs into CloudWatch`, err);
    callback(err);
})

云观察日志显示:

{
    "errorMessage": "Access Denied",
    "errorType": "AccessDenied",
    "stackTrace": [
        "Request.extractError (/var/task/node_modules/aws-sdk/lib/services/s3.js:577:35)",
        "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
        "Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
        "Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)",
        "Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)",
        "AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "/var/task/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)",
        "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)",
        "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
    ]
}

首先,堆栈跟踪在哪里?:)

其次,有没有办法确定请求了哪些资源和操作?(有几个链接的承诺,目前还不清楚什么是错的)

4

1 回答 1

0

根据我的经验,您不太可能从 JavaScript Stacktrace 中获得更多细节。我发现的一条更有帮助的途径是查看我正在使用(和从中获取somePromise)的库正在访问哪些 AWS 服务。

您可能收集其中一些信息的另一种方法是从 AWS 端,使用CloudTrailCloudWatch Logs。您首先需要在您的 AWS Account 中创建一个 CloudTrail。接下来,您需要将 CloudTrail 事件发送到 CloudWatch Logs

将 CloudTrail 事件发送到 CloudWatch Logs 后,您可以使用 CloudWatch Logs 查询“拒绝访问”和“未经授权的操作”消息。为此,请转至AWS 控制台中的CloudWatch ,然后转至日志部分。接下来查找您的 CloudTrail 日志组。通常调用默认日志组CloudTrail/Default。进入该日志组后,按顶部的“搜索日志”按钮。这将显示此日志组的日志流中的所有日志。然后,您可以输入一个查询,该查询将仅获取 Access DeniedUnauthorized 操作事件。为此,请输入查询{ ($.errorCode = "*UnauthorizedOperation") || ($.errorCode = "AccessDenied*") }

我发现这很繁重,而且非常耗时,所以我编写了一个实用程序来自动将这些拒绝访问和未经授权的操作消息发送给 Slack。您可以在https://github.com/Giftbit/activity-aware-ids-aws/blob/master/infrastructure/cloudformation.yaml查看。它还包括一个有用的 CloudFormation 模板来为您提供支持,前提是您已经创建了 CloudTrail 并将事件发送到 CloudWatch Logs。

于 2017-09-11T14:29:53.013 回答