Как получить объект и операцию из AWS отказано в доступе исключение в JavaScript?
Любой сервис 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)"
]
}
Прежде всего, где находится трассировка стека?:)
Во-вторых, есть ли способ определить, какие ресурсы и операции были запрошены? (Есть несколько связок обещаний, и неясно, что не так)
1 ответ
По моему опыту, вы вряд ли сможете получить больше подробностей из JavaScript Stacktrace. Более полезный маршрут, который я нашел, - это посмотреть, какие сервисы AWS используют библиотеки, которые я использую (и получаю somePromise
с) получают доступ.
Еще один способ, которым вы могли бы получить некоторую часть этой информации, - со стороны AWS, используя CloudTrail и CloudWatch Logs. Сначала вам необходимо создать CloudTrail в своей учетной записи AWS. Затем вам нужно будет отправить события CloudTrail в журналы CloudWatch.
После того, как ваши события CloudTrail отправляются в журналы CloudWatch, вы можете использовать журналы CloudWatch для запроса сообщений "Доступ запрещен" и "Несанкционированная операция". Для этого перейдите в CloudWatch на консоли AWS и перейдите в раздел " Журналы". Затем найдите свою группу CloudTrail Log. Обычно группа журналов по умолчанию называется CloudTrail/Default
, Зайдя в эту группу журналов, нажмите кнопку " Поиск журналов" вверху. Это вызовет все журналы в потоках журналов для этой группы журналов. Затем вы можете ввести запрос, который будет получать только события " Отказ в доступе" и " Несанкционированный доступ". Для этого введите запрос { ($.errorCode = "*UnauthorizedOperation") || ($.errorCode = "AccessDenied*") }
Я нахожу это обременительным и очень трудоемким, поэтому я написал утилиту для автоматической отправки сообщений об отказе в доступе и несанкционированной операции в Slack для меня. Вы можете проверить это по адресу https://github.com/Giftbit/activity-aware-ids-aws/blob/master/infrastructure/cloudformation.yaml. Он также включает в себя полезный шаблон CloudFormation, который поможет вам в этом, при условии, что вы уже создали свой CloudTrail и отправили события в журналы CloudWatch.