علامات توزيع التكاليف في AWS 2026: دليل شامل لتوزيع التكاليف عبر الحسابات المتعددة

دليل عملي لتصميم برنامج توزيع تكاليف AWS في البيئات متعددة الحسابات: من Tag Policies و SCPs إلى Cost Categories وعلامات الحساب الجديدة، مع أمثلة CLI و CUR و Athena جاهزة للتطبيق.

آخر تحديث: 16 أغسطس 2026

علامات توزيع التكاليف (Cost Allocation Tags) في AWS هي أزواج مفتاح/قيمة تُفعَّل في وحدة الفوترة لتظهر كأبعاد قابلة للتصفية في Cost Explorer وتقارير CUR، فتُحوِّل فاتورة AWS من رقم إجمالي واحد إلى تحليل قابل للنسب لكل فريق ومنتج وبيئة. في البيئات متعددة الحسابات، لا تكفي العلامات وحدها. تحتاج إلى طبقة حوكمة كاملة تجمع Tag Policies و SCPs و Cost Categories، وميزة العلامات على مستوى الحساب التي أطلقتها AWS في ديسمبر 2025. هذا الدليل يعرض المنظومة كما أُطبِّقها فعلياً في مؤسسات تدير عشرات الحسابات وملايين الدولارات من الإنفاق السحابي.

  • ابدأ بـ 5-7 علامات إلزامية فقط (مثل cost_center, application, environment, owner_email) وافرضها قبل التوفير، لا بعده.
  • تفعيل العلامة في وحدة الفوترة إلزامي؛ إنشاء العلامة على المورد لا يكفي لظهورها في التقارير.
  • استخدم Tag Policies للتقييس، و SCPs لمنع إنشاء الموارد بدون علامات، و AWS Config للتدقيق.
  • ميزة ديسمبر 2025 تسمح بتوسيم الحسابات نفسها لتنسب حتى الرسوم غير القابلة للتوسيم (Support, Marketplace, refunds).
  • Cost Categories تبني الطبقة الأعمالية فوق العلامات؛ فرِّق بين طبقة البيانات (Tags) وطبقة المنطق (Cost Categories).
  • ابدأ بـ Showback، ثم انتقل إلى Chargeback عندما تصل تغطية العلامات إلى 90%+ من الإنفاق.

ما هي علامات توزيع التكاليف في AWS؟

علامة توزيع التكاليف هي وسم عادي (Resource Tag) تم تفعيله صراحةً في وحدة Billing & Cost Management ليصبح بُعداً قابلاً للتقرير في Cost Explorer و AWS Budgets و Cost and Usage Report. إذا لم تفعّل العلامة، فهي مجرد بيانات وصفية تظهر في وحدة تحكم EC2 أو RDS لكنها لا تنعكس على تقارير الفوترة إطلاقاً. صراحةً، هذه النقطة وحدها هي سبب فشل نصف المشاريع التي شاهدتها: الفريق يوسم الموارد بحماس، ثم يتفاجأ بأن Cost Explorer لا يعرف شيئاً عنها.

تقسم AWS العلامات إلى عائلتين: علامات ينشئها AWS تلقائياً (مثل aws:createdBy) تظهر في التقارير بمجرد التفعيل وتساعد في تتبع من أنشأ المورد، وعلامات يعرّفها المستخدم وهي الأداة الرئيسية للحوكمة المالية. في تجربتي مع بيئات متعددة الحسابات، لا فائدة كبيرة من علامات AWS التلقائية دون علامات المستخدم، لأن السؤال الحقيقي ليس "من أنشأ المورد" بل "أي مركز تكلفة يدفع ثمنه". تسمح AWS بـ 50 علامة كحد أقصى لكل مورد، ومفاتيح العلامات حساسة لحالة الأحرف، وهذا فخّ سنعالجه بعد قليل.

لماذا يفشل التوسيم في البيئات متعددة الحسابات؟

