View a markdown version of this page

最佳实践 - Amazon Location Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

本节概述了保护您的 Amazon Location Service 应用程序和优化身份验证使用的最佳实践。通过实施凭证隔离、监控和适当的限制,您可以最大限度地降低安全风险并控制成本。有关在 API 密钥、Amazon Cognito 和之间进行选择的指导 AWS Identity and Access Management,请参阅。选择身份验证方法

凭证管理

当您需要轮换或撤消访问权限时,适当的凭据管理可以降低安全风险并简化操作。

  • 为每个应用程序使用单独的证书 — 为每个应用程序或环境(开发、暂存、生产)创建不同的 API 密钥或 IAM 角色。如果凭据遭到泄露,这将限制爆炸半径。

  • 应用最低权限原则-仅授予每个用例所需的最低权限。限制对特定 API 和资源的访问权限,而不是使用通配符。

  • 定期@@ 轮换证书 — 定期轮换 API 密钥并查看 IAM 策略。立即删除未使用的凭证。

  • 切勿在源代码中公开凭证 — 将 API 密钥、Amazon Cognito 身份池 ID 和其他敏感值存储在环境变量、机密管理器或安全配置存储中。不要将它们提交给版本控制。

API 密钥优化

API 密钥提供了一种简单的方法来授予对地图、地点和路线资源的未经身份验证的只读访问权限。遵循这些做法以最大限度地降低安全风险并优化使用情况。

  • 限制操作和资源-创建 API 密钥时,仅指定应用程序所需的操作和资源。例如,仅限地图的应用程序应仅允许对地图提供者资源进行geo-maps:*操作。

  • 应用客户限制-为 Web 应用程序配置域名反向链接限制,或为 Android 和 iOS 应用程序配置应用标识符限制。这样可以防止您的密钥被用于未经授权的来源。有关更多信息,请参阅 按请求源限制 API 密钥的使用

  • 设置到期时间-使用密钥到期时间强制定期轮换。在旧密钥到期之前创建新密钥,更新您的应用程序,然后停用旧密钥。

  • 监控每个密钥的使用情况-使用带有ApiKeyName维度的 CloudWatch指标来单独跟踪每个密钥的使用情况。在出现意外峰值时设置警报。CallCount

  • 删除未使用的密钥-定期审核您的 API 密钥并删除任何不再使用的密钥。已停用的非活动密钥可以在 90 天后删除。

按请求源限制 API 密钥的使用

您可以为 API 密钥配置客户端限制,从而仅限访问特定的域或移动应用程序。按域进行限制时,只有当 HTTP Referer 标头与您提供的值相匹配时,服务才会授权请求。当受 Android 或 Apple 应用程序限制时,只有当应用程序标识符 HTTP 标头字段与您提供的值相匹配时,该服务才会授权请求。

有关 API 密钥限制的更多信息,请参阅 Amazon Location Service API 参考ApiKeyRestrictions中的。

Android 应用程序标识符:

  • X-Android-Package:

    Android 应用程序的唯一标识符,在应用程序的 build.gradle 文件中定义,通常采用反向域格式。

    示例:

    com.mydomain.appname

  • X-Android-Cert:

    用于签署安卓APK的签名证书的 SHA-1 哈希值。

    示例:

    BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75

Apple 应用程序标识符:

  • X-Apple-Bundle-Id:

    Apple(iOS、macOS 等)应用程序的唯一标识符,在应用程序的 Info.plist 中定义,通常采用反向域格式。

    示例:

    com.mydomain.appname

亚马逊 Cognito 优化

Amazon Cognito 提供了比 API 密钥更精细的访问控制,并且支持经过身份验证和未经身份验证的用户。

  • 缩小未经身份验证的角色范围 — 使用身份池进行匿名访问时,请附加 IAM 策略,这些策略仅允许应用程序所需的特定 Amazon Location 操作和资源。

  • 使用条件密钥进行 IP 筛选 — 在 IAM 策略中添加aws:SourceIp条件以在适当时限制对已知 IP 范围的访问。

  • 将身份池保存在同一区域 — 在与您的 Amazon Location Service 资源相同的 AWS 区域内创建 Amazon Cognito 身份池,以避免跨区域延迟并确保正确访问。

  • 尽可能使用经过身份验证的身份 — 如果您的应用程序有登录流程,请使用 Amazon Cognito 用户池或联合身份向经过身份验证的角色授予特定权限,而不是依赖未经身份验证的访问。

IAM 优化

对于服务器端应用程序和内部工具,使用 AWS Identity and Access Management 可完全控制访问权限。

  • 使用 IAM 角色代替长期证书 — 对于在 AWS 计算服务(例如 Amazon EC2、Lambda 或 Amazon ECS)上运行的应用程序,请使用 IAM 角色自动提供临时证书。

  • 应用资源级权限-在策略中指定资源 ARN,而不是使用通配符。例如,限制对特定跟踪器或地理围栏收集资源的访问权限。

  • 使用政策条件-添加条件,例如限制aws:RequestedRegion对特定区域的访问或基于属aws:PrincipalTag性的访问控制。

  • 启用 CloudTrail — 用于 AWS CloudTrail 记录所有 Amazon Location Service API 调用,以进行审计和合规。定期查看日志,了解意外的访问模式。