生产环境检查清单
在完成项目开发并确定其具备生产就绪状态后,您应当执行以下检查清单以确保项目:
- 具备安全性
- 能够承受预期负载而不出现故障
- 在生产环境中保持持续可用性
安全防护
- 确保启用行级安全(RLS)
- 未启用RLS或未设置合理策略的表允许任何客户端访问和修改数据。在大多数情况下这都不是您期望的行为。
- 了解更多关于RLS的内容。
- 对包含敏感数据的表启用复制功能,通过设置行级安全(RLS)和行安全策略:
- 在Supabase控制台的认证 > 策略页面启用RLS并创建安全策略。
- 在Supabase控制台的数据库 > 发布页面管理复制表。
- 开启SSL强制
- 为数据库启用网络限制。
- 确保您的Supabase账户启用了多因素认证(MFA)。
- 如果使用GitHub登录,在GitHub上启用2FA。由于GitHub账户拥有对Supabase组织的管理权限,应使用强密码和U2F密钥或TOTP应用进行2FA保护。
- 如果使用邮箱+密码登录,为Supabase账户设置MFA。
- 考虑在Supabase组织中添加多个所有者。这确保当某个所有者无法联系或失去账户访问权限时,您仍能保持对组织的所有者访问权限。
- 确保在
设置 > 认证
页面启用了邮件确认功能。 - 确保您已为一次性密码(OTP)设置了合理有效期。建议设置为3600秒(1小时)或更短。
- 如需更高熵值,可增加OTP长度。
- 如果应用需要更高安全级别,考虑为用户设置多因素认证(MFA)。
- 使用自定义SMTP服务器发送认证邮件,让用户确认邮件来自可信域名(最好与应用托管域名相同)。可从SendGrid、AWS SES等主要邮件服务商获取SMTP凭证。
- 认真思考作为攻击者会如何利用您的服务,并采取防范措施。
- 查阅这些常见网络安全威胁。
- 使用安全顾问检查并审查数据库中的问题。
性能优化
-
确保为常见查询模式创建合适的索引
- 了解更多关于Postgres索引的知识
pg_stat_statements
可以帮助您识别高频或慢查询
-
进行负载测试(建议在预发布环境)
- 使用 k6 等工具可以模拟大量用户并发访问
-
如需更多资源请升级数据库。若需要超出所列规格的资源,请联系 enterprise@supabase.io
-
如果您预计会有流量激增(如重大产品发布)且处于团队版或企业版计划,请联系支持团队提供发布详情,我们将协助监控您的项目
-
若预计数据库大小超过4GB,请启用时间点恢复(PITR)附加组件。每日备份会在执行时占用数据库资源,而PITR仅备份变更数据,资源效率更高
-
使用性能顾问检查并分析数据库问题
可用性
-
使用您自己的SMTP凭证,以便完全控制事务性认证邮件的送达率(参见设置 > 认证)
- 您可以从SendGrid、AWS SES等主要邮件服务提供商获取SMTP凭证。更多详情请参考我们的SMTP指南。
- 使用自定义SMTP提供商时,认证邮件的默认速率限制为每小时30个新用户,如果进行重大公开公告,您可能需要更高的限制。
-
免费计划中7天内活动极低的应用可能会被Supabase暂停以节省服务器资源。
- 您可以从Supabase仪表板恢复已暂停的项目。
- 升级到专业版可确保您的项目不会因不活动而被暂停。
-
免费计划不提供数据库备份下载功能。
-
Supabase项目默认使用提供99.8-99.9%持久性的磁盘。
- 如需应对磁盘故障的可用性保障,请使用读取副本
- 如需应对磁盘故障的持久性保障,请使用PITR
-
升级到Supabase专业版可获得我们的技术支持团队服务。
速率限制、资源分配与滥用防护
- Supabase 实施了多项防护措施来应对突发流量,防止滥用并帮助提升平台整体稳定性
- 如果您使用的是团队版或企业版计划,并预计会有高负载事件(如产品发布、重度负载测试或持续高资源使用),请通过支持表单提交工单寻求帮助。请至少提前2周通知。
认证速率限制
- 下表展示了以下认证端点的速率限制配额。您可以在此处为项目配置认证速率限制。
端点 | 路径 | 限制依据 | 速率限制 |
---|---|---|---|
所有发送邮件的端点 | /auth/v1/signup /auth/v1/recover /auth/v1/user 1 | 组合请求总和 | 截至2024年9月3日,已更新为2封邮件/小时。仅在使用自定义SMTP设置时可调整此限制。 |
所有发送一次性密码(OTP)的端点 | /auth/v1/otp | 组合请求总和 | 默认360次OTP/小时。可自定义配置。 |
发送OTP或魔法链接 | /auth/v1/otp | 最后一次请求 | 默认60秒窗口期后才允许新请求。可自定义配置。 |
注册确认请求 | /auth/v1/signup | 最后一次请求 | 默认60秒窗口期后才允许新请求。可自定义配置。 |
密码重置请求 | /auth/v1/recover | 最后一次请求 | 默认60秒窗口期后才允许新请求。可自定义配置。 |
验证请求 | /auth/v1/verify | IP地址 | 360次请求/小时(突发最高30次请求) |
令牌刷新请求 | /auth/v1/token | IP地址 | 1800次请求/小时(突发最高30次请求) |
创建或验证MFA挑战 | /auth/v1/factors/:id/challenge /auth/v1/factors/:id/verify | IP地址 | 15次请求/分钟(突发最高30次请求) |
匿名登录 | /auth/v1/signup 2 | IP地址 | 30次请求/小时(突发最高30次请求) |
实时配额
滥用防护
- Supabase 在注册、登录和密码重置端点提供 CAPTCHA 防护。请参考我们的指南了解如何使用此方法防范滥用行为
邮件链接有效期
-
在企业系统环境中,邮件扫描程序可能会扫描并自动对邮件中的密码重置链接或注册链接发起
GET
请求。由于 Supabase Auth 的链接均为一次性使用,用户在扫描后点击邮件中的链接时会收到错误提示。为解决此问题:- 建议修改邮件模板,将原始魔法链接替换为您控制的域名链接
- 该域名可向用户展示"登录"按钮,用户点击后将重定向至原始魔法链接URL
-
使用自定义SMTP服务时,某些服务可能启用了链接追踪功能,这可能会覆盖或篡改Supabase Auth发送的邮件确认链接。为避免此问题,我们建议在使用自定义SMTP服务时禁用链接追踪功能
订阅Supabase状态页面
通过订阅状态页面及时获取Supabase服务状态信息。我们建议通过RSS订阅设置Slack通知,确保您的团队能及时获取服务状态变更信息。
设置 Slack 通知
-
在 Slack 中安装 RSS 应用:
- 访问 Slack 应用商店中的 RSS 应用页面
- 如果尚未安装,点击
添加到 Slack
- 如果已安装则会直接进入下一步,无需重新安装应用
-
配置 Supabase 状态订阅:
- 创建一个专用频道(例如
#supabase-status-alerts
)用于接收状态更新 - 在 RSS 应用页面 找到 添加订阅 部分,将订阅 URL 设置为
https://status.supabase.com/history.rss
- 选择您指定的频道并点击"订阅此源"
- 创建一个专用频道(例如
配置完成后,每当 Supabase 状态页面更新时,您的团队将在 Slack 中自动收到通知。
详细设置说明请参阅 将 RSS 订阅添加到 Slack。
后续步骤
本检查清单会持续更新,请定期查看。您也可以通过提交 GitHub PR 来建议新增或修改内容。