عندما أُستدعى لمراجعة برنامج FinOps متعثر، ثلاثة أنماط تتكرر باستمرار. الأول: تناقض الحالة والصياغة. فريق يستخدم prod، وآخر Production، وثالث PROD. النتيجة أربعة أقسام مختلفة في تقرير التكلفة الواحد. المفاتيح والقيم في AWS حساسة لحالة الأحرف، فالحل يجب أن يكون على مستوى المنظمة وليس على مستوى الفريق.

النمط الثاني: التوسيم بعد الإنشاء. الفرق تتفق على معايير رائعة على الورق، ثم يتم توسيم الموارد "لاحقاً"، واللاحق لا يأتي أبداً. الموارد قصيرة العمر (Spot instances, Lambda, Fargate tasks) تختفي قبل أن يوسمها أحد، وتذهب تكلفتها إلى دلو "غير مصنّف". النمط الثالث: غياب البنود غير القابلة للتوسيم: رسوم الدعم، نقل البيانات بين المناطق، بعض عناصر Marketplace، والاسترداد. تظهر هذه في التقارير كخانات فارغة، وتاريخياً كانت تُحسب "شركة" مشتركة لا يملكها أحد. حسب ورقة AWS البيضاء حول أفضل ممارسات التوسيم، أي برنامج توزيع تكاليف جاد يجب أن يعالج البنود غير القابلة للتوسيم صراحةً بدلاً من إخفائها.

على الجانب المعماري، البيئات متعددة الحسابات تُضيف طبقة تعقيد إضافية: يجب تفعيل العلامات في حساب الإدارة (Management Account) فقط، لكن السياسات يجب أن تُطبَّق على كل الوحدات التنظيمية (OUs). وإذا كنت تستخدم Landing Zone أو Control Tower، فإن الحسابات الجديدة تُنشأ باستمرار، وتحتاج أن يكون فرض العلامات تلقائياً منذ اللحظة الأولى.

تصميم تصنيف علامات (Taxonomy) قابل للتطبيق

القاعدة الذهبية في تجربتي: 5 إلى 7 علامات إلزامية، لا أكثر. كلما أضفت علامة، ضاعفت جهد الحوكمة. أبدأ دائماً بهذه المجموعة الأساسية التي تغطي 90% من احتياجات التقارير المالية والتشغيلية:

مفتاح العلامةالغرضمثال قيممصدر التنفيذ
cost_centerربط بالنظام المالي (SAP/Oracle)CC-4021, CC-1108SCP + Tag Policy
applicationوحدة العمل المنطقيةcheckout-api, ml-trainingIaC (Terraform)
environmentمرحلة النشرprod, staging, devTag Policy (قائمة مغلقة)
owner_emailالمسؤول الأول للتواصل[email protected]IaC + AWS Config
data_classificationمستوى الحساسيةpublic, internal, piiSCP إلزامي
lifecycle_statusحالة دورة الحياةactive, deprecatedAutomation

لاحظ أنني أستخدم snake_case بشكل ثابت لكل المفاتيح. هذه ليست مسألة ذوق، بل قرار مقصود لتجنب فخ حساسية الأحرف. أفرض القاعدة في Tag Policy على مستوى المنظمة، فتُرفض أي علامة بصياغة مختلفة تلقائياً. القيم أيضاً يجب أن تخضع لقائمة مغلقة حيثما أمكن؛ خانة environment مثلاً يجب أن تقبل ثلاث قيم فقط، لا خمس عشرة اختلافاً إبداعياً.

كيف أفعّل علامات توزيع التكاليف في AWS؟

التفعيل يتم فقط في حساب الإدارة (Management Account) الخاص بـ AWS Organizations، وليس في الحسابات الفرعية. الخطوات:

  1. سجّل الدخول إلى حساب الإدارة وافتح Billing and Cost Management Console.
  2. من القائمة الجانبية، اختر Cost allocation tags.
  3. ستجد قسمين: علامات AWS-generated وعلامات User-defined. اختر المفاتيح التي تريد تفعيلها ثم اضغط Activate.
  4. انتظر 24 ساعة على الأقل قبل أن تظهر البيانات في Cost Explorer. التفعيل يعمل بأثر مستقبلي فقط، البيانات التاريخية لا تُعاد معالجتها.

