自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Cloud Custodian實(shí)現(xiàn)云治理即代碼

譯文
云計算
用戶采用Cloud Custodian能夠編寫簡單的YAML策略,以創(chuàng)建管理良好的云計算基礎(chǔ)設(shè)施。

【51CTO.com快譯】用戶采用Cloud Custodian能夠編寫簡單的YAML策略,以創(chuàng)建管理良好的云計算基礎(chǔ)設(shè)施。

在當(dāng)今不斷擴(kuò)展的云計算基礎(chǔ)設(shè)施中,很難管理所有資源都合規(guī)。而企業(yè)都有一組需要遵循的策略,用于檢測違規(guī)行為并對其云計算資源使用采取補(bǔ)救措施。這通常是通過編寫多個自定義腳本并使用一些第三方工具和集成來完成的。許多開發(fā)團(tuán)隊都知道管理和編寫自定義腳本并跟蹤這些腳本有多么困難。但他們可以利用Cloud Custodian DSL策略輕松管理云計算資源。

什么是云治理?

云治理是一個框架,它定義了開發(fā)人員如何創(chuàng)建策略來控制成本、最小化安全風(fēng)險、提高效率以及加速部署。

提供治理即代碼的工具有哪些?

(1)AWS Config

AWS Config主要記錄和監(jiān)控AWS資源的所有配置數(shù)據(jù),可以構(gòu)建規(guī)則來幫助強(qiáng)制執(zhí)行使用的合規(guī)性。比如設(shè)置多賬戶和多區(qū)域選項。它還提供了一些可以使用的預(yù)定義AWS托管規(guī)則,或者用戶可以自己編寫自定義規(guī)則。還可以根據(jù)匹配情況采取補(bǔ)救措施。對于自定義策略,需要編寫自己的lambda函數(shù)來執(zhí)行操作。

但是,用戶可以使用Cloud Custodian設(shè)置AWS Config規(guī)則和使用c7n-org支持多賬戶和多區(qū)域的自定義規(guī)則。此外,它還可以自動配置AWS lambda函數(shù)。

(2)Azure政策

Azure政策跨Azure資源實(shí)施組織標(biāo)準(zhǔn)。它提供了一個聚合視圖來評估環(huán)境的整體狀態(tài),并且能夠深入到每個資源、每個策略的粒度(例如,用戶只能創(chuàng)建A和B系列虛擬機(jī))。用戶可以打開內(nèi)置策略或為所有資源創(chuàng)建自定義策略。它還可以對不合規(guī)的資源采取自動修復(fù)措施。

Azure政策在部署上構(gòu)建自定義驗證層以防止偏離客戶定義的規(guī)則時可靠且高效。Cloud Custodian和Azure政策在合規(guī)性實(shí)施方面可以完成的場景有很大的重疊。在查看用戶的要求時,建議首先確定可以通過Azure政策實(shí)施的要求。然后可以使用Custodian來實(shí)現(xiàn)其余的要求。Custodian還經(jīng)常用于向Azure政策涵蓋的要求添加第二層保護(hù)或緩解措施。這樣就可以確保正確配置策略。

到目前為止,已經(jīng)看到了什么是云治理以及市場上可用的工具是什么。以下了解一下Cloud Custodian可以在云治理方面提供什么。

什么是Cloud Custodian?

Cloud Custodian是一個CNCF沙盒項目,用于實(shí)時管理公共云資源。它幫助用戶以代碼的形式編寫治理,就像以代碼的形式編寫基礎(chǔ)設(shè)施一樣。它檢測非投訴資源并采取措施對其進(jìn)行補(bǔ)救。Cloud Custodian也是一個云原生工具。它可以與多個云計算提供商(AWS、Azure、GCP等)一起使用。

用戶可以使用Cloud Custodian,如下所示:

  • 合規(guī)性和安全性即代碼:可以將簡單的YAML DSL策略編寫作為代碼。
  • 節(jié)約成本:刪除不需要的資源,并實(shí)施開/關(guān)時間政策可以節(jié)約成本。
  • 運(yùn)營效率:通過添加治理即代碼,它減少了在云中安全創(chuàng)新的摩擦,并提高了開發(fā)人員的效率。

它是如何工作的?

