#amazon-web-services #aws-lambda #boto3 #amazon-cloudwatch
Вопрос:
Я вызываю API облачных часов GetMetricData, используя Python boto 3 в лямбда-коде, но получаю ошибку отказа в доступе.
«Сообщение об ошибке»: «Произошла ошибка (доступ запрещен) при вызове операции GetMetricData: Пользователь: arn:aws:sts::xxxxxxxxxxxxxx:предполагаемая роль/lambda_test15mins-роль-88yy778/lambda_test15mins не авторизован для выполнения: cloudwatch:GetMetricData»,
Любая помощь будет признательна!
Вот используемый код
import json
import logging
import os
import boto3
import datetime
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
def lambda_handler(event, context):
client = boto3.client(service_name='cloudwatch', region_name='us-east-2')
response = client.get_metric_data(
MetricDataQueries=[
{
'Id': 'XXXXXXXXXXXXXX',
'MetricStat': {
'Metric': {
'Namespace': 'CMS_API',
'MetricName': 'API_Endpoint_Errors_Metrics',
'Dimensions': [
]
},
'Period': 2000,
'Stat': 'Sum',
'Unit': 'Count'
}
},
],
StartTime= datetime.datetime.now(),
EndTime= datetime.datetime.now() - datetime.timedelta(minutes=15),
NextToken='string',
ScanBy='TimestampDescending',
MaxDatapoints=123,
LabelOptions={
'Timezone': 'string'
}
)
Ответ №1:
Вы можете добавить встроенную политику в свой lambda execution role
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudwatch:GetMetricData",
"Resource": "*"
}
]
}
Комментарии:
1. Я создал пользователя IAM и добавил политику администрирования, а также дополнительно добавил встроенную политику, предложенную в решении. Все еще сталкиваюсь с той же проблемой.
2. @vilasgurav Это означает, что ваш код выполняется под другим пользователем/ролью IAM, тогда вы думаете. Вы должны дважды это проверить.
3. @vilasgurav Непонятно, что вы делаете. Нет необходимости в симуляторе политики . Просто определите пользователя / роль IAM, под которым выполняется ваш код.
4. Метрики создаются с одной ролью, а лямбда-код создается с другой ролью, и пользователь, вошедший в систему, имеет доступ к обеим ролям. Каким должен быть следующий шаг, поскольку задействованы 2 роли.
5. Я создал роль с полным доступом к cloudwatch и назначил ее функции lambda. Это сработало