使用 AWS 开发者工具自动化 Cedar 策策验证 安全博客
使用AWS开发工具自动化Cedar策略验证
关键要点
在本篇文章中,我们展示了如何通过AWS开发工具构建一个验证Cedar策略文件的构建管道。此管道能够检测开发生命周期早期的错误,帮助开发者预防未被发现的安全问题。文章中涉及的技术包括AWS CodeCommit、AWS CodeBuild和AWS CodePipeline。
Cedar是一种开源语言,用于编写策略并基于这些策略做出授权决策。AWS的多种安全服务如AWS Verified Access和Amazon Verified Permissions利用Cedar定义策略。这篇文章将展示如何利用这些工具实现Cedar策略的有效构建与验证。

概述
Cedar支持对策略中的实体类型结构进行模式声明,并执行基于该模式的策略验证。通过正确的构建管道,不仅能够实时验证策略,还能够捕获因策略逻辑产生的潜在错误。
本篇文章扩展了一个假设的照片分享应用程序,通过该应用程序,用户可以将照片组织为相册,并与特定用户组分享。文章中描述了如何确保用户JohnDoe对相册JaneVacation及其包含照片的访问权限。
下表总结了在Cedar策略中设置的关键授权要求:
用户相册照片授权类型JohnDoeJaneVacationsunsetjpg允许查看JohnDoeJaneVacationnightclubjpg禁止访问以下是与策略相关的Cedar代码示例:
cedarpermit ( principal == PhotoAppUserJohnDoe action == PhotoAppActionviewPhoto resource in PhotoAppAlbumJaneVacation)
forbid ( principal action resource in PhotoAppApplicationPhotoApp)when { resourcelabelscontains(private) }unless { resourceowner == principal }
当发起针对特定资源的授权请求时,我们可以检测到具体的授予或拒绝情况。
AWS开发工具
通过AWS开发工具,您可以托管代码,并构建、测试和部署应用程序及基础设施。主要使用的工具包括:
AWS CodeCommit:用于托管Cedar策略和测试套件。AWS CodeBuild:用于运行测试。AWS CodePipeline:用于自动化触发构建操作。通过这些工具,您将学习如何创建管道、提交策略和测试、运行通过的构建,并观察如何在验证过程中捕捉到策略错误。
快鸭加速器免费版永久前提条件
为顺利完成以下步骤,请确保已满足以下前提条件:
在您的计算机上安装了Git客户端。为本地测试设置bash兼容的环境,例如Apple macOS,Windows子系统Linux (WSL)或Git Bash。可选安装Visual Studio Code中的Cedar策略语言扩展。注册一个AWS账户,并设定权限以创建本示例中所用的资源。安装并配置AWS命令行界面 (AWS CLI)。有关详细信息,请参阅安装AWS CLI和配置AWS CLI。设置本地环境
设置本地环境的步骤如下:
使用Git克隆本篇文章的GitHub存储库:bashgit clone git@githubcomawssamples/cedarpolicyvalidationpipelinegit
在将源代码提交到CodeCommit存储库之前,在本地运行测试套件;这可以帮助您缩短反馈循环。要本地运行测试套件,请选择以下任一选项:选项1:安装Rust并编译Cedar CLI二进制文件。
bashcurl proto =https tlsv12 sSf https//shrustuprs sh s ycargo install cedarpolicycli@242cd policystore/tests ampamp /cedartestrunnersh
选项2:运行CodeBuild代理。
bash/codebuildbuildsh i publicecraws/codebuild/amazonlinux2x8664standard50 a codebuild
项目结构
policystore目录包含每个cedar文件的Cedar策略。Cedar模式在cedarschemajson文件中定义。tests子目录包含表示应用数据的cedarentitiesjson文件,其子目录例如,专辑JaneVacation表示测试套件。测试套件目录包含ALLOW和DENY子目录内的独立测试,每个目录包含一个或多个包含Cedar将评估的授权请求的JSON文件。
cedartestrunnersh脚本运行Cedar CLI以针对Cedar模式验证每个cedar文件,并输出结果为PASS或ERROR。
设置CodePipeline
在此步骤中,您将使用AWS CloudFormation来配置管道中使用的服务。
设置管道的步骤如下:
导航到克隆存储库的目录。bashcd cedarpolicyvalidationpipeline
从模板创建新的CloudFormation堆栈。bashaws cloudformation deploy templatefile templateyml stackname cedarpolicyvalidation capabilities CAPABILITYNAMEDIAM
等待消息“Successfully created/updated stack”。调用CodePipeline
下一步是将源代码提交到CodeCommit存储库,然后配置和调用CodePipeline。
调用CodePipeline的步骤如下:
向您之前克隆的存储库添加名为codecommit的Git远程。bashgit remote add codecommit (aws cloudformation describestacks stackname cedarpolicyvalidation query Stacks[0]Outputs[OutputKey==CedarPolicyRepoCloneUrl]OutputValue output text)
将代码推送到CodeCommit存储库。这将启动管道运行。bashgit push codecommit main
检查管道运行的进度。bashaws codepipeline getpipelineexecution pipelinename cedarpolicyvalidation pipelineexecutionid (aws codepipeline listpipelineexecutions pipelinename cedarpolicyvalidation query pipelineExecutionSummaries[0]pipelineExecutionId output text) query pipelineExecutionstatus output text
构建将在CodePipeline中安装Rust并编译Cedar CLI。在大约四分钟后,管道运行状态应显示为“Succeeded”。
改进某些策略
此照片分享应用程序示例包括重叠策略,以模拟重构工作流程。在进行更改后,测试套件仍能通过。DoePhotoscedar和JaneVacationcedar的静态策略被逻辑上等效的viewPhototemplatecedar策略模板和两个在cedartemplatelinksjson中定义的模板链接策略所替代。在删除多余策略后,成功通过的测试表明期望的应用权限保持不变。
重构策略的步骤如下:
删除DoePhotoscedar和JaneVacationcedar。将更改提交到存储库。bashgit add git commit m Refactor some policiesgit push codecommit main
检查管道进度。经过约20秒后,管道状态应显示“Succeeded”。第二次管道构建运行较快,因为构建规范配置了缓存版本的Cedar CLI。
破坏构建
在确认您拥有一个有效的管道来验证Cedar策略后,看看当您提交一个无效的Cedar策略时会发生什么。
破坏构建的步骤如下:
使用文本编辑器打开policystore/Photolabelsprivatecedar文件。在when子句中,将resourcelabels更改为resourcelabel去掉“s”。此策略语法有效,但不再符合Cedar模式的要求。将更改提交到存储库。bashgit add git commit m Break the buildgit push codecommit main
登录AWS管理控制台,打开CodePipeline控制台。等待“Most recent execution”字段显示“Failed”。选择管道并点击“View in CodeBuild”。选择“Reports”选项卡,然后选择最新的报告。回顾报告摘要,其中显示了通过和失败/错误测试用例的总数及通过率,如图2所示。要获取错误详细信息,请在“Details”部分选择状态为“Error”的“validate Photolabelsprivatecedar”测试用例。此次单一策略更改导致两个未通过的测试用例。详细错误消息显示了Cedar CLI的输出。策略在验证时由于属性标签的错误而未能匹配,导致预期的DENY结果未能产生。每个这些测试都能帮助您避免部署无效策略。
清理
为了避免持续的费用,以及清理在您的AWS账户中部署的资源,请完成以下步骤:
清理资源的步骤如下:
打开Amazon S3控制台,选择以“cedarpolicyvalidationcodepipelinebucket”开头的存储桶,然后清空存储桶。打开CloudFormation控制台,选择cedarpolicyvalidation堆栈,然后点击删除。打开CodeBuild控制台,选择Build History,按照cedarpolicyvalidation进行过滤,选择所有结果,然后点击Delete builds。总结
在本文中,您学习了如何使用AWS开发工具实现一个自动化验证Cedar策略的管道。当Cedar策略更新并提交到源代码存储库时,该管道能够有效地检测无效策略和潜在的应用权限错误,这有助于在开发生命周期早期及时发现问题。
要了解有关Cedar策略语言的更多信息,请查看Cedar政策语言参考指南或浏览cedarpolicy组织的源代码。在Visual Studio Code中安装Cedar策略语言扩展,可以实现Cedar策略和模式的实时验证。
如果您对本文有反馈,请在下面的评论部分提交。如果您对本文有疑问,请在Amazon Verified Permissions rePost上开启新线程或联系AWS支持。
作者介绍
Pontus Palmens是一位在瑞典斯德哥尔摩的初创企业解决方案架构师,专注于医疗健康、生命科学和金融科技领域,热爱安全领域。在工作之余,他喜欢在家中录音棚制作电子音乐,并与家人共度美好时光。
Kevin Hakanson是AWS全球公共部门的高级解决方案架构师,驻扎在明尼苏达州。他与教育科技和政府科技客户合作,设计、验证并推出基于云原生技术和现代开发实践的产品。闲暇时,他可能在看电视或与家人一起玩视频游戏。
标签:Amazon Verified Permissions,DevSecOps,开源,安全博客
使用 Amazon Q Confluence Cloud 连接器为亚马逊 Q Business 索引
整合 Amazon Q 以索引 Atlassian Confluence Cloud 内容关键要点Amazon Q Business 是一款以生成式人工智能为动力的助手,旨在提升企业运营效率。可通过配...
在规模上实现最小权限的策略
实现最小权限的策略 第1部分通过 Joshua Du Lac 和 Emeka Enekwizu 于 2024年7月9日发布在 AWS IAM 访问分析器、AWS 身份和访问管理 (IAM)、AWS 组...