
cloud-custodian v0.9.52.0
محرك قواعد لأمن السحابة وتحسين التكاليف والحوكمة، DSL في yaml للسياسات للاستعلام والتصفية واتخاذ الإجراءات على الموارد
Cloud Custodian (c7n)
Cloud Custodian، المعروف أيضًا باسم c7n، هو محرك قواعد لإدارة حسابات وموارد السحابة العامة. يتيح للمستخدمين تعريف سياسات لتمكين بنية تحتية سحابية مُدارة جيدًا، تكون آمنة ومُحسّنة من حيث التكلفة. وهو يوحّد العديد من السكربتات المخصصة التي تمتلكها المؤسسات في أداة خفيفة ومرنة، مع مقاييس وتقارير موحّدة.
يمكن استخدام Custodian لإدارة بيئات AWS وAzure وGCP من خلال ضمان الامتثال في الوقت الفعلي لسياسات الأمان (مثل متطلبات التشفير والوصول)، وسياسات الوسوم (tags)، وإدارة التكاليف عبر جمع الموارد غير المستخدمة والتخلص منها وإدارة الموارد خارج ساعات العمل.
يدعم Custodian أيضًا تشغيل السياسات على أصول البنية التحتية ككود (infrastructure as code) لتقديم ملاحظات مباشرة على محطات عمل المطورين أو داخل خطوط أنابيب CI.
تُكتب سياسات Custodian في ملفات تهيئة YAML بسيطة تتيح للمستخدمين تحديد سياسات على نوع مورد (EC2، ASG، Redshift، CosmosDB، PubSub Topic) وتُبنى من مفردات من المرشحات (filters) والإجراءات (actions).
وهو يتكامل مع القدرات السحابية الأصلية عديمة الخوادم (serverless) لكل مزوّد لتوفير فرض السياسات في الوقت الفعلي مع تزويد مدمج. أو يمكن تشغيله كمهمة cron بسيطة على خادم للتنفيذ على أساطيل كبيرة قائمة.
Cloud Custodian هو مشروع CNCF Incubating، تقوده مجتمع من مئات المساهمين.
الميزات
- دعم شامل لخدمات وموارد السحابة العامة مع مكتبة غنية من الإجراءات والمرشحات لبناء السياسات بها.
- تشغيل السياسات على أصول البنية التحتية ككود (terraform، إلخ).
- يدعم التصفية التعسفية على الموارد بشروط منطقية متداخلة.
- تشغيل تجريبي (Dry run) لأي سياسة لمعرفة ما ستفعله.
- يزوّد تلقائيًا الدوال عديمة الخوادم ومصادر الأحداث (AWS CloudWatchEvents، AWS Config Rules، Azure EventGrid، GCP AuditLog & Pub/Sub، إلخ)
- مخرجات مقاييس أصلية لمزوّد السحابة على الموارد التي طابقت سياسة
- مخرجات منظّمة إلى تخزين كائنات سحابي أصلي للموارد التي طابقت سياسة.
- استخدام ذكي للتخزين المؤقت لتقليل استدعاءات API.
- يدعم الاستخدام متعدد الحسابات/الاشتراكات/المشاريع.
- مُختبَر ميدانيًا - قيد التشغيل الفعلي على بعض بيئات السحابة الكبيرة جدًا.
الروابط
التثبيت السريع
يُنشر Custodian على pypi كسلسلة من الحزم ذات البادئة c7n، وهو متاح أيضًا كصورة docker.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
الاستخدام
الخطوة الأولى لاستخدام Cloud Custodian (c7n) هي كتابة ملف YAML يحتوي على السياسات التي تريد تشغيلها. تحدد كل سياسة نوع المورد الذي ستعمل عليه السياسة، ومجموعة من المرشحات التي تتحكم في الموارد التي ستتأثر بهذه السياسة، والإجراءات التي ستتخذها السياسة على الموارد المطابقة، ووضعًا يتحكم في كيفية تنفيذ السياسة.
أفضل أدلة البدء هي الدروس التعليمية الخاصة بكل مزود سحابي.
كتقديم سريع، فيما يلي بعض السياسات النموذجية لموارد AWS.
- ستفرض عدم تفعيل أي حاويات S3 للوصول عبر الحسابات.
- ستنهي أي نسخة EC2 تم إطلاقها حديثًا ولا تحتوي على وحدة تخزين EBS مشفرة.
- ستضع علامات على أي نسخة EC2 لا تحتوي على العلامات التالية "Environment" و"AppId" وإما "OwnerContact" أو "DeptID" لتكون متوقفة خلال أربعة أيام.
policies:
- name: s3-cross-account
description: |
Checks S3 for buckets with cross-account access and
removes the cross-account access.
resource: aws.s3
region: us-east-1
filters:
- type: cross-account
actions:
- type: remove-statements
statement_ids: matched
- name: ec2-require-non-public-and-encrypted-volumes
resource: aws.ec2
description: |
Provision a lambda and cloud watch event target
that looks at all new instances and terminates those with
unencrypted volumes.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.
filters:
- State.Name: running
- "tag:Environment": absent
- "tag:AppId": absent
- or:
- "tag:OwnerContact": absent
- "tag:DeptID": absent
actions:
- type: mark-for-op
op: stop
days: 4
يمكنك التحقق من Cloud Custodian واختباره وتشغيله باستخدام السياسة النموذجية عبر هذه الأوامر:
# Validate the configuration (note this happens by default on run)
$ custodian validate policy.yml
# Dryrun on the policies (no actions executed) to see what resources
# match each policy.
$ custodian run --dryrun -s out policy.yml
# Run the policy
$ custodian run -s out policy.yml
يمكنك تشغيل Cloud Custodian عبر Docker أيضًا:
# Download the image
$ docker pull cloudcustodian/c7n
$ mkdir output
# Run the policy
#
# This will run the policy using only the environment variables for authentication
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
--env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
# Run the policy (using AWS's generated credentials from STS)
#
# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to
# the docker container to support authentication to AWS using the same credentials
# credentials that are available to the local user if authenticating with STS.
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
-v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \
-v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \
--env-file <(env | grep "^AWS") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
أداة custodian cask هي ملف ثنائي go يوفر واجهة أمامية شفافة لـ docker تحاكي واجهة custodian cli العادية، لكنها تتولى تلقائيًا إدارة تركيب وحدات التخزين (mounting volumes).
راجع الوثائق للحصول على معلومات إضافية، أو تواصل معنا عبر gitter.
مساعدة خاصة بمزودي الخدمات السحابية
للحصول على تعليمات محددة بشأن AWS وAzure وGCP، تفضل بزيارة صفحة البدء ذات الصلة.