日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
如何使用CloudCustodian實現(xiàn)云治理即代碼

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

譯文
作者:李睿 2022-01-14 08:00:00

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

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

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

什么是云治理?

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

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

(1)AWS Config

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

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

(2)Azure政策

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

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

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

什么是Cloud Custodian?

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

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

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

它是如何工作的?

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

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

如何安裝和設置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變量中獲取的,用戶應該有權訪問在策略YAML文件中定義的所需IAM角色和策略。另一種選擇是在容器內掛載文件/目錄。

Cloud Custodian policy.yaml解釋

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

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

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

  
 
 
 
  1. - name: first-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、快照和卷的復雜性,這些舊的AMI、快照和卷在環(huán)境中存在1年多并且增加了更多的費用。最終,必須編寫多個自定義腳本來處理這種情況。

以下是刪除超過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

以下是如何運行Cloud Custodian策略的示例。

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

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

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

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

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

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

(2)only-approved-ami.yml

停止運行與可信AMI列表不匹配的EC2。

  
 
 
 
  1. policies:
  2. - name: only-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

當開發(fā)人員在創(chuàng)建POC虛擬機時傾向于允許SSH上的所有流量,或者在測試期間,有時允許端口22訪問所有端口,但忘記刪除該規(guī)則時,將會看到一個更常見的問題。以下的策略可以通過自動從所有組中刪除SSH訪問,并僅向安全組添加網絡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和未標記的資源。
  • 更新k8資源的標簽和補丁。
  • 根據調查結果調用Webhook。
  
 
 
 
  1. kubernetes-delete-poc-resource.yml  
  2. policies:
  3.   - name: delete-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.   - name: delete-poc-deployments
  13.     resource: k8s.deployment
  14.     filters:
  15.     - type: value
  16.       key: 'metadata.name'
  17.       op: regex
  18.       value: '^.*poc.*$'
  19.     actions:
  20.       - delete

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

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

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

將Cloud Custodian與Jenkins CI集成

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

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

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

Jenkins控制臺輸出:

工具和功能

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

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

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

(2)通知

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

(3)自動資源標記

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

(4)記錄和報告

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

(5)Custodian試運行

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

(6)Custodian緩存

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

(7)編輯器集成

它可以與Visual Studio Code集成以進行自動編譯和建議。

(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中實施自定義策略,因為它支持根據云計算提供商SDK的所有規(guī)則。
  • Cloud Custodian是一個開源的CNCF沙盒項目。

Cloud Custodian限制

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

結論

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

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

原文標題:Implementing Cloud Governance as a Code Using Cloud Custodian,作者:Alok Maurya

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


文章名稱:如何使用CloudCustodian實現(xiàn)云治理即代碼
路徑分享:http://www.dlmjj.cn/article/dpjssij.html