2016-08-29 3 views
4

AWS Лямбда-регистрация на CloudWatch может стать огромной скрытой стоимостью, если у вас их много, потому что нет способа сообщить AWS прекратить ведение журнала на платформе CloudWatch. Единственный способ, которым я нашел, чтобы сделать это, чтобы управлять политикой пользовательского IAM (связанный с каждым лямбда) и explicitally запретить доступ к журналов: ... действия:Как остановить функцию AWS Lambda для входа в CloudWatch

{ 
     "Sid": "DisableAllLogs", 
     "Resource": "*", 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
     "Effect": "Deny" 
} 

Теперь я пытаюсь чтобы мелко очертить политику, чтобы позволить только лямбда регистрироваться. Для этого я использую Condition параметры политики:

{ 
     "Sid": "EnableLogsForWantedLambdaTriggers", 
     "Resource": "*", 
     "Condition": { 
      "ArnEquals": { 
       "aws:SourceArn": "arn:aws:lambda:REGION:ACCOUNT-ID:function:FUNCTION-NAME" 
      } 
     }, 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
     "Effect": "Allow" 
} 

, но в этом случае нет журнала не отправляется CloudWatch. Я думаю, что источник ARN ошибочен, но я не могу найти правильный.

Любые подсказки?

+0

я предполагаю, вы создаете лямбда в вашем CloudFormation, а? Если это так, вы должны иметь возможность захватить правильную ARN с помощью «Fn :: GetAtt»: [«FUNCTION-NAME», «Arn»] ' – Squirrel

+0

Я предполагаю, что удаление журналов или их архивирование через некоторое время, чтобы сэкономить деньги, уже был рассмотрен. Я сделал бы это, прежде чем делать все функции журнала, а затем выбирать определенные и отказывать в доступе к ним. – arjabbar

+0

К сожалению, большая часть затрат связана с вызовами CloudWatch, а не с сохраненным размером журнала, поэтому установка даты истечения срока действия до 1 дня недостаточна –

ответ

0

Возможное обходное решение, которое я нашел, заключается в том, чтобы сосредоточить политику на ресурсах вместо ARN вызывающего абонента. Так что, если я сейчас лямбда logGroupName и logStreamName (и я всегда теперь эти) я могу Разрешить только действия над ресурсом, что регистратор будет создать, следуя documented naming convention:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "EnableLogsForWantedLambdaTriggers", 
     "Resource": [ 
      "arn:aws:logs:<region>:<ID>:log-group:<logGroupName>:log-stream:<logStreamName>" 
     ], 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 

в таким образом, у меня есть выбор, чтобы включить выбранную функцию lamda и/или (действуя по имени потока) выбранной функции ($ LATEST, 1, 2, ...).

Например, следующий будет включить только разрабатываемую версию функции не обращая внимания на производственные из них:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "EnableLogsForWantedLambdaTriggers", 
     "Resource": [ 
      "arn:aws:logs:<region>:<ID>:log-group:<logGroupName>:log-stream:*/*/*/[$LATEST]*" 
     ], 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 
Смежные вопросы