任何aws服务都可以抛出AcceeDenied Exception。记录如下:
somePromise.catch((err) => {
console.error(`Failed to store logs into CloudWatch`, err);
callback(err);
})
Cloud watch日志显示:
{
"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)"
]
}
首先,堆栈跟踪在哪里? :)
其次是否有一种方法可以取消请求的资源和操作? (有几个链式的承诺,目前还不清楚是什么问题)
答案 0 :(得分:0)
根据我的经验,您不太可能从JavaScript Stacktrace中获得更多细节。我发现的一个更有用的途径是查看我使用(以及从中获取somePromise
)库的AWS服务。
您可以收集部分此类信息的另一种方式是使用 CloudTrail 和 CloudWatch Logs 从AWS端进行收集。您首先需要create a CloudTrail in your AWS Account。接下来你需要send CloudTrail events to CloudWatch Logs。
将CloudTrail事件发送到CloudWatch Logs后,您可以使用CloudWatch Logs查询&#34; Access Denied&#34;和&#34;未经授权的操作&#34;消息。为此,请转到AWS控制台中的 CloudWatch ,然后转到日志部分。接下来查看您的CloudTrail日志组。通常,默认日志组称为CloudTrail/Default
。进入该日志组后,按顶部的搜索日志按钮。这将显示此日志组的日志流中的所有日志。然后,您可以输入仅获得拒绝访问和未授权操作事件的查询。为此,请输入查询{ ($.errorCode = "*UnauthorizedOperation") || ($.errorCode = "AccessDenied*") }
我觉得这很麻烦,而且非常耗时,所以我自动为我写了utility to send these Access Denied and Unauthorized Operation messages to Slack。您可以在https://github.com/Giftbit/activity-aware-ids-aws/blob/master/infrastructure/cloudformation.yaml查看。它还包括一个有用的CloudFormation模板,可以为您提供支持,只要您已经创建了CloudTrail并将事件发送到CloudWatch Logs。