我正在尝试实现一个自定义的AWS Lambda层,以便在我的函数中使用它。
它应该是一个简单的层,它从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)
我希望能够将此层链接到我的函数,以便在运行时保护它。
我使用的是serverless框架,看起来我的层部署得很好,就像我的示例函数一样。此外,AWS控制台还向我显示,该层在我的函数中是链接的。在
我将图层命名为“shield”,并尝试在测试函数中按其名称导入:
^{pr2}$
理想情况下,我应该在CloudWatch上得到并出错,告诉我function_shield阻止了{}的运行,但是我收到一个错误,告诉我在我的运行时没有声明“shield”。在
我错过了什么?
除了numpy、scipy、二进制文件等,我找不到任何用于层的自定义代码示例
我很抱歉我的愚蠢…
谢谢你的好意!在