هذه مجموعة من الوحدات الفرعية التي تسهل إدارة أدوار IAM المتعددة بشكل غير مدمر للموارد الموجودة على Google Cloud Platform:
هذه الوحدة مخصصة للاستخدام مع Terraform 1.3+ وتم اختبارها باستخدام Terraform 1.3+. إذا وجدت عدم توافق في استخدام Terraform >=1.3، فيرجى فتح مشكلة.
تتوفر الأدلة التالية للمساعدة في الترقيات:
توجد الأمثلة الكاملة في مجلد الأمثلة، ولكن الاستخدام الأساسي هو كما يلي لإدارة الأدوار في مشروعين:
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
توفر الوحدة أيضًا وضعًا موثوقًا سيؤدي إلى إزالة جميع الأدوار التي لم يتم تعيينها من خلال Terraform. هذا مثال على استخدام الوضع المعتمد لإدارة الوصول إلى مجموعة التخزين:
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
يتحكم متغير mode
في سلوك الوحدة الفرعية، ويتم ضبطها افتراضيًا على "مضافة"، والخيارات الممكنة هي:
في الوضع الموثوق، تتحكم الوحدة الفرعية بشكل كامل في روابط IAM المدرجة في الوحدة. وهذا يعني أنه ستتم إزالة أي أعضاء تمت إضافتهم إلى الأدوار خارج الوحدة في المرة التالية التي يتم فيها تشغيل Terraform. ومع ذلك، لن تتأثر الأدوار غير المدرجة في الوحدة.
في الوضع الإضافي، تترك الوحدة الفرعية الارتباطات الموجودة دون أن تتأثر. وبدلاً من ذلك، ستتم إضافة أي أعضاء مدرجين في الوحدة النمطية إلى المجموعة الحالية من روابط IAM. ومع ذلك، يتم التحكم بشكل كامل في الأعضاء المدرجين في الوحدة النمطية بواسطة الوحدة النمطية. هذا يعني أنه إذا قمت بإضافة رابط عبر الوحدة ثم قمت بإزالته لاحقًا، فستتعامل الوحدة بشكل صحيح مع إزالة ربط الدور.
تقوم كل وحدة فرعية بتنفيذ عمليات على بعض المتغيرات قبل إجراء أي تغييرات على روابط IAM في GCP. بسبب القيود المفروضة على for_each
(مزيد من المعلومات)، والتي تستخدم على نطاق واسع في الوحدات الفرعية، هناك قيود معينة على نوع القيم الديناميكية التي يمكنك توفيرها لوحدة فرعية:
projects
) لكيان واحد فقط.projects
)، فيجب أن يكون التكوين ثابتًا، مما يعني أنه لا يمكنه استخدام أي من حقول الموارد الأخرى للحصول على اسم الكيان منها (وهذا يتضمن الحصول على التجزئة التي تم إنشاؤها عشوائيًا من خلال random_id
الموارد).authoritative
. يمكنك اختيار أنواع الموارد التالية لتطبيق روابط IAM:
projects
متغيرة)organizations
)folders
)service_accounts
)subnets
)storage_buckets
)pubsub_topics
)pubsub_subscriptions
)kms_key_rings
)kms_crypto_keys
)secrets
)managed_zones
)entity_ids
ومتغير location
) قم بتعيين المتغير المحدد في استدعاء الوحدة النمطية لاختيار الموارد التي سيتم التأثير عليها. تذكر تعيين متغير mode
ومنح أذونات كافية لإدارة المورد المحدد أيضًا. لاحظ أن متغير bindings
يقبل الخريطة الفارغة {}
التي تم تمريرها كوسيطة في حالة عدم احتواء الموارد على روابط IAM لتطبيقها.
من أجل تنفيذ وحدة فرعية، يجب أن يكون لديك حساب خدمة له دور مناسب لإدارة IAM للمورد القابل للتطبيق. ويختلف الدور المناسب بناءً على المورد الذي تستهدفه، كما يلي:
تأكد من حصولك على إصدار Terraform الصحيح >= 1.3
تأكد من أن لديك المكونات الإضافية المجمعة على $HOME/.terraform.d/plugins/
راجع كل صفحة مكون إضافي للحصول على مزيد من المعلومات حول كيفية تجميعها واستخدامها.