Вызов API облачных часов getMetricsData с использованием boto3 в лямбда-коде возвращает ошибку отказа в доступе

#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. Это сработало