للأتمتة (وهذا ما أوصي به دائماً في البيئات الكبيرة)، استخدم AWS CLI ضمن سكربت إعداد الـ Landing Zone:

# تفعيل مفاتيح العلامات الأساسية للفوترة
aws ce update-cost-allocation-tags-status \
  --cost-allocation-tags-status \
    TagKey=cost_center,Status=Active \
    TagKey=application,Status=Active \
    TagKey=environment,Status=Active \
    TagKey=owner_email,Status=Active \
    TagKey=data_classification,Status=Active

# التحقق من الحالة
aws ce list-cost-allocation-tags \
  --status Active \
  --query 'CostAllocationTags[*].[TagKey,Type,Status]' \
  --output table

فرض التوسيم عبر AWS Organizations: Tag Policies و SCPs

Tag Policies تُوحّد صياغة المفاتيح والقيم المسموح بها، لكنها لا تمنع إنشاء الموارد. أما Service Control Policies (SCPs) فتمنع الإنشاء نفسه إذا لم تُقدَّم العلامات المطلوبة. الاستراتيجية الأكثر نجاحاً في تجربتي هي الطبقات الثلاث: Tag Policy للصياغة، و SCP للإلزام، و AWS Config للتدقيق المستمر. هذه الوصفة أنقذتني أكثر من مرة عندما بدأ مدير المالية يسأل عن أرقام الشهر السابق.

مثال Tag Policy لتوحيد environment

{
  "tags": {
    "environment": {
      "tag_key": {
        "@@assign": "environment"
      },
      "tag_value": {
        "@@assign": ["prod", "staging", "dev", "sandbox"]
      },
      "enforced_for": {
        "@@assign": [
          "ec2:instance",
          "ec2:volume",
          "rds:db",
          "s3:bucket",
          "lambda:function"
        ]
      }
    }
  }
}

