Я пытаюсь реализовать собственный лямбда-слой AWS, чтобы использовать его с моими функциями.
Это должен быть простой слой, который получает какой-то параметр из ssm и инициализирует puresec function_shield
для защиты моих сервисов.
Код выглядит примерно так:
import os
import boto3
import function_shield as shield
STAGE = os.environ['stage']
REGION = os.environ['region']
PARAMETERS_PREFIX = os.environ['parametersPrefix']
class ParameterNotFoundException(Exception):
pass
session = boto3.session.Session(region_name=REGION)
ssm = session.client('ssm')
# function_shield config
parameter_path = f"/{PARAMETERS_PREFIX}/{STAGE}/functionShieldToken"
try:
shield_token = ssm.get_parameter(
Name=parameter_path,
WithDecryption=True,
)['Parameter']['Value']
except Exception:
raise ParameterNotFoundException(f'Parameter {parameter_path} not found.')
policy = {
"outbound_connectivity": "block",
"read_write_tmp": "block",
"create_child_process": "block",
"read_handler": "block"
}
def configure(p):
"""
update function_shield policy
:param p: policy dict
:return: null
"""
policy.update(p)
shield.configure({"policy": policy, "disable_analytics": True, "token": shield_token})
configure(policy)
Я хочу иметь возможность связать этот слой с моими функциями для его защиты во время выполнения.
Я использую безсерверную инфраструктуруи кажется, что мой слой был развернут просто отлично, как это было с моей примерной функцией.Кроме того, консоль AWS показывает мне, что слой был связан в моей функции.
Я назвал свой слой «щит» и попытался импортировать его по его имени в моей тестовой функции:
import os
import shield
def test(event, context):
shield.configure(policy) # this should be reusable for easy tweaking whenever I need to give more or less permissions to my lambda code.
os.system('ls')
return {
'rep': 'ok'
}
В идеале, я должен получить сообщение об ошибке на CloudWatch, сообщающее, что function_shield
не позволил запустить child_process
, однако вместо этого я получаю сообщение об ошибке, указывающее, что в моей среде выполнения не объявлен «щит».
Чего мне не хватает?Я не смог найти никаких пользовательских примеров кода, используемых для слоев, кроме numpy, scipy, binaries и т. Д.
Извините за мою глупость ...
Спасибо за вашу доброту!