好 谢谢大家参加这个今天最后一个session最后一个时间段这个session然后我叫扎亿 我是目前是微软的一名高级产品经理然后我现在同时也是Notary Project社区的一名Mentenner然后严妮介绍大家好 欢迎加入我们今天的设计我叫王严来自Vivierware目前是SynCamp下面的Harbor和Distribution的Mentenner多谢好 谢谢严 然后今天也是我第一次和严线下见面很荣幸能够有这样的一个机会和Harbor的Mentenner能一起做一个session我们今天的这个主题是跟大家介绍一下然后在CICD里面使用Notary Project ORAS以及Harbor来保障你的软件容器供应链安全sorry其实供应链安全这几年一直是比较热的一个话题然后我这里面有最新的两组数据然后这个都是2023年的一个专业的机构做的一个统计那么最近三年内针对软件供应链安全的针对软件供应链攻击平均每年增加接近7.5倍然后另外一组数据是有87%的这样的一个容器镜像是有高风险和严重的这个安全漏洞的那么其实软件供应链这个其实是危机四伏我觉得可能就是说我们很难在源头上彻底的去阻止这种恶意的攻击但是有句话说得好就是说我们可能不能够真的去改变你但是我们可以做好自己所以我今天也是有一个号召就是说大家各个组织能够重视软件这个供应链的这个安全这个问题然后采取一些有效的这样的一些措施来最大程度的降低一些风险那么这里我给大家推荐一些推荐一个就是保障供应链安全的一个这样的一个框架一个Firmwork那么这个Firmwork包含五个部分然后是它其实覆盖了这个容器镜像从构建一直到这个容器镜像最终的在这个生产环境下运行这五个部分那么第一部分是一个叫获取的这个阶段那么这个阶段主要解决的这个问题是你怎么样能够安全的获取从set apart第三方获取安全的获取这样的一个容器镜像因为现在大家也知道基本上没有一个公司能够基本上没有一个公司能够生产所有它需要的这样的一个软件那么第二个阶段是叫我们可以称为目录吧中文不是非常好翻译那么这个阶段主要解的是问题就是我们各个组织其实有一些内部的一些团队那么这个主要解决问题就是我们内部的团队怎么样能够使用到经过验证的安全的这样的一个容器镜像第三部分是一个构建的这个阶段那么构建的阶段这个里面解决的一个主要问题就是如何构建安全并且合规的这样容器镜像那么第四个阶段是部属阶段那么部属阶段主要解决的问题是如何能够保证我们部属的这个容器镜像是可信的同时也是合规的那么最后一个阶段是Round阶段 运行阶段那么这个解决的一个主要的问题就是如果保证 运行时的就是容器运行时的安全以及容器如何能够实施地得到更新那么其实这五个阶段呢其实每个阶段其实都是一个比较相对大的一个topic那么今天我并不会去仔细地介绍这五个阶段但是今天我会给大家分享的是支撑整个这个保证供应连安全的这个给大家分享这个框架的两个核心能力那么第一个核心能力就是说我们需要给容器镜像生成和供应连安全相关的这些制品那么这些制品包括比如说OneAbility这个漏洞报告那么这个大家可能比较熟悉就是我这个容器镜像经过扫描它有哪些安全漏洞那么它的这些级别是什么样的那么第二个第二种这种和供应连安全相关的这些制品比如说是SpawnSpawn就是Software of Materials那么这个里面它是它能够告诉你这个容器镜像它包含哪些软件这些软件的一些版本以及这些软件的这些license那么你可以比如说你可以Check这些检查这些license看看是不是符合你公司内部的这些合规的一些要求然后甚至有一些软件很可能在将来的不久发现一些严重的漏洞那么也可以通过SpawnFile能够发现这样的一些软件比如说之前比较经典的LogForget这个安全漏洞就是一个很好的一个例子然后还有比如说还有这个跟构建相关的一些Provenance相关的数据这个中文也不是非常好翻译其实这个它想表达就是说你的比如说你这个Pipeline是由谁去trigger的然后这个Pipeline当时的这个构建这个环境是怎么样的因为我们也看到这样的一个攻击比如说比较经典这个Solving的攻击就是他们公司的这个构建的这个环节这个Pipeline被compromised那么这个不好意思 说了英文说这个他们的Pipeline被这个黑客攻击了那么这个导致他们产生的这些容器进向其实是有漏洞的但是他们却并不知道所以有了这样一个数据当我们发现这样一个Build的一个环境被这个攻击过后我们可以采取一些硕石去使这个容器进向不能够在生产环境去那个部署然后最后还有比如说这个Lifecycle和容器这个生命周期管理相关的一些数据那么有些这个这个容器进向比如说它已经是out of date了我们可以给它打一个Label那么这样的一个容器进向那么也是不会在这个生产环境上去做一些部署那么这个是一个第一个能力那么第二个能力是说是如何要保证我们的容器进向以及跟这些容器进货相关的这些供应链安全的这些置品的它的真实性和完整性那么真实性指的是用户能够去在使用的时候它能够去确认这个容器进向它确实是来源于它相信的这个发布者那么完整性指的是这个容器进向包括这些其他的置品在整个分发的过程中它没有被恶意的篡改那么举一个例子其实就是说比如说我们在分析这个漏洞分析报告是吧那么这个漏洞分析报告那么你分析下来可能没有问题这个漏洞分析报告很可能已经是被篡改过的所以你这个分析其实也没有任何价值所以说这个如何保证容器进向以及相关的这些安全置品的这个真实性和完整性也是非常重要的那么是这个这两个是这个这个框架的两个核心能力也是我们今天给大家主要需要去分享的好的我们来看一下这个如果我们要给这个容器进向分成这个和Supply Chain供应链安全相关的这些置品我们需要做些什么我们先来看一下这个OCI不知道大家有多少人去了解过OCI它其实是Open Container Initiative那么它主要是致力于和容器技术相关的这个一些通用的一些标准那么它主要包括容器进向如何去存储和分发以及容器的一个容碳那我们今天这个主题主要是和这个容器进向的存储和分发相关的那么在这个OCI这个project它是个Ninux基金会下的一个project那么在它最开始的时候它解决的其实就是这个容器进向的存储和分发的问题那大概是在几年前2017年那么它基于的这个因为Dalker公司也是参与了所以我们大家之前经常说是经常听到说这个DalkerDalker进向Dalker容器是吧那么其实后续我们可以听到OCIOCI进向那么其实OCI是基于这个Dalker进向来来编制的他们的这个就是说他们基本上有90%多是相似的就是他们的这个规范所以说最开始那么OCIOCI这个组织解决这个OCIIMEG的一个存储分发的分发的这个标准那么在整个这几年过程中大家会发现这些数据其实它是增强了容器进向本身的这个信息是吧这些数据其实也是需要随着这个容器进向的分发一起分发所以呢OCI在最近的这些数据其实是这些数据其实它是增强了容器进向本身的这个信息是吧这些数据其实也是需要随着这个容器进向的分发一起分发所以呢OCI在最近的这个标准1.1的这个标准是从大概从训练开始那么它也致力于解决几个问题就是说我们如何去存储和分发非容器进向类的这样的一些质品那么这些质品中其实有相当大一部分它其实是和容器进向相关的那么它们中间的这个关联性是怎么样的那么这里面提到一个Refros API也是这个在这个OCI的这个分发的这个specification你们提到的Refros API它能够帮助我们客户去发现一个质品它有哪些相关的一些其他的一些质品那么这里面给大家举一个例子那么这第一行其实就是一个一个image然后它是一个用一个digest来来确认的因为这个图当时是有点大所以我截掉了一点那么大家可以看到这个specification我们可以看到一个image下面我可以挂一个signature这个也是今天会给大家演示的notary project signature那么这个signature有一个digest来来唯一来确认它那么这个大家也可以发现这个container容器进向下面也会挂一个叫这种类型的一个artifact这个其实是spawn file的一种格式那么这个spawn file可以通过这个digest来做一个确认那么这个大家可以发现spawn file下面还挂一个signature那就说明这个spawn file其实也是被签名的它可以去经过去验证的OK那我们再进一步看一下我戴specification的一些好处就是说其实现在是一个多云的环境就是说很多客户就是说他不愿意绑定在一个特殊的一个cloud provider上所以他一般会考虑不同的cloud provider他们的云的基础设设的一个能力所以他会考虑利用不同cloud provider他们的这种能力他把他的业务能够分散的部署或者是有争对性的一些部署到不同的cloud provider上那么在这种多云的环境下其实大家会发现这个容器这个容器进向就会在这个不同云厂上的这种环境里面去这种叫分发是吧那么在这整个这个分发的过程中我怎么保证它的真实性和这个安全性前面提到的那么整个ocspec有了ocspec我们就可以做到比如说以刚才我举的那个框架比如说我们有一个第三方的一个这样的一个进向仓库是吧这个进向仓库里面有一个有一个容器进向同时它也被签名了那么同时它也有一些其他的artifact那么遵循ocspec这样的一个这样的一个容器进向仓库那么你可以很容易的从一个进向仓库进向仓库移动到就是说分发到另外一个比如说我从第三方registry你们获得的一个这样的一个container容器进向那么我要把它拿到我的内部去使用是吧那么我会去验证一下这个容器进向是否是真实可靠的那么我会去验证一下这个签名那么我同时也会去检查这个spon file有没有一些不符合我公司要求的一些这样的一些软件那么也有可能是这个wannability这个漏洞这个report那么经过验证过后觉得没问题我可以从这个第三方的这个容器仓库拷贝到我的内部的这个进向仓库那么我内部的进向仓库我会基于这个我需要的这个依赖的这样的一个容器进向我来购建我自己的这样的一个和我的应用相关的这样的一些容器进向那最终我也可以去发布到比如说发布到我的生产环境那么我的生产环境很可能就是说比如说我内部的我是用比如说微软的这个容器进向容器进向弹库的存储那么我发布的时候我可以发布到这个AWS的这个ECR这个容器进向上那同时我在整个过程中我都可以确保它的一个真实性和安全性因为不仅仅我的容器进向在整个多云的环境中进行了移动那么我能够去证明印象的安全性的一些其他的一些这样的一些质品也是同样的也是跟随着这个容器进向一起进行移动所以这样的话就能够保证在一个多云的环境下我们能够确保这个容器进向以及我们刚才说的这个和Supply Chain和这个供应链安全相关的这些质品的这个真实性和完整性那么这里也给大家推荐一个Tour叫Oris那么它也是目前是Sandbox这样的一个project那么它的一个主要的功能就是说用Oris这样的一个Tour它包括一个CLI然后它也提供了API你可以用这个Tour进行管理你的OCI Artifact那么这里也给大家列了几个比较经典的命令那么第一个命令大家可以很方便地用OrisCLI的Tour能够把一个Sponfileattached到附加到这个容器经向上那么这个Sponfile会被存储在符合OCI Artifact可以人要求的这些进向仓库上同时这个Sponfile也能够和这个容器经向进行一个关联那么第二个命令就是说用Oris的这个命令去discover一个容器经向它有哪些相关联的这些制品那么这边也是一个例子那么前面和前面例子是一样的我其实就用这个工具去修给大家看的那么大家可以看到用了这个命令过后我就可以去发现我这个容器有这些和Sponfile相关的这些制品那么我在使用这个容器进向前我就可以去验证是吧比如说我可以去验证这个Signature那么我就知道就是来源于我相信的这个容器经向的发布者同时呢我也能够确认它是不是在整个发布的分发的过程中有没有被篡改那么去验证这个Sponfile我可以去检查是不是有不符合我企业要求的一些这个软件的存在甚至包括已经去已经是知道了某个版本有一些漏洞的那么这些软件是不是存在这个容器经向内那么第三个命令就是说也是一个非常简单的命令非常大大家可以看到我可以把一个容器经向我加了一个这样的Flag包括它对应的这些相关连的这些其他的质品从一个进向参顾考卫到另外一个进向参顾然后OrthCli以及它的这个Go的这样的一个API Library目前已经是这个伸转环境可用所以也欢迎大家去扫描这个二维码去了解更多的信息接下来亚伯文接着前面讲的就是OrthCliDistributionSpike1-1最大的改变其实就是可以定制不同的Artifact之间的从属关系然后在亚伯2.9里面我们就支持了这种可以感知并且去建立这种Artifact之间的从属关系比如说我有一个镜像这个镜像的谁是这个镜像的iSplom谁是这个镜像的签名并且用UI的方式是很容易展现的另外就是这种从属关系并不是只是单纯的是存储在一个Harbor阶点当你在两个Harbor之间不同去Repricate你的复制你的不同的Artifact的时候你的从属的签名iSplom也同时会被复制到另外一个Harbor阶点上而且在另外一个Harbor阶点上也可以识别这些从属关系并且建立起来然后另外就是Harbor对于因为在2.9之前Harbor只支持单个的Artifact管理在2.9之后因为有了这种从属关系然后Harbor把现有的所有的能力都延伸到在从属关系的Artifact之间的管理谢谢谢谢言我们继续那么刚才其实给大家介绍了就是前面提到的这个框架的一个第一个核心能力就是说我要能够生成更多的一些和容器进向相关的供应内安全相关的一些其他的质品那么我可以用这些质品去做一些分析来确保这个容器确实是安全可用的那么那就是推荐的这个Notary Project其实它是提供为第二个能力提供一些支撑那我们第二个能力主要讲的就是如何保证这个容器进向以及它的这些相关的这些质品的这个真实性和这个完整性那么Notary Project它是一个也是CNCF的一个项目目前是incubating阶段那么它为用户提供一组规范以及一些基于这些规范实现的一些一些安全工具那么它的这个目的其实就是在这个软件供应链这个领域能够保证这个容器进向以及这个相应的一些其他的一些质品的这个真实性和安全性那么Notary Project的本身就是说如果大家不够了解的话它其实它也是在在社区里它其实也是一个organization那么它这个下面也包含不同的一些子项目那么大家可能对这个Notary听得比较多因为这个是比较早的时候Notary Project的这个organization下面就有一个这样的一个Notary的这样的一个子项目那这个子项目当时是用的是基于TAF-based的就是update framework实现的一个这样的一个包括Client和Server端的这样的一个solution用来保证这个真实性但是呢这个solution有一些挑战就是它的这个podability就是它的便携性就是它的signature没有办法在这个不同的这个进向仓库里进行移动然后它也面临了一些就是客户的一个采用率的一个问题所以所以最近这个Notary这样的一个最开始这个solution渐渐的就淡出了市场那么从这个2016年以后呢整个Notary Project社区就开始考虑一些新的solution来主要是解决这个可便携性就是podability这样的一个问题这个主要就是前面给大家分享的为什么便携性和这个交互性非常重要在一个多云的环境那么这个年我们也有一个子项目是关于这个specification这个里面最重要的其实就是Notary Project Signatures这个签名然后呢Project下面还有三个主要的子项目那个一个是notation它是一个cli tool基于这个Notary Project的这个Signature的这个规范做了一些实现那么下面它也包括这个notation go和一个notation call go两个library那么用户也可以利用这些library来开发自己的这些toolOK然后这边给大家介绍一下Notary Project Tuning特别是notation它的这个它的这个价值吧然后我们最近这个notary project tooling也是有一个第一个版本的release那么它也是生产环境可用那么有一些优点然后比如说我们这个notary project它是基于这个现有的这个PKI的这个infrastructure做的实现那么其实大家也都知道这个签名签名并不是因为cloud native或者容器的这个变得流行而流行其实在容器之前各大的这种主要的一些android企业他们也会对他们的软件进行签名所以notary project可以无缝的那个介入现有的这个签名的这个infrastructure这个架构所以企业基本上不需要做一些大的改动或者是增加一些其他的一些一些元素而且呢更重要的是现有的这些基于PKI的这个infrastructure它其实已经是这种在对于这个企业来说它的privacy和date它其实已经是compliant就是说它已经是符合合规的一些要求了所以的话有了这个保证其实就是说其实企业不用担心因为引入了这样的一个针对容器进向去签名而导致有一些privacy和data compliance一些问题然后notary project还支持扩展性比如说我们支持不同的management system我们现在已经是伸展环境支持针对error的这个k-vote这样的一个k-management system然后同时呢AWS的signer我们现在也是伸展环境支持然后我们现在现在做的有一个叫hashcob这样的一个vote目前是那个正在进行中然后notary project我们也支持两种目前支持两种这个signature的一个格式一个是这个jws这个是比较流行的一个json web signature的格式还有一个是cosy今天早上如果大家听了这个主题音讲大家那个有一位嘉宾也提到这个crown native正在往这个iot还有edgedevice延伸那么cosy这个signature它其实是个binary format就说它非常适合这种低功耗的这样的一个设备那么我们的这个signature的这个便携性positability的问题那么因为适合这个尊重这个oci这个1.1的这样一个规范那么它也得到了一个之前我们最开始的这个notary的这个这个解决方案不能够解决这个问题那么通过这个oci spec我们也得到了解决那么同时我们也还有一个plugin的这样的一个extentability的这样一个firmwork就是说前面的这个工作流或者是验证的工作流不满意那么你也可以基于我们的这个plugin的一个specification做一个开发下面的话就是说我们在这个在验证这个一个容器进向或者是一个制品它是否安全的话我们也提供了一个精细力度的一个叫trust policy那么用户可以去针对自己的一个情况去定制一些这样的一个基于验证的一些不同的验证的一些参数然后notary project也支持就像我们传统的这个PKI的这个infrastructure支持也支持这个servicate的这样的一些revocation就是说一旦比如说我做签名的这些可以被被黑客攻击的compromise那么我们也可以非常方便的去进行revocation并不需要用户的去做一些这种手动的一些一些操作右边给大家也列了一些notary project notationtooling的一些经典的一些command line然后也是欢迎大家去扫码然后可以访问这个notary project这个website去了解更多的信息ok 接下来请严给大家做一个demo我们今天就会联合今天的主题就是做一个基于ourus notationharbor的去构建并且分发一个安全的artifact因为我们的题目实际上是想去基于CSD去构建这样的一个安全合规的artifact但是为了demo方便我这里就是用手动的方式模拟CSD在demo之前我首先先会准备一个基本的artifact把它铺述到harbor里面然后我们在harbor里面还是可以看到这个demo的artifact的状态是没有被赛引过的然后在harbor的2.9里面的configuration我们加了一个notation的policy这个policy的意思是说当你enable的时候没有被签名过的镜像没有被notation签名过的镜像是不可以被铺这里可以看到一个arrow message这个镜像没有被notation签名过那下一步我们就利用notation的cli去对这个demo的镜像进行签名我们会利用notation的cli去签harborharbor demo的镜像我们refresh之后是可以看到这个status会change成side有一个notation的signature关联到了demo的artifact上面于是同时我们还可以利用arrow去铺使你自己生成的类似于sbomb去保证你的artifact的安全性这里我们在线下生成了一个sbomb的列表然后会利用arrow attached的功能这里我指定了一些notation它是一个sbomb然后它的artifact type是什么并且指定了是用1.1的distribution spike模式并且把sbomb的阶层文件attached到了demo的artifact上面在attached之后我们可以refresh一下artifact这里我们可以看到多了一个sbomb的artifact关联到了demo上面这里我可以看到我定制的一些notation它的type是一个sbomb然后于是同时我们是可以利用notation去对这个sbomb进行签名的因为我可以保证我的sbomb是不可变性如果被变了之后你的签名是可以保证这件事情的所以下一步我们就利用notation的cli对刚刚上传的sbomb这里digest是一样的然后我们再refresh一下我们可以看到这里已经有三层那第三层就是这个sbomb的notation签名这是一个塑状结构的object然后下一步我们还可以对这个镜像去叠加一个cve的report如果你现在下利用任何一个scanner去扫描了一个cve那你可以把你的cve的report也可以attach到demo的artifact上面利用同样的利用auras的1.1的distribution的模式这里我已经准备好了一个cve的report在上传之后我们就可以看到这里我们就有三个artifact关联到demo上面那么这里面我可以看到的tab它是一个cve的report那同样的我也可以对我的report这个object进行签名保证它的不可变性这样我同样利用notation去对这个report的1256做一次签名在签名之后我们是可以看到这个cve的report也附属了一个notation的签名这样我们就可以看到整个demo的artifact的一个塑状结构这样最后我们会利用auras的discover命令去输出这个object的塑状结构我们可以看到它输出的塑状结构这里其实是和harbor上面的UI描述是一致的整个的三层的塑状结构第一层是基础的harbor然后它有一个notation的signature然后一个spomspom的signature然后是cve的report以及report的signature所以这里我们值得最后讲一句的是说harbor和auras之间是没有做任何customization就是我们并没有针对对方做代码的定制化我们只是双方都基于spac做代码开发所以这样的话我们实际上是可以看到双方都可以描述同一个updial其实大家看到目前在harbor里面存了这样的一个结构是吧那我作为我一个比如说我是个consumer那么我要去harbor里面去拉这个镜像那么我怎么说叫我保证了供应链安全那么我等拉这个镜像之前是吧我就可以先去看这个签名来确认这个银媒解是不是来自言sign的因为我相信言是吧然后同时我也保证它不可变是吧没有被篡改那么同时我还可以去couple根据我公司的这个策略有没有一些软件的license不符合我们公司的要求有没有一些已知的有问题的一些软件在这个融进镜像里面同时我也可以去检查这个wannability report是吧然后去看一下有没有一些漏洞比如说它已经修复了一些hide漏洞但是有一个比如说漏洞是我关注的那么这些漏洞我觉得也不能够出现那么当这些条件发生有一个不符合的话我都可以拒绝这个融进镜像被拉到我的公司内部的这个环境里那么如果再举一个例子那么如果你是在生产环境去做deployment同样你可以去检查这些策略定制一些策略那么不符合一些要求那么我就可以拒绝在我这个生产环境去进行部署好的那么接下来再给大家介绍一下做一些展望吧就是说我们刚才提到这个osas bag 1.1目前它还没有结还没有正式的一些发布目前我们所做的这个工作是基于一些这个它的一个release candidate来进行开发的那么站在integration这一块哈国这一边会更多的一些client做一些集成然后notary project tuning会更多的会更多的一些CICD进行集成那目前notation 现在一定是在这个github action已经有了第一个版本那么我们接下来也会去计划和更多的这个CICD pipeline做集成的提升用户做签名的这个体验那么我们也会考虑一些更多的和签名相关的一些一些故事吧比如说我们是不是可以考虑去签一些非OCI的这样的一些非OCI的candidate image或者是非OCI的这些制品我们是不是可以签一些比如说arbitrary的一些范儿是吧我们也会考虑是不是有一些更安全的做法因为现在主流的做法去签一个容器进行都是这个容器进行已经存在在这个RedStree上了然后我们去签那么是不是我们可以在容器进行发布到RedStree之前我们就做一个签名那么是不是能够更好地提高这个安全性同时呢也提供了一些其他可能的一些容器进行发布的一些场景比如说我的这个环境我没有办法是一个L gap的环境我没有办法和外面联通那么我可以把这个容器进行在本地生成本地签名然后通过另外一种方式在另外一个系统上把它导入导入过后我同样可以去验证这个签名那么这样其实就是不经过这个进行仓库进行发布这是一些更多的一些场景我们再考虑未来去支持那么还有一些更多的一些和这个验证相关的一些场景比如说这个open source ratify为什么提它呢因为ratify做这个webrication它用的其实是notation.go这个library前面给大家看到的也是notary project下面的一个子项目那么这个open source也是今天昨天production ready那么它能够解决一些什么问题呢我们今天演给大家demo的是我们整个在这个cssd上是吧那么其实在cogniz上我们也有一些不同的admission的controller那么其实在这个cogniz上我们也可以用基于这个oppa的这个policy来定制一些webrication相关的一些策略那么这个是在admission controller这个角度去做一些验证那我们是不是可以在content of the runtime的时候去验证一些因为去确认它的这个真实性和这个完整性呢那么这个也是我们将来会去考虑的一些功能那么最后也是欢迎大家去这个去到这个社区多来看看然后如果有机的话有机会的话也可以去做一些construction那么这边呢我也是贴了一个关于公益的安全的一个小的调查我也是希望那个参会的这些听众能够去填一下这个调查能够能够去做一些对今天的这个研访做一些反馈同时呢如果里面有一些其他的一些这样的需求的话也可以通过这个调查反馈给我们好 谢谢大家大家有什么问题吗就是我有几个问题对这个 topic 比较感兴趣然后第一个就是说咱们有这些 annotation然后有这些机制去给这个 image 做一些签名和打一些 annotation然后甚至能把这个CVE report 给attached到这个 image 上那您这边有没有什么就是说在CNCD 流程中对这个用这些附属的信息做这种供应量安全管理的一些实践呢就是说这些信息我们有了机制也有了那真正怎么用他们去做这个供应量安全管理这一块我不知道有没有什么可以分享那这个我不知道我是不是完全理解了但是我觉得可能和前面提到的这个 framework 相关的就是这个 framework就是在整个 framework我们不是分五个阶段吗那么这五个阶段其实每个阶段它都是相互关联的你从第一个阶段的输出其实你在下一个阶段其实是会去做一个验证对 但是比如说像CVE report 这些东西的话就实话实说的话就我不知道把它打到这个 image作为一个附属有什么意义因为你任何 registry 谈都会去scan 那个东西那从我一个开发者或者是CNCD 这个角度来讲的话我用这种信息去做什么或者是怎么能提升我供应链安全用这些信息好的 这个其实是个好问题其实也是因为时间原因没有给大家介绍其实CVE它应该是一个 regular就是你会定时的去扫描那么这个里面一个问题就是说比如说你在 build 阶段是吧build 阶段你会去用前一个阶段的比如说 base image那么这个 base image很可能它是经过一个CVE的扫描是吧那么扫描过后在当时那个时间点它会去attach它当时一个最新的report那么你在 build 的时候你要去用它的时候你就可以去检查这个report你可以做一个策略比如说你会发现这个report 是一周前扫描的那我可能就是可能会考虑是不是不应该用这样的一个 base image所以就是说你的公司可以制定一些finetune 的一些 policy针对这些额外的一些制品一些artifact做一些策略上的一些调整比如说比如说CVE现在就是说它还有就是说它里面有各种各样的一些级别 是吧你也可以定制一些策略就是说我是不是一定要我的内部团队修掉所有的这个CVE我才能允许它的使用那么你其实可以定一个策略那么它是不是比如说不能够有critical的但是我可以允许有少量的这个 height那么你可以制定一个SL8 这样的一个策略一个策略OK 明白就是但是这些东西本身就是说我们就算没有这些工具我们也要去做对吧然后我们现在有了这些工具比如像Habbert什么Oras 这些东西的话我更关心的是说和现有的这些已有的工具比如说现有的这些云平台的registry它有什么样的一个集成 一个整合或者就刚才讲的话那些policy的制定什么样类型的image我们是不能deploy甚至刚才我看到那个Habbert是没有签名的我们是不能download那这些policy的话有没有什么就是outbox的一些整合还是说我还是得自己去写比如说写一些controller或者是定一些CSSD level的这些逻辑我去控制它对但是我想理解一下就现在对这套流程和工具的一个业界的一个支撑那我可以简单的说一下其实policy这一块刚才提到的比如说你在Coopnet上面你可以针对在advice and controller这边做一些policy那么目前的话因为我是微软公司我们adro上面有adro policy这个也是outbox的我们有一些就是说你需要做一些配置就是说这个也是因为时间原因没有跟大家详细介绍就是说首先你得定义好你相信谁是吧那么这些有一些配置是需要用户做的配完过后那么这个policy会帮你去做比如说去wireify这个signature那么这些都是一些building的policy那么如果你站在这个open source角度刚才我举的一个ratify它是和这个oppa的getkeeper做一些急证那么这个open source产品本身它也提供了一些默认的一些policy的template那么你用户可以基于这些template去定制然后今天其实还有一个session是Civana的session那么Civana它也是一种admission controller那么它是用这个压抹文件是吧那么它也提供了多种多样的template甚至是直接可以用的这样的一些policy所以现在已经有了一些现有的一些solution那么云厂上它也有它自己的manager的这些service提供这样的一些服务谢谢请找一个问题那个关于签名和验签因为我们的key是要做rotation比方说我第一个batch我我用前面一个cf去签名了五个image然后发布到hub上去然后第二batch我用第二个cf签名了另外五个image发布到这个hub上面那hub它是要保留两个功耀证书在上面去保证对所它不会对前五个已经verified image它后面又认为它是一个unverified image这个是问针对hub的是吧因为目前现在是验签是在hub上面对不起hub本身它是不管理key的所以它没有一个key management的功能所以hub是不会去做签名的调验的其实如果是你的rotation实际上本地保证你的private key你要有一个key management service去知道你的这个key签了哪些digest然后通过你的service去拿到这个关系然后在你本地做调验就是你你铺到本地然后在本地做调验hub是不做这种调验的功能因为我并不管理你所有的public key对但是方面显示hub是签名是验证verified我们verified只是verified你是不是已经对它做了一次签名但是如果是你对哪个key对它做的签名我们并不教验因为我不管理你的key所以我没有办法做教验对就是目前我们是没有这个scope这个我可以补充一下就是说对签名这个验证其实不在这个不在这个进向仓库这一次进向仓库hub目前他做的就是说他去check你有没有对应的signature就说明你有没有做这个动作防御的第一步做这个动作其实我刚才说了就是说你做了这个动作表明你有一个这样的一个质品artifactassociate到这个容器进向上那么你在部署的那一侧你就真正的去做一些验证这个就刚才回到前面一个朋友提到的一个问题就是说你要有个policy这个policy就是说我相信谁比如说我有两个private key那么其实理论上就是说我们是有两个做签名的identity那么这两个如果我都trust了的话那么我在这个policy那边我就需要去page我trust的这两个identity然后同这两个identity是这个certificate authority他去做的签名对吧因为我们需要一个第三方来证明那么这个也是目前的这个CPAPKI infrastructure的这个机制就是说这个签名是我签我这个人签但是我需要一个第三方向你证明是我签所以说对于notary project notation这个notation来说我们白底Ford就默认我们不trust的任何人就用户需要一开始去page我相信谁那么其实回到你的问题其实就是说在哈波这一次就是说他确认你做了这个签名的动作你有一个这样的一个 artifact associated那么你在你部署那一块你其实要有一个policy真正的去验证这个签名确实是valid那么你刚才说的 rotation那么如果某一个key被rotate的那么你很可能需要做一个新的签名那么之前的那些key散出来的很可能就被就是说他就是invalid就是说对这个就是整个的savage management这个机制但这个不在哈波这一次所以说是在copeneticOPA的OPA它是设置policy真正的是有整个PKI的infotructure还包括notary projectnotation这个tool它去做真正的varivationOK谢谢不客气不好意思我最后再问一个小问题就是这个我们为什么要选用一种就是在emage之外的一个一个相当于一个附属的一些这种资源文件来去描述这个emage而不是把这些信息都打到emage里头呢就这个是基于什么考量打到emage你指的是比如说dark file里面有一些对 在dark file里头它完全可以判断一些这样的信息或者说它现在其实也可以打太了之类的东西对但是这个方式就是说它一个就是它不是非常灵活就是说你其实是打到emage里面如果你要去改变这个信息你其实是会动emageemage代介子它其实就变了那我用的时候我其实可以不考虑这些我可以单独用emage我拷贝或者或者是铺的时候我其实可以不考虑那些它的附属信息对 你这个这个可以提到就是你的policy可以是一个拒绝的policy就是我拒绝你你只要不符合要求我就拒绝你你还可以有个policy是audit我是看你有没有这些但是呢我还是允许你进我这个系统这个根据公司的不同的这个策略因为因为其实就是说在真正的生产环境和这个就是各种公司它有它的一个考量就是说不是说它就要求所有的景象一定是符合这个要求因为很有可能有一些比较critical的这个景象它不符合这个要求但是你不能够说我不让你去部署是吧 所以它是一个渐进的过程你可以一开始是一个audit的一个mod你知道有哪些有问题明白吗但这个东西它不是一个整体就比如说我铺emage的时候必然要把那个东西也要给铺下来就是可以选择不铺它 是吧okokok谢谢对 而且随着时间的推移也会发现有些更多的一些跟安全相关的一些东西你可以关联到这个这个景象上老师好就是我想问一下就咱们这个框架在落地的时候有一个技术性的问题就说因为很多的工作我看大部分在开发测去解决的去使用的那但是呢它里面有很多安全的问题包括漏洞也好然后我们的sbom里面发现的它的一些客源组件它随时可能会爆发漏洞那整个的落地的框架包括它使用具体的工具技术是应该由企业的安全部门牵头还是软件开发部门即使就能决定用哪个工具就是有没有一个现在行业里大概是什么情况的这种分析 调研这个我觉得这个问题比较有点难回答就是说我觉得还是取决于你公司的一个策略就是说在软件安全性首先公司的角度有一个关于软件security相关的还有包括privacy还有一些data相关的一些合规的一些要求那么在这个大的框架下你的比如说你的开发团队它应该符合一个它需要去符合公司的这些要求那么它可以针对这些公司比较high-level的这样的一些策略来制定我在开发这个过程中包括构建 包括部署我应该遵从什么样的一些使用什么样的方法能够符合公司的这样的一个要求所以我觉得你刚才说的其实包括很多方面比如说open source出了一些问题是吧这个里面其实就说它得具体看你具体指的是哪些问题在你落地的时候没有办法去解决就是可以理解大面上总体上是安全制定安全的规则要求然后呢那开发部门它在做整个的过程中是只要满足合规要求或者说规定就可以然后具体里面的细节其实还其实也没有一个就确定的具体如果是回到这个话就是说你其实作为一个公司你一个比如说你开发的一个owner你其实是要对安全性负责的是吧比如说你做的容器进行你发布给你的客户客户发现了有了一些在客户那边发现了一些问题是吧那么其实这个owner ship其实是在你的开发开发团队的老大这边是吧因为你要保证你的质量你的安全但是它怎么去确认这个东西协助这个框架来去保证它你买也就是在落地的过程中可能就是开发它是要要去组织去承担起这个落地的最终的这个质量的对 这也是我觉得也是就是说通常意义说也是对客户一个负责嘛就是说你的容器进行向你在发布出去然后deploy的时候你其实要确保它其实是有一些安全隐患的是吧你其实也是希望能够客户那边能够确认它拿到这个软件确实是我们发布给他们的而不是说在网上被篡改了以另外一种方式发布给客户的导致使用那些问题因为这是最终损害的是公司的这个名誉reputation是吧是吧明白然后第2个问题就是刚才看这个demo的时候就是我们先是手工模拟的CRCD�的调用然后呢也就说我如果想在我的工具链当中去调用这个工具我就自己去直接调就可以了嗯好这个里面我可以再补充一下就是说站在这个工具的角度你如果有自己的比如说脚本自己的这个Pipeline里面有些脚本那么你可以直接调用这些工具刚才分享的Nautary Project Notation这个都是一些binary你可以直接调那么我们现在也正在做一些和不同CRCD主流CRCD的一些集成比如说github action上我们就已经写好了一个用notation做签名和wirefile的这样的一个flow你直接把这个flowtemplate的拷过来然后你也做一些简单的一些配置那么你就可以用了那么还有一些其他的一些CRCD我们也正在做这些工作那么这些工作其实目标就是说能够尽量的提供一些auto box的一些开箱机用的这样体验那么用户只需要填一些参数就相当于在这些工具平台上有一个连接器一样然后把它填一些配置然后就连接上这个工具去用了对对对明白 好 谢谢我想请教一个可能跟这个话题没有太多关系的就是sbongsbong我们是用synchrone DX去生成这个格式的我想请教一下页内大概会就是它的它的depth到第几层你指的这个depth指的是就是它的依赖的依赖到第几层这个我可能还没有办法我没有办法回答你对 工具让我去选让我去选比方说java 或者 Node.js它可以到456789都有可能对 就是用一些生成的sbong我们是用这个依赖扫描去生成的它可以让你去体验一个参数对对对所以这个还是说是您自己来决定这件事情页内不知道对 因为实际上我们现在在跟吹尾团队在合作然后就是他们也在做sbong的一些生成然后其实我们也在跟他讨论说你sbong这个业绩到底有没有一个标准每个工具都有自己的实现然后每个工具都有自己的见解然后他们说他们也在想推动这件事情就是sbong这个层面有一些标准大家不同的厂商遵守同一套规则这样的话我们做集成也方便对 但目前我确实没有办法回答您这问题每个公司有一些不同的一些考量但没有一个统一的一个谢谢大家