@ beesolve/dmarc-dashboard (英语)
SvelteKit仪表板用于收看DMARC报告——部署在CloudFront后方的AWS Lambda上,并带有电子邮件编码认证.
[尖叫声] 前1.0——不稳定的API. 这个软件包是
0.x活动 发展。 打破的改变可以降落在任何0.x释放无主 版本凸起。 选中一个精确的版本并在升级前审查更改日志 . 一旦API稳定,包裹到达1.0.0,它跟随语义 版本和此通知被删除 .
建筑
┌────────────┐ ┌──────────────┐ ┌─────────┐ ┌──────────┐
│ CloudFront │ ──► │ Lambda (SSR) │ ──► │ DynamoDB│ │ SES │
└────────────┘ └──────────────┘ └─────────┘ └──────────┘
│ ▲
└── /auth/* ──► AuthGateway (authorizer) │
OTP emails via
@beesolve/email-service
先决条件
npm install \
@beesolve/dmarc-dashboard \
@beesolve/dmarc-reports \
@beesolve/dmarc-consumer \
@beesolve/auth-service \
aws-cdk \
aws-cdk-lib \
constructs
@beesolve/dmarc-reports将 DMARC 电子邮件输入 EventBridge@beesolve/dmarc-consumer- 继续向迪纳摩开发银行提交报告@beesolve/auth-service——与会话管理层进行电子邮件码认证
CDK 设置
import { AuthGateway } from "@beesolve/auth-service/cdk";
import { DmarcConsumer } from "@beesolve/dmarc-consumer/cdk";
import { DmarcDashboard } from "@beesolve/dmarc-dashboard/cdk";
import { DmarcReports } from "@beesolve/dmarc-reports/cdk";
import { App, Stack } from "aws-cdk-lib";
const frontendUri = process.env.FRONTEND_URI;
if (frontendUri == null) throw new Error("FRONTEND_URI environment variable is required");
const app = new App();
const stack = new Stack(app, "DmarcStack", {
env: { account: "123456789012", region: "eu-central-1" },
});
// 1. Set up report ingestion (SES → S3 → EventBridge)
const dmarcReports = new DmarcReports(stack, "DmarcReports", {
recipient: "[email protected]",
});
// 2. Set up consumer (EventBridge → SQS → Lambda → DynamoDB)
const consumer = new DmarcConsumer(stack, "DmarcConsumer");
// 3. Set up authentication
const auth = new AuthGateway(stack, "Auth", {
stage: "prod",
frontendUri,
allowSignUp: false,
authorizerCache: "disabled",
});
// 4. Deploy the dashboard
const dashboard = new DmarcDashboard(stack, "DmarcDashboard", {
auth,
consumer,
emailSender: {
name: "DMARC Dashboard",
emailAddress: "[email protected]",
},
});
这个 DmarcDashboard 构建条款:
- SvelteKit app on Lambda (通过
kit-on-lambda(中文(简体) ) - 带有 Auth 饼干执行的 CloudFront 分布
- 认证行为
/auth/*路线 - 检察官办公室编码的电子邮件服务
- 事件Bridge 认证事件规则( 发送 OTP 电子邮件)
数据层( 远程函数)
仪表板通过SvelteKit远程函数读取和写入其数据,而不是
+page.server.ts load编号 :actions定义 src/lib/remote/*.remote.ts, (中文(简体) ),
按域(domains, (中文(简体) ), reports, (中文(简体) ), stats, (中文(简体) ), users, (中文(简体) ), setup:
query(...)用于读取(域列表、统计、报告细节、域概览)。 網址 过滤器,例如cursor编号 :date编号 :month被传递作为瓦利博特验证的论据.form(...)用于用户提交的突变(邀请用户,编辑用户,完整设置).command(...)对于事件处理器引用的程序变异(域更新).
每个函数通过 getRequestEvent().locals (单位:千美元)locals.user, (中文(简体) ),
locals.session, (中文(简体) ), locals.services页:1 hooks.server.ts 众生. 行政和
每个域的守卫都生活在远程函数内。 变异后, 相关的
query(...).refresh() 需要单飞UI更新.
错误映射集中到 src/lib/server/httpErrors.ts数字 :
toRemoteError(error, { redirectOnUnauthorized }) 将域错误转换为 SvelteKit
error()编号 :redirect(),以及 requireUser(user) 守备本届会议。 打电话
toRemoteError(...) 直接内置 a catch - 从来没有 throw 它的结果.
远程函数由 experimental.remoteFunctions 财务报告和审定财务报表
compilerOptions.experimental.async 内 vite.config.ts。仅保留
服务器负载为 +layout.server.ts (供应 user页:1 setup/+page.server.ts
重定向后卫, 和登录通用/排出负载 .
环境变量在 src/env.ts 通过 defineEnvVars (瓦利博特语)
和进口、打印和验证,从 $app/env/private。登录/
校验 /auth/* 流打 认证服务 CloudFront 源并故意
离开远程功能层外.
第一次部署
SvelteKit大楼需要 FRONTEND_URI 环境变量(CloudFront URL),它直到第一次部署后才存在:
- 设定
FRONTEND_URI到占位符 URL( 例如).https://placeholder.cloudfront.net(中文(简体) ) - 部署 — 从 CDK 输出注意 CloudFront URL
- 更新
FRONTEND_URI使用真实的 URL 并重新部署
地方发展
运行 SvelteKit dev 服务器对面 真实 已部署后端- 无固定装置 :
bun install
cp .env.local.example .env.local # then fill in real values
aws sso login # (or export AWS_PROFILE) so SDK clients can reach AWS
bun run dev
bun run dev 网址:http://localhost:5173。 这个 dev 脚本运行
bun --env-file=.env.local vite dev这样 .env.local 装入 process.env
在服务器启动前。 两张表格的正文是用 src/env.ts
(单位:千美元)defineEnvVars)并读取、打印和验证,从 $app/env/private 内
hooks.server.ts; 工作空间 SDK 客户端仍然从
process.env 在导入时间。 (.env.local 必须存在 - 它是本地 def
配置; 从 .env.local.example. ) (中文(简体) )
假冒会议
当地没有Lambda授权人,所以 @beesolve/auth-service 输入 dev
自动会话。 设定 DEV_USER_EMAIL 内 .env.local 改为 真实 用户的
dMARC 表格中的电子邮件 —— 应用程序浏览以解决用户的角色
(admin/user)和允许的域,所以你可以看到同样的UI,他们会。 这是
护卫 import.meta.env.DEV 绝不列入已部署的捆绑.
若为 DEV_USER_EMAIL 未设置, 认证服务会回到内置
dev-user 会话,它不会解决对桌子(导航隐藏)
只有管理员的链接和该用户的数据查询不返回任何内容).
必需的 vars
见 .env.local.example 完整名单。 两张桌子
vars (英语:DMARC_TABLE_NAME, (中文(简体) ), DMARC_REVERSE_INDEX)将宣布为 src/env.ts 财务报告和审定财务报表
经验证 defineEnvVars 第一次从 $app/env/private编辑
认证/电子邮件/消费者 SDK 客户端在导入时分析自己的内存( 自动处理器)
ARN, 电子邮件队列/ table/bucket, 任务队列), 因此所有任务队列必须全部存在或第一个
请求会扔出.
特征
- 域概览,包含汇总通过/失效数据
- 以页标显示的全域报告时间表
- 用户管理( 请, 删除)
- 电子邮件编码登录( 无密码)
资料来源:IP浓缩(ipinfo.io)
源IP可通过免费的ASN/组织名称和国家来丰富
(原始内容存档于2017-10-21). ipinfo.io Lite API. 这是可选的——没有密钥 ASN/ 国别列
改为: —。见 文件/ipinfo-setup.md 如何获得
键并配置在本地和部署中.