توضح هذه المقالة أذونات IAM في GCP التي يتطلبها ClickPipes للمصادقة مع Google Cloud Pub/Sub واستهلاك البيانات من موضوعاتك، كما تشرح كيفية إعداد حساب خدمة يمنح هذه الأذونات تحديدًا.
المتطلبات المسبقة
لمتابعة هذا الدليل، ستحتاج إلى:
- خدمة ClickHouse Cloud نشطة
- مشروع على GCP يحتوي على موضوع في Pub/Sub تريد إدخال البيانات منه
- أذونات IAM في ذلك المشروع لإنشاء حسابات خدمة ومنح الأدوار
نموذج المصادقة
تُجري ClickPipes for Pub/Sub المصادقة مع GCP باستخدام مفتاح JSON لحساب خدمة. عند إنشاء pipe، ترفع ملف المفتاح؛ وتقوم ClickPipes بتشفيره أثناء السكون وتستخدمه وقت التشغيل من أجل:
- سرد الموضوعات في مشروعك وقراءتها،
- إنشاء الاشتراك المُدار الذي تستخدمه ClickPipes لاستهلاك الرسائل وحذفه،
- استهلاك الرسائل من ذلك الاشتراك، و
- (اختياريًا) قراءة مخططات Pub/Sub الأصلية من سجل المخططات.
لا يتوفر خيار Workload Identity أو لصق بيانات الاعتماد بشكل Inline — مفتاح JSON لحساب خدمة هو طريقة المصادقة الوحيدة المدعومة حاليًا.
الأذونات المطلوبة
يتطلب ClickPipes أذونات IAM التالية على مشروع GCP الذي يملك الموضوع. وهي تغطي دورة حياة الـ pipe بالكامل: الاكتشاف (إدراج الموضوع والتحقق منه وأخذ العينات)، وإدارة الاشتراك، وإدخال البيانات في حالة التشغيل المستقرة، والتنظيف.
الوصول إلى الموضوعات (الاكتشاف والتحقق)
| الإذن | الغرض |
|---|---|
pubsub.topics.list |
عرض الموضوعات المتاحة في المشروع أثناء الاكتشاف |
pubsub.topics.get |
التحقق من وجود الموضوع واسترداد إعدادات المخطط |
pubsub.topics.attachSubscription |
مطلوب على الموضوع عند إنشاء اشتراك عليه |
دورة حياة الاشتراك (الاكتشاف والإدخال)
| Permission | Purpose |
|---|---|
pubsub.subscriptions.create |
إنشاء الاشتراك المُدار (clickpipes-{pipeID}) واشتراكات الاكتشاف المؤقتة |
pubsub.subscriptions.get |
فحوصات الحالة (كل 60 ثانية)، واستقصاء التابع، والتحقق من الاشتراك |
pubsub.subscriptions.delete |
تنظيف اشتراكات الاكتشاف المؤقتة وحذف الاشتراك المُدار عند حذف الـ pipe |
pubsub.subscriptions.consume |
عمليات Receive() وAck() وNack() وعمليات الانتقال إلى طابع زمني |
الوصول إلى المخطط (اختياري — فقط لموضوعات Avro/Protobuf الأصلية)
| الإذن | الغرض |
|---|---|
pubsub.schemas.get |
جلب تعريفات المخطط الأصلية من سجل المخططات في Pub/Sub |
الأدوار المعرفة مسبقًا
| الدور | كافٍ؟ | ملاحظات |
|---|---|---|
roles/pubsub.editor |
نعم | يغطي جميع الأذونات المطلوبة. وهو الخيار الأوسع. |
roles/pubsub.subscriber |
لا | يفتقر إلى topics.list وtopics.attachSubscription وsubscriptions.create وsubscriptions.delete وschemas.get. |
roles/pubsub.viewer |
لا | للقراءة فقط — لا يتيح إدارة الاشتراكات أو استهلاك البيانات. |
| دور مخصص (موصى به) | نعم | استخدم الأذونات الأساسية السبعة المذكورة أعلاه (بالإضافة إلى schemas.get الاختياري) لتطبيق مبدأ الحد الأدنى من الامتيازات. |
الإعداد
أنشئ دورًا مخصصًا (موصى به)
لتطبيق مبدأ الحد الأدنى من الامتيازات، أنشئ دورًا مخصصًا يضم فقط الأذونات التي يحتاجها ClickPipes.
يمكنك القيام بذلك باستخدام واجهة CLI gcloud:
gcloud iam roles create clickpipes.pubsub.ingestion \
--project=YOUR_PROJECT_ID \
--title="ClickPipes Pub/Sub Ingestion" \
--description="Permissions required by ClickHouse ClickPipes to ingest from Pub/Sub" \
--permissions=pubsub.topics.list,pubsub.topics.get,pubsub.topics.attachSubscription,pubsub.subscriptions.create,pubsub.subscriptions.get,pubsub.subscriptions.delete,pubsub.subscriptions.consume \
--stage=GAأو من خلال Console في GCP، انتقل إلى IAM & Admin → Roles → إنشاء دور وأضف الأذونات الواردة في الأذونات المطلوبة.
إذا كنت تفضّل تجاوز الدور المخصّص، فيمكنك بدلاً من ذلك منح roles/pubsub.editor.
أنشئ حساب خدمة
أنشئ حساب خدمة مخصصًا لـ ClickPipe:
gcloud iam service-accounts create clickpipes-pubsub \
--project=YOUR_PROJECT_ID \
--display-name="ClickPipes Pub/Sub Ingestion"امنح الدور لحساب الخدمة
اربط الدور الذي أنشأته (أو roles/pubsub.editor) بحساب الخدمة على مستوى المشروع:
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member="serviceAccount:clickpipes-pubsub@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="projects/YOUR_PROJECT_ID/roles/clickpipes.pubsub.ingestion"أنشئ ونزّل مفتاحًا لحساب الخدمة
أنشئ مفتاح JSON لحساب الخدمة ونزّله إلى جهازك المحلي:
gcloud iam service-accounts keys create clickpipes-pubsub-key.json \
--iam-account=clickpipes-pubsub@YOUR_PROJECT_ID.iam.gserviceaccount.comستحمّل ملف clickpipes-pubsub-key.json هذا في واجهة ClickPipes عند إنشاء pipe.
ملاحظات
- يتطلب
pubsub.topics.attachSubscriptionعلى مورد الموضوع، وليس على الاشتراك. وغالبًا ما يتم إغفال ذلك عند منح أذونات على مستوى الاشتراك فقط. - إذا كان الموضوع لديك لا يستخدم مخطط Pub/Sub أصليًا (Avro أو Protobuf)، فلن تحتاج إلى الإذن
pubsub.schemas.get. - تُسمّى الاشتراكات المُدارة
clickpipes-{pipeID}، مع ack deadline قدره 60 ثانية، والاحتفاظ بالرسائل لمدة 7 أيام، وتمكين ترتيب الرسائل. - تُسمّى اشتراكات الاكتشاف المؤقتة
clickpipes-discovery-{uuid}، مع ack deadline قدره 10 ثوانٍ، والاحتفاظ لمدة 10 دقائق، وTTL لانتهاء الصلاحية تلقائيًا بعد 24 ساعة. - يتعامل ClickPipes مع الخطأين
PermissionDeniedوUnauthenticatedعلى أنهما غير قابلين لإعادة المحاولة — فإذا كان هناك إذن مفقود، يفشل pipe فورًا بدلًا من الاستمرار في إعادة المحاولة إلى ما لا نهاية.