مثال SCP لرفض إنشاء EC2 بدون علامة cost_center

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyRunInstancesWithoutCostCenter",
      "Effect": "Deny",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:*:*:instance/*"
      ],
      "Condition": {
        "Null": {
          "aws:RequestTag/cost_center": "true"
        }
      }
    },
    {
      "Sid": "DenyCreateVolumeWithoutCostCenter",
      "Effect": "Deny",
      "Action": "ec2:CreateVolume",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:RequestTag/cost_center": "true"
        }
      }
    }
  ]
}

طبِّق SCP على مستوى OU الإنتاج أولاً، وليس على المنظمة بأكملها. في بيئات الـ sandbox، أفضّل ترك SCPs مخفّفة لتشجيع التجريب، وأعوّض بجدول Chargeback شهري يجعل الفريق يرى تكاليفه الخاصة. AWS Config توفّر قواعد جاهزة مثل required-tags تفحص كل مورد قائم وتضع علامة "Non-Compliant" على أي مورد لا يمتثل، مما يمنحك رؤية مستمرة للتغطية دون كسر التطبيقات القائمة.

علامات على مستوى الحساب (ميزة ديسمبر 2025)

هذه الإضافة الجديدة تُغيّر قواعد اللعبة في البيئات متعددة الحسابات. تاريخياً، كانت رسوم مثل AWS Support و Marketplace و RI/SP charges وبعض بنود Data Transfer غير قابلة للتوسيم على مستوى المورد، فتظهر كتكاليف "غير موزّعة" في Cost Explorer. الحل التقليدي كان تقسيمها بالنسبة والتناسب عبر Cost Categories.

ابتداءً من ديسمبر 2025، أصبح بإمكانك توسيم الحساب نفسه في AWS Organizations وتفعيل تلك العلامات كأبعاد فوترة. النتيجة: حتى البنود غير القابلة للتوسيم على المورد تُنسب تلقائياً إلى القيمة الموسومة للحساب. مثال عملي من مشروع أعمل عليه الآن: أوسم حساب prod-payments بـ cost_center=CC-4021 وحساب prod-search بـ cost_center=CC-5502، فتنسب رسوم Support المشتركة تلقائياً حسب حجم الاستخدام لكل حساب.

# توسيم حساب في AWS Organizations
aws organizations tag-resource \
  --resource-id 123456789012 \
  --tags \
    Key=cost_center,Value=CC-4021 \
    Key=business_unit,Value=payments \
    Key=environment,Value=prod

# تفعيل علامات مستوى الحساب في وحدة الفوترة
aws ce update-cost-allocation-tags-status \
  --cost-allocation-tags-status \
    TagKey=cost_center,Type=AccountTag,Status=Active \
    TagKey=business_unit,Type=AccountTag,Status=Active

نصيحة تشغيلية بسيطة: طبّق نفس مفاتيح العلامات على مستوى الحساب ومستوى المورد. هذا يجعل استعلامات CUR بسيطة، فيمكنك دائماً الرجوع إلى قيمة الحساب عندما تكون قيمة المورد فارغة (COALESCE(resource_tags.cost_center, account_tags.cost_center)).

فئات التكاليف Cost Categories: طبقة العرض الأعلى

الخطأ الأكثر شيوعاً الذي أراه هو محاولة حل كل شيء بالعلامات وحدها. العلامات هي طبقة البيانات: دقيقة، على مستوى المورد، وقد تتغير. Cost Categories هي طبقة المنطق التجاري: تجميعات ذات معنى للمالية، مثل "منتج X" أو "قسم التسويق" أو "التكاليف المشتركة للبنية التحتية". أنصح بأن تكون Cost Categories هي الواجهة الوحيدة التي يراها فريق المالية.

مثال قاعدة Cost Category تجمع الحسابات والعلامات لتشكّل خط أعمال واحد:

{
  "Name": "BusinessUnit",
  "RuleVersion": "CostCategoryExpression.v1",
  "Rules": [
    {
      "Value": "Payments",
      "Rule": {
        "Or": [
          {"Dimensions": {"Key": "LINKED_ACCOUNT",
            "Values": ["111111111111", "222222222222"]}},
          {"Tags": {"Key": "application",
            "Values": ["checkout-api", "invoice-service"]}}
        ]
      }
    },
    {
      "Value": "SharedInfrastructure",
      "Rule": {
        "Or": [
          {"Dimensions": {"Key": "SERVICE",
            "Values": ["AWS Support (Business)", "AWS CloudTrail"]}},
          {"Tags": {"Key": "application",
            "Values": ["shared-vpc", "central-logging"]}}
        ]
      }
    }
  ],
  "DefaultValue": "Unallocated",
  "SplitChargeRules": [
    {
      "Source": "SharedInfrastructure",
      "Targets": ["Payments", "Search", "ML"],
      "Method": "PROPORTIONAL"
    }
  ]
}

ميزة SplitChargeRules ذهبية للتكاليف المشتركة (NAT Gateway, Transit Gateway, CloudTrail، حتى فواتير الدعم): تُقسّم تلقائياً على وحدات الأعمال بنسبة استهلاكها الموسوم. هذا يُنهي الجدل الأبدي حول "من يتحمّل NAT Gateway المشترك". صدّقني، لقد جلست في هذا الاجتماع أكثر من مرة قبل أن أتعلّم استخدام SplitChargeRules بشكل صحيح.

من Showback إلى Chargeback: نموذج المسؤولية المالية

الفرق باختصار: Showback يعرض التكاليف على الفريق ("استهلكتم 42,180 دولاراً الشهر الماضي") دون تحريك أموال حقيقية. Chargeback يُنقل المبلغ فعلياً من ميزانية الفريق إلى ميزانية BusinessUnit المركزية أو IT. باختصار: Showback أداة توعية، Chargeback أداة سلوك.

لا أنصح بالانتقال إلى Chargeback قبل تحقيق ثلاثة شروط: تغطية علامات أعلى من 90% من الإنفاق، ثقة فرق التطبيق بدقة التقارير (استقرت الشكاوى)، ومباركة رسمية من المالية لآلية التسوية الشهرية. تسرّع الانتقال قبل هذه الشروط يُحرق مصداقية برنامج FinOps بأكمله. للتعمق في تحليل تكاليف الحوسبة نفسها، ألقِ نظرة على مقالتنا حول AWS Savings Plans مقابل Reserved Instances في 2026. الجمع بين توزيع دقيق للتكاليف واستراتيجية التزام صحيحة هو ما يُنتج التوفير الحقيقي. وإذا كنت تشغّل أعباء مرنة، فإن دليل AWS Spot Instances 2026 يكمل الصورة.

تقارير CUR: التحليل العميق متعدد الحسابات

Cost Explorer رائع للاستكشاف السريع، لكنه لا يعطيك مرونة كافية للتحليلات المعقدة. Cost and Usage Report (CUR 2.0) هو المصدر الأصلي: بيانات على مستوى المورد، محدّثة كل ساعة، تُسلَّم إلى دلو S3 بتنسيق Parquet. في مشاريعي، أُغذّي CUR إلى Athena أو Redshift أو Snowflake، ثم أبني لوحات Grafana أو QuickSight فوقها.

مثال استعلام Athena لحساب "الإنفاق غير الموسوم" لكل حساب، وهو مؤشر KPI أساسي في أي برنامج FinOps ناضج:

SELECT
  line_item_usage_account_id                       AS account_id,
  bill_billing_period_start_date                   AS period,
  SUM(CASE
        WHEN resource_tags_user_cost_center IS NULL
          OR resource_tags_user_cost_center = ''
        THEN line_item_unblended_cost
        ELSE 0
      END)                                          AS untagged_cost,
  SUM(line_item_unblended_cost)                    AS total_cost,
  ROUND(100.0 * SUM(CASE
        WHEN resource_tags_user_cost_center IS NULL
          OR resource_tags_user_cost_center = ''
        THEN line_item_unblended_cost
        ELSE 0
      END) / NULLIF(SUM(line_item_unblended_cost), 0), 2)
                                                    AS untagged_pct
FROM cur.hourly
WHERE bill_billing_period_start_date >= DATE '2026-07-01'
  AND line_item_line_item_type = 'Usage'
GROUP BY 1, 2
ORDER BY untagged_pct DESC;

هذه القاعدة تعطيك، لكل حساب وكل شهر، نسبة الإنفاق غير المنسوب. أضع هدفاً صارماً: أي حساب يتجاوز 5% ينتقل إلى قائمة المراجعة الأسبوعية. للمزيد حول تكاليف نقل البيانات، وهي من أكبر بنود CUR الغامضة، راجع دليلنا تخفيض تكاليف نقل البيانات السحابية في 2026. ولا تنسَ أن قواعد البيانات المدارة تحتاج تحليلاً مختلفاً؛ راجع تحسين تكاليف قواعد البيانات السحابية للتقنيات المتقدمة.

مقاييس نجاح برنامج التوسيم

البرنامج بدون قياس ليس برنامجاً، بل نية. هذه هي الجداول الأربعة التي أراقبها أسبوعياً (نعم، جداول بيانات، فلست في مرحلة العافية بعد إن لم تكن تعيش في Excel):

  • تغطية التوسيم (Tag Coverage): نسبة الإنفاق الذي يحمل جميع العلامات الإلزامية. الهدف: 90%+ خلال 6 أشهر من الإطلاق، 95%+ خلال سنة. حسب إطار عمل FinOps Foundation للتوزيع، هذا هو المقياس الأول لنضج قدرة Allocation.
  • الإنفاق غير الموزّع (Unallocated Spend): الدولارات المطلقة (لا النسبة) من التكاليف التي لا يملكها فريق محدد. الهدف: أقل من 5% من الإجمالي.
  • معدل الشذوذ في العلامات (Tag Drift Rate): عدد الموارد التي دخلت حالة "Non-Compliant" في AWS Config خلال الأسبوع. صعود مفاجئ يعني أن فريقاً ما تجاوز الأتمتة يدوياً.
  • وقت التسوية (Time-to-Reconcile): الأيام من إغلاق الشهر إلى إصدار تقرير Chargeback نهائي. مؤسسات ناضجة تصل إلى 3 أيام؛ إذا كنت في 15+ يوماً، فأتمتة CUR غائبة.

الأسئلة الشائعة

لماذا لا تظهر علاماتي في Cost Explorer رغم إنشائها على المورد؟

لأن إنشاء العلامة على المورد لا يفعّلها للفوترة. يجب أن تدخل إلى Billing Console في حساب الإدارة (Management Account)، تختار Cost Allocation Tags، وتفعّل مفتاح العلامة يدوياً أو عبر aws ce update-cost-allocation-tags-status. ثم انتظر 24 ساعة لتظهر البيانات في التقارير.

ما الفرق بين علامات AWS المُنشأة تلقائياً وعلامات المستخدم؟

علامات AWS-generated (مثل aws:createdBy) تُنشأ تلقائياً من قِبل الخدمة نفسها وتصف من أنشأ المورد، وهي مفيدة للتدقيق لكنها لا تصف الغرض التجاري. علامات المستخدم (User-defined) هي التي تعرّفها بنفسك (cost_center, application) وهي الأداة الأساسية لتوزيع التكاليف على وحدات الأعمال.

كيف أفرض التوسيم عبر حسابات متعددة في AWS Organizations؟

استخدم طبقات ثلاث: Tag Policies لتوحيد صياغة المفاتيح والقيم المسموح بها، Service Control Policies (SCPs) لمنع إنشاء الموارد بدون العلامات المطلوبة (مثل رفض ec2:RunInstances بدون cost_center)، وAWS Config Rules (مثل required-tags) للتدقيق المستمر على الموارد القائمة. طبّق SCPs على مستوى OU لتجنّب كسر بيئات التجريب.

ما الفرق بين Showback و Chargeback في FinOps؟

Showback هو عرض التكاليف للفريق دون تحريك أموال، والغرض توعوي. Chargeback هو نقل المبلغ فعلياً من ميزانية الفريق إلى ميزانية IT المركزية عبر النظام المالي (SAP/Oracle). ابدأ بـ Showback حتى تصل تغطية العلامات إلى 90%+، ثم انتقل إلى Chargeback عندما تثق الفرق بدقة الأرقام.

هل يمكنني توسيم رسوم AWS Support و Marketplace؟

مباشرةً على البند، لا. لكن ابتداءً من ديسمبر 2025، يمكنك توسيم الحساب نفسه في AWS Organizations وتفعيل تلك العلامات كأبعاد فوترة (Account-level Cost Allocation Tags)، فتُنسب تلقائياً تلك البنود غير القابلة للتوسيم إلى القيمة الموسومة للحساب المستهلك. بديلاً، استخدم SplitChargeRules في Cost Categories لتقسيمها بالنسبة والتناسب.

متى أستخدم Cost Categories بدلاً من العلامات؟

استخدم العلامات لدقة على مستوى المورد (Terraform, Console, CLI)، واستخدم Cost Categories لبناء طبقة أعلى تجمع الحسابات والعلامات في مفاهيم تجارية (BusinessUnit, Product, Team). Cost Categories تدعم SplitChargeRules لتوزيع التكاليف المشتركة تلقائياً، وهي الواجهة الموصى بها لفريق المالية.

Sara Al-Mahmoud
عن الكاتب Sara Al-Mahmoud

Cloud cost architect specialising in the gnarly multi-account, multi-region setups. Spreadsheet enthusiast.