尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 AWS CLI 更新 CloudFront 字段级加密(Field-Level Encryption)配置:update-field-level-encryption-config 完整实战指南

使用 AWS CLI 更新 CloudFront 字段级加密(Field-Level Encryption)配置:update-field-level-encryption-config 完整实战指南 使用 AWS CLI 更新 CloudFront 字段级加密Field-Level Encryption配置update-field-level-encryption-config 完整实战指南【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文以 aws-cli 仓库中 update-field-level-encryption-config 示例 为核心系统讲解如何使用aws cloudfront update-field-level-encryption-config命令安全地修改 CloudFront 字段级加密Field-Level Encryption简称 FLE配置。你将掌握配置 ID 与 ETag 的获取方式、--if-match乐观并发控制机制、fle-config.json配置文件的完整字段语义以及更新成功后的校验方法能够在生产环境中安全地完成 FLE 配置的迭代变更。一、背景为什么更新 FLE 配置需要额外的前置条件CloudFront 字段级加密用于在边缘节点对请求中敏感的表单字段进行加密其核心是配置Configuration与配置集Profile两层模型Field-Level Encryption Profile定义使用哪把公钥public key对哪些字段加密属于加密策略本身Field-Level Encryption Config定义在何种请求条件下按查询参数 query arg 或按 Content-Type将流量路由到哪个 Profile。与创建配置不同更新操作是破坏性的就地修改因此 AWS 要求调用方提供两个关键凭证配置的 ID用于定位要更新的目标配置配置的 ETag用于乐观并发控制防止基于过期状态覆盖他人已提交的修改。这两者的来源在 示例文档 中有明确说明接下来逐一展开。二、获取配置 ID来自创建或列表命令配置 ID 是形如C3KM2WVD605UAY的字符串可通过以下两条路径获得2.1 创建时获得在 create-field-level-encryption-config 示例 中创建成功后返回的Location与FieldLevelEncryption.Id字段中即包含该 IDaws cloudfront create-field-level-encryption-config \ --field-level-encryption-config file://fle-config.json输出节选中Id: C3KM2WVD605UAY即为后续更新操作所需的配置 ID同时返回的ETag: E2P4Z4VU7TY5SG是创建后的初始版本标记。2.2 从列表中筛选在 list-field-level-encryption-configs 示例 中aws cloudfront list-field-level-encryption-configs会列出账号下全部配置输出包含Id、LastModifiedTime、Comment以及内嵌的QueryArgProfileConfig/ContentTypeProfileConfig摘要便于在更新前核对目标对象aws cloudfront list-field-level-encryption-configs三、获取 ETagget 命令返回的版本标记ETag 是配置当前的版本指纹。只有与服务端当前状态一致的 ETag才能通过If-Match校验。获取方式在 get-field-level-encryption-config 示例 中演示aws cloudfront get-field-level-encryption-config --id C3KM2WVD605UAY输出顶层的ETag: E2P4Z4VU7TY5SG即为更新时--if-match参数所需的值。同类的get-field-level-encryption命令示例同样返回 ETag可用于获取完整对象信息。重要每次成功更新后服务端会生成新的 ETag详见下文输出部分。因此如果需要连续执行多次更新必须在每次更新前重新调用get-field-level-encryption-config获取最新 ETag。四、核心命令与参数详解aws cloudfront update-field-level-encryption-config \ --id C3KM2WVD605UAY \ --if-match E2P4Z4VU7TY5SG \ --field-level-encryption-config file://fle-config.json三个参数的语义与底层映射如下依据 cloudfront 服务模型 中UpdateFieldLevelEncryptionConfigRequest形状参数作用底层 HTTP 映射--id要更新的配置 ID必填URI 路径参数PUT /2019-03-26/field-level-encryption/{Id}/config--if-match配置当前的 ETag用于并发保护请求头If-Match对应模型中的location: header, locationName: If-Match--field-level-encryption-config完整的更新后配置JSON 文件或内联 JSON必填请求体payloadFieldLevelEncryptionConfig从模型定义可以看到FieldLevelEncryptionConfig与Id是必填成员且配置内容通过file://前缀从本地文件加载——这是 aws-cli 处理复杂嵌套结构的标准做法JSON 文件会被完整解析后放入请求体无需手工拼装 XML。需要特别强调的是更新是整体替换而非字段级合并。请求体中的配置将完整覆盖现有配置Quantity等计数字段必须与Items实际数量严格一致否则会触发InconsistentQuantities错误。五、fle-config.json配置文件的完整结构更新示例中使用的fle-config.json位于当前目录完整内容如下{ CallerReference: cli-example, Comment: Updated example FLE configuration, QueryArgProfileConfig: { ForwardWhenQueryArgProfileIsUnknown: true, QueryArgProfiles: { Quantity: 0 } }, ContentTypeProfileConfig: { ForwardWhenContentTypeIsUnknown: true, ContentTypeProfiles: { Quantity: 1, Items: [ { Format: URLEncoded, ProfileId: P280MFCLSYOCVU, ContentType: application/x-www-form-urlencoded } ] } } }各字段语义依据服务模型FieldLevelEncryptionConfig及其子形状service-2.json5.1 顶层字段CallerReference必填唯一请求标识用于防止请求重放。更新时不得修改其值——尝试变更会触发IllegalUpdate错误。示例中沿用创建时的cli-example正是这个原因Comment可选备注本示例用它演示更新效果由Example FLE configuration改为Updated example FLE configuration。5.2 QueryArgProfileConfig按查询参数路由ForwardWhenQueryArgProfileIsUnknown当请求中携带的X-Profile类查询参数无法匹配任何 profile 时是否直接转发true表示放行false表示拒绝QueryArgProfiles查询参数到 Profile 的映射集合Quantity声明条目数量。示例中为0不启用查询参数路由仅保留未知参数放行策略。5.3 ContentTypeProfileConfig按 Content-Type 路由ForwardWhenContentTypeIsUnknown当请求的 Content-Type 未被识别时是否转发ContentTypeProfilesContent-Type 到 Profile 的映射包含Format字段格式示例为URLEncoded表示对application/x-www-form-urlencoded请求体做 URL 解码后加密合法的取值由 CloudFront 支持的表单编码格式决定ProfileId指向已创建的 FLE Profile如P280MFCLSYOCVU该 Profile 必须先存在否则返回NoSuchFieldLevelEncryptionProfileContentType匹配的 MIME 类型示例为application/x-www-form-urlencoded。若需在更新中修改路由规则可调整Quantity与Items的对应关系。创建 Profile 的方法见 create-field-level-encryption-profile 示例Profile 的更新见 update-field-level-encryption-profile 示例。六、更新成功后的输出与校验命令执行成功后返回完整的配置对象示例原文{ ETag: E26M4BIAV81ZF6, FieldLevelEncryption: { Id: C3KM2WVD605UAY, LastModifiedTime: 2019-12-10T22:26:26.170Z, FieldLevelEncryptionConfig: { CallerReference: cli-example, Comment: Updated example FLE configuration, QueryArgProfileConfig: { ForwardWhenQueryArgProfileIsUnknown: true, QueryArgProfiles: { Quantity: 0, Items: [] } }, ContentTypeProfileConfig: { ForwardWhenContentTypeIsUnknown: true, ContentTypeProfiles: { Quantity: 1, Items: [ { Format: URLEncoded, ProfileId: P280MFCLSYOCVU, ContentType: application/x-www-form-urlencoded } ] } } } } }输出解读对应模型UpdateFieldLevelEncryptionConfigResultETag本次更新后生成的新版本标记示例中由E2P4Z4VU7TY5SG变为E26M4BIAV81ZF6。后续若再次更新必须以它为新的--if-match值FieldLevelEncryption更新后的完整配置对象其中LastModifiedTime会刷新为本次更新时间可用于确认变更已生效。建议的验证闭环更新后再次执行aws cloudfront get-field-level-encryption-config --id C3KM2WVD605UAY核对Comment与路由规则是否符合预期并记录返回的新 ETag 供后续操作使用。七、错误处理与常见失败场景依据 UpdateFieldLevelEncryptionConfig 操作定义 的errors列表以下错误在实际更新中最常见错误触发原因排查建议PreconditionFailedIf-Match携带的 ETag 与服务端当前 ETag 不一致并发修改或 ETag 过期重新执行 get 命令获取最新 ETag 后重试IllegalUpdate修改了CallerReference或其他不允许变更的字段保持CallerReference与原配置一致InconsistentQuantitiesQuantity与Items实际条目数不一致修正 JSON 中的Quantity计数NoSuchFieldLevelEncryptionConfig--id不存在或已删除用 list 命令确认配置 IDNoSuchFieldLevelEncryptionProfileProfileId指向的 Profile 不存在先创建 Profile 再更新配置InvalidIfMatchVersionIf-Match头版本无效使用 get 命令返回的原始 ETagTooManyFieldLevelEncryptionQueryArgProfiles/TooManyFieldLevelEncryptionContentTypeProfiles查询参数或 Content-Type 条目数超出配额精简Items条目其余错误如AccessDenied权限不足、InvalidArgument参数非法、QueryArgProfileEmpty查询参数 Profile 为空等均会在请求校验阶段被服务端拦截。八、全生命周期工作流小结结合仓库中完整的 FLE 示例族create、list、get、update、delete一个标准的安全更新流程为创建 Profilecreate-field-level-encryption-profile配置加密字段与公钥创建 Configcreate-field-level-encryption-config记录返回的Id与ETag更新前置get-field-level-encryption-config --id ID获取最新 ETag执行更新update-field-level-encryption-config --id ID --if-match ETag --field-level-encryption-config file://fle-config.json校验与记录从输出中读取新 ETag 与LastModifiedTime确认变更生效后续迭代重复步骤 3–5始终保持 ETag 与服务端一致。这套基于If-Match的乐观并发流程保证了对 FLE 配置的每次修改都是建立在最新状态之上避免了团队协作或自动化脚本场景下常见的陈旧写入覆盖新配置问题。九、适用前提与限制本指南基于当前仓库 2019-03-26 版 CloudFront 服务模型awscli/botocore/data/cloudfront/目录下同时存在多个 API 版本目录CLI 默认使用该版本对应的接口定义更新操作是整体替换语义提交的 JSON 必须包含完整的FieldLevelEncryptionConfigCallerReference必填而不是只携带欲修改的字段字段级加密功能有 Profile/Config 数量与条目配额限制超出会触发上述TooMany*系列错误若需删除配置可参考 delete-field-level-encryption-config 示例Profile 的删除见 delete-field-level-encryption-profile 示例。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表