當(dāng)運(yùn)行Cloud Custodian命令時,根據(jù)云計算提供商的不同情況,將資源、過濾器、操作作為輸入,并轉(zhuǎn)換為云計算提供商API調(diào)用(例如AWS Boto3 API)。無需擔(dān)心自定義腳本或AWS CLI命令。用戶可以獲得清晰易讀的策略以及Cloud Custodian中內(nèi)置的許多常見過濾器和操作。如果需要自定義過濾器,總是可以使用JMESPath來編寫過濾器。

在某些情況下,可能需要定期或根據(jù)某些事件運(yùn)行政策。為此Cloud Custodian自動預(yù)配lambda函數(shù)和CloudWatch事件規(guī)則。CloudWatch事件規(guī)則可以安排(每10分鐘)或觸發(fā)以響應(yīng)CloudTrail、EC2實(shí)例狀態(tài)事件等的API調(diào)用。

如何安裝和設(shè)置Cloud Custodian?

可以簡單地使用Python的pip命令安裝Cloud Custodian:

  1. python3 -m venv custodian 
  2. source custodian/bin/activate 
  3. pip install c7n       # This includes AWS support 
  4. pip install c7n_azure # Install Azure package 
  5. pip install c7n_gcp   # Install GCP Package 

使用 Cloud Custodian Docker 映像

  1. docker run  -it \ 
  2.   -v $(pwd)/output:/opt/custodian/output \ 
  3.   -v $(pwd)/policy.yml:/opt/custodian/policy.yml \ 
  4.   --env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE|^KUBECONFIG") \ 
  5.      cloudcustodian/c7n run -v --cache-period 0 -s /opt/custodian/output /opt/custodian/policy.yml 

注:ACCESS和SECRET KEY、DEFAULT_REGION和KUBECONFIG是從ENV變量中獲取的,用戶應(yīng)該有權(quán)訪問在策略YAML文件中定義的所需IAM角色和策略。另一種選擇是在容器內(nèi)掛載文件/目錄。

Cloud Custodian policy.yaml解釋

Cloud Custodian有一個簡單的YAML文件,其中包括資源、過濾器和操作:

  • 資源:Custodian能夠針對多個云計算提供商(AWS、GCP、Azure),每個提供商都有自己的資源類型(例如ec2、s3存儲桶)。
  • 過濾器:過濾器是Custodian中針對特定資源子集的方式。它可以基于某些日期、標(biāo)簽等,可以使用JMESPath表達(dá)式編寫自定義過濾器。
  • 操作:操作是對與過濾器匹配的資源做出的實(shí)際決定。這一操作可以很簡單,例如向所有者發(fā)送報告,說明資源與云治理規(guī)則不匹配或刪除資源。

操作和過濾器都可以結(jié)合任意多的規(guī)則來很好地表達(dá)需求。

  1. namefirst-policy 
  2.   resource: name-of-cloud-resource 
  3.   description: Description of policy 
  4.     filters: 
  5.       - (some filter that will select a subset of resource) 
  6.       - (more filters) 
  7.     actions: 
  8.       - (an action to trigger on filtered resource) 
  9.       - (more actions) 

Cloud Custodian的示例策略

盡管官方文檔涵蓋了大部分AWS策略示例,但還是挑選了一些策略,用戶可以使用這些策略來節(jié)省成本和合規(guī)。

(1)ebs-snapshots-month-old.yml

組織面臨的最常見問題之一是刪除舊的AMI、快照和卷的復(fù)雜性,這些舊的AMI、快照和卷在環(huán)境中存在1年多并且增加了更多的費(fèi)用。最終,必須編寫多個自定義腳本來處理這種情況。

以下是刪除超過30天的快照的簡單策略:

  1. policies: 
  2.   - name: ebs-snapshots-month-old 
  3.     resource: ebs-snapshot 
  4.     filters: 
  5.       - type: age 
  6.         days: 30 
  7.         op: ge 
  8.     actions: 
  9.       - delete 

以下是如何運(yùn)行Cloud Custodian策略的示例。

  1. custodian run -v -s /tmp/output /tmp/ebs-snapshots-month-old.yml 

每次運(yùn)行Custodian命令時,它都會在通過-s選項(例如,

/tmp/output/ebs-snapshot-month-old/custodian-run.log)傳遞的policies.name輸出目錄中創(chuàng)建/附加文件)

  • custodian-run.log:所有控制臺日志都存儲在這里。
  • resources.json:過濾的資源列表。
  • metadata.json:關(guān)于過濾資源的元數(shù)據(jù)。
  • action-*:已采取行動的資源列表。
  • $HOME/.cache/cloud-custodian.cache:所有云API調(diào)用結(jié)果都緩存在這里。默認(rèn)值為15分鐘。

要獲得過濾的資源報告,可以運(yùn)行以下命令。在默認(rèn)情況下,它提供CSV格式的報告,但可以通過傳遞–format json來更改它。

  1. custodian report -s /tmp/output--format csv ebs-snapshots-month-old.yml 

(2)only-approved-ami.yml

停止運(yùn)行與可信AMI列表不匹配的EC2。

  1. policies: 
  2. nameonly-approved-ami 
  3.   resource: ec2 
  4.   comment: | 
  5.     Stop running EC2 instances that are using invalid AMIs 
  6.   filters: 
  7.     - "State.Name": running 
  8.     - type: value 
  9.       key: ImageId 
  10.       op: not-in 
  11.       value: 
  12.           - ami-04db49c0fb2215364   # Amazon Linux 2 AMI (HVM) 
  13.           - ami-06a0b4e3b7eb7a300  # Red Hat Enterprise Linux 8 (HVM) 
  14.           - ami-0b3acf3edf2397475    # SUSE Linux Enterprise Server 15 SP2 (HVM) 
  15.           - ami-0c1a7f89451184c8b   # Ubuntu Server 20.04 LTS (HVM) 
  16.   actions: 
  17.     - stop 

(3)Security-group-check.yml

當(dāng)開發(fā)人員在創(chuàng)建POC虛擬機(jī)時傾向于允許SSH上的所有流量,或者在測試期間,有時允許端口22訪問所有端口,但忘記刪除該規(guī)則時,將會看到一個更常見的問題。以下的策略可以通過自動從所有組中刪除SSH訪問,并僅向安全組添加網(wǎng)絡(luò)IP來解決這些問題。

  1. policies: 
  2.   - name: sg-remove-permission 
  3.     resource: security-group 
  4.     filters: 
  5.        - or
  6.              - type: ingress 
  7.                IpProtocol: "-1" 
  8.                Ports: [22] 
  9.                Cidr: "0.0.0.0/0" 
  10.              - type: ingress 
  11.                IpProtocol: "-1" 
  12.                Ports: [22] 
  13.                CidrV6: "::/0" 
  14.     actions: 
  15.       - type: set-permissions 
  16.         remove-ingress: matched 
  17.         add-ingress: 
  18.           - IpPermissions: 
  19.             - IpProtocol: TCP 
  20.               FromPort: 22 
  21.               ToPort: 22 
  22.               IpRanges: 
  23.                 - Description: VPN1 Access 
  24.                   CidrIp: "10.10.0.0/16" 

支持Kubernetes資源

現(xiàn)在可以管理Kubernetes資源,如部署、pod、DaemonSet和卷。以下是可以使用Cloud Custodian編寫的一些示例策略。

  • 刪除POC和未標(biāo)記的資源。
  • 更新k8資源的標(biāo)簽和補(bǔ)丁。
  • 根據(jù)調(diào)查結(jié)果調(diào)用Webhook。
  1. kubernetes-delete-poc-resource.yml   
  2. policies: 
  3.   - namedelete-poc-namespace 
  4.     resource: k8s.namespace 
  5.     filters: 
  6.     - type: value 
  7.       key'metadata.name' 
  8.       op: regex 
  9.       value: '^.*poc.*$' 
  10.     actions: 
  11.       - delete 
  12.  
  13.   - namedelete-poc-deployments 
  14.     resource: k8s.deployment 
  15.     filters: 
  16.     - type: value 
  17.       key'metadata.name' 
  18.       op: regex 
  19.       value: '^.*poc.*$' 
  20.     actions: 
  21.       - delete 

注意:Cloud Custodian Kubernetes資源仍在開發(fā)中。

可以稱為Cloud Custodian的模式類型有哪些?

  • pull:默認(rèn)方法可以人工運(yùn)行。首選在CI/CD工具cron中添加它。
  • 定期:根據(jù)策略配置云計算資源(例如,帶有CloudWatch cron的AWS Lambda)并按計劃執(zhí)行。
  • 根據(jù)云計算提供商的自定義模式:在事件匹配時執(zhí)行。

將Cloud Custodian與Jenkins CI集成

為簡單起見,使用Cloud Custodian docker映像并將憑據(jù)作為環(huán)境變量注入。

注:機(jī)密文件應(yīng)該有大寫和默認(rèn)區(qū)域的密鑰。對于Kubernetes,應(yīng)該將KUBE CONFIG文件裝入容器中。

  1. export AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY> 
  2. export AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY> 
  3. export AWS_DEFAULT_REGION=<YOUR_DEFAULT_REGION> 
  4.  
  5. pipeline{ 
  6.     agent{ label 'worker1'
  7.     stages{ 
  8.         stage('cloudcustodian-non-prod'){ 
  9.             steps{ 
  10.                 dir("non-prod"){ 
  11.                     withCredentials([file(credentialsId: 'secretfile', variable: 'var_secretfile')]) 
  12.                     { 
  13.                     sh ''
  14.                     source $var_secretfile  > /dev/null 2>&1 
  15.                     env | grep "^AWS\\|^AZURE\\|^GOOGLE\\|^KUBECONFIG" > envfile 
  16.  
  17.                     for files in $(ls | egrep '.yml|.yaml'
  18.                     do 
  19.                         docker run --rm -t \ 
  20.                         -v $(pwd)/output:/opt/custodian/output \ 
  21.                         -v $(pwd):/opt/custodian/ \ 
  22.                         --env-file envfile \ 
  23.                         cloudcustodian/c7n run -v  -s /opt/custodian/output /opt/custodian/$files 
  24.                     done 
  25.                     ''
  26.                     } 
  27.                 } 
  28.             } 
  29.         } 
  30.         stage("cloudcustodian-prod"){ 
  31.             steps{ 
  32.                 dir("prod"){ 
  33.                     withCredentials([file(credentialsId: 'secretfile', variable: 'var_secretfile')]) 
  34.                     { 
  35.                     sh ''
  36.                     source $var_secretfile  > /dev/null 2>&1 
  37.                     env | grep "^AWS\\|^AZURE\\|^GOOGLE\\|^KUBECONFIG" > envfile 
  38.  
  39.                     for files in $(ls | egrep '.yml|.yaml'
  40.                     do 
  41.                         docker run --rm -t \ 
  42.                         -v $(pwd)/output:/opt/custodian/output \ 
  43.                         -v $(pwd):/opt/custodian/ \ 
  44.                         --env-file envfile \ 
  45.                         cloudcustodian/c7n run -v -s /opt/custodian/output /opt/custodian/$files 
  46.                     done 
  47.                     ''
  48.                     } 
  49.                 } 
  50.             } 
  51.         } 
  52.     } 

Jenkins控制臺輸出:

工具和功能

Cloud Custodian擁有許多由社區(qū)開發(fā)的附加工具。

(1)多區(qū)域和多賬戶支持

可以使用c7n-org插件來配置多個AWS、AZURE、GCP帳戶并并行運(yùn)行它們。Flag–regionall可用于跨所有區(qū)域運(yùn)行相同的策略。

(2)通知

c7n-mailer插件為警報通知提供了很大的靈活性,可以使用Webhook、電子郵件、隊列服務(wù)、Datadog、Slack和Splunk來發(fā)出警報。

(3)自動資源標(biāo)記

c7n_trailcreator腳本將處理CloudTrail記錄以創(chuàng)建資源及其創(chuàng)建者的SQLite DB,然后使用該SQLite DB用其創(chuàng)建者的姓名標(biāo)記資源。

(4)記錄和報告

它提供JSON和CSV格式的報告。還可以在云原生日志記錄中收集這些指標(biāo),并生成漂亮的儀表板。將日志存儲在本地、S3或Cloudwatch上。一致的日志記錄格式可以輕松地對策略進(jìn)行故障排除。

(5)Custodian試運(yùn)行

在試運(yùn)行中,策略的操作部分被忽略。它顯示了哪些資源將受到政策的影響。在運(yùn)行實(shí)際代碼之前先進(jìn)行試運(yùn)行始終是最佳實(shí)踐。

(6)Custodian緩存

當(dāng)執(zhí)行任何策略時,它會從云中獲取數(shù)據(jù)并將其存儲在本地15分鐘。緩存用于最小化API調(diào)用,可以使用–cache-period0選項設(shè)置緩存。

(7)編輯器集成

它可以與Visual Studio Code集成以進(jìn)行自動編譯和建議。

(8)Custodian模式

可以使用custodian schema命令來找出Cloud Custodian中可用的資源、操作和過濾器的類型。

  1. custodian schema    #Shows all resource available in custodian 
  2. custodian schema aws    #Shows aws resource available in custodian 
  3. custodian schema aws.ec2     #Shows aws ec2 action and filters 
  4. custodian schema aws.ec2.actions     #Shows aws ec2 actions only 
  5. custodian schema aws.ec2.actions.stop    #Shows ec2 stop sample policy and schema 

Cloud Custodian如何優(yōu)于其他工具?

  • 跨多個云平臺和Kubernetes編寫策略的簡單性和一致性。
  • 使用c7n-org的多賬戶和多區(qū)域支持。
  • 使用c7n-mailer支持廣泛的通知渠道。
  • Custodian的Terraform提供程序支持針對Terraform IaaC模塊編寫和評估Custodian策略。
  • Custodian與AWS配置深度集成。它可以部署config支持的任何配置規(guī)則。此外,它還可以為AWS自定義配置策略自動配置AWS Lambda。
  • 如果需要,可以在Python中實(shí)施自定義策略,因為它支持根據(jù)云計算提供商SDK的所有規(guī)則。
  • Cloud Custodian是一個開源的CNCF沙盒項目。

Cloud Custodian限制

  • 無默認(rèn)儀表板(支持AWS原生儀表板,但也可以將指標(biāo)輸出發(fā)送到Elasticsearch/Grafana等,并創(chuàng)建儀表板)。
  • Cloud Custodian無法阻止自定義層驗證預(yù)部署。它只能定期運(yùn)行或基于某些事件運(yùn)行。
  • Cloud Custodian沒有任何內(nèi)置策略。用戶需要自己編寫所有策略。但是,它有很多很好的示例策略(AWS、Azure、GCP),可以用作參考。

結(jié)論

Cloud Custodian能夠?qū)⒁?guī)則和補(bǔ)救措施定義為一項策略,以促進(jìn)管理良好的云計算基礎(chǔ)設(shè)施,還可以使用它來編寫管理Kubernetes資源(如部署、pod等)的策略。與其他基于云的治理工具相比,它提供了一個非常簡單的DSL來編寫策略及其跨云平臺的一致性。這樣Custodian就減少了在云中安全創(chuàng)新的摩擦,并提高了效率。

用戶可以使用Cloud Custodian通過實(shí)施非工作時間和清理策略來優(yōu)化云成本。它還包括許多插件,如多賬戶/區(qū)域支持、廣泛的通知工具(Slack、SMTP、SQS、Datadog、Webhooks)等。

原文標(biāo)題:Implementing Cloud Governance as a Code Using Cloud Custodian,作者:Alok Maurya

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2022-09-30 00:00:00

云計算自動化IT

2022-09-19 07:03:47

IaCTerratest測試

2023-03-27 10:00:15

2022-01-10 08:00:00

云原生云計算技術(shù)

2012-03-21 09:36:48

私有云IT即服務(wù)ITaaS

2021-11-24 22:52:09

數(shù)據(jù)治理企業(yè)IT

2017-07-03 11:06:03

混合云平臺存儲

2023-10-25 16:31:50

云原生數(shù)據(jù)治理

2015-08-26 10:57:01

數(shù)據(jù)安全備份即服務(wù)云服務(wù)

2009-03-12 13:49:30

DataTemplatWPFC#

2014-12-09 14:10:46

甲骨文Oracle數(shù)據(jù)庫

2023-03-20 08:00:00

公共云開發(fā)Spring Clo

2021-07-27 06:51:53

Istio 微服務(wù)Service Mes

2021-07-26 09:53:58

IaC基礎(chǔ)設(shè)施即代碼云數(shù)據(jù)中心

2024-02-04 09:13:24

基礎(chǔ)設(shè)施代碼DevOps

2017-03-02 14:12:13

流水線代碼Clojure

2012-08-14 13:24:27

Informatica云計算

2017-04-12 20:25:03

貴州政務(wù)云

2015-06-11 13:05:05

戴爾Any Cloud云轉(zhuǎn)型

2020-04-17 19:41:57

基礎(chǔ)架構(gòu)即代碼平臺即代碼云計算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號