.Tf এবং .tfstate এ কীভাবে আমি গোপনীয়তা পরিচালনা করতে পারি?


46

আমি টেরফর্ম মাইএসকিউএল সরবরাহকারীকে মাইএসকিএল ব্যবহারকারীদের একটি তালিকা রাখতে এবং নতুন পরীক্ষার পরিবেশ তৈরির জন্য অনুদানের জন্য ব্যবহার করতে চাই । .tfএবং .tfstateফাইল উভয় প্লেইন মধ্যে মাইএসকিউএল পাসওয়ার্ড সঞ্চয় করতে চান বলে মনে হচ্ছে।

.Tf সম্পর্কিত:

এটি আমার বোঝা যায় যে .tfফাইলগুলি সংশোধন নিয়ন্ত্রণে থাকে এবং একটি দল দ্বারা রক্ষণাবেক্ষণ করা হয়। গুপ্তচর যখন থাকে তখন সেই অনুশীলনটি কীভাবে আলাদা হয় .tf? এই মানগুলি কি আদৌ এনক্রিপ্ট করা সম্ভব?

সম্পর্কিত .tfstate:

.tfstateটেরেফর্ম প্রয়োগের পরে আমি নিরাপদে অন্য কোথাও সঞ্চয় করতে পারি , তবে এই ব্যবহারের ক্ষেত্রে এটি আদৌ সংরক্ষণ না করা ভাল?

উত্তর:


22

টেরফর্ম অনুরোধের সময় ভেরিয়েবলগুলির সাথে একটি অতিরিক্ত ফাইল যুক্ত সমর্থন করে।

ডকুমেন্টেশন: https://www.terraform.io/intro/getting-started/variables.html#from-a-file

secrets.tfvarsটেরফর্মের প্রতিটি অনুরোধে একটি ফাইল সরবরাহ করতে আমরা সেই বৈশিষ্ট্যটি ব্যবহার করছি । কমান্ডটি মোড়ানোর জন্য আমরা একটি স্ক্রিপ্টও ব্যবহার করি যাতে এর অনুরোধটি সামঞ্জস্যপূর্ণ হয় এবং সমস্ত দলের সদস্যরা একই ভুল করতে না পেরে। মোড়ক .tfstateকার্যকর করার আগে S3 এর সাথে সিঙ্ক্রোনাইজ .tfstateকরে এবং শেষে S3 এ ফিরে যায়। আমি কনসুলেটে থাকা রাষ্ট্রের সাথে লোকেরা একই কাজ করার কথা শুনি, এমনকি দু'জনকে একই সাথে টেরফর্ম শুরু করতে বাধা দেওয়ার জন্য কনসুলেটে এক ধরণের সেমফোর যোগ করেছিলাম।

আপনি যখন কোনও variables.tfফাইলে একটি ডিফল্ট মান সেট করা এড়িয়ে যান , এটি ব্যবহারকারীকে মানটি ইনপুট করতে বাধ্য করে। এটি হয় ম্যানুয়ালি প্রবেশ করাতে বা -var-fileউপরে বর্ণিত কমান্ড বিকল্পটি ব্যবহার করে । আপনার গোপনীয়তায় ডিফল্ট সেট না করা এমন পরিবর্তনগুলি প্রয়োগের একটি ভাল উপায় যার জন্য গোপনীয়তার পরিবর্তন দরকার।

secrets.tfvarsফাইল গোপন কোন সংস্করণটি নিয়ন্ত্রণ সঞ্চিত নেই ফাইল এক একটি সিম্বলিক লিঙ্ক। আমরাও তাই মত, বিভিন্ন, পরিবেশ প্রতি এক আছে secrets-prod.tfvars, secrets-dev.tfvars, secrets-stg.tfvars, ইত্যাদি ...

আরও ভাল অনুশীলন হ'ল ভল্টে ডেটা বা গোপনীয়তা ভাগ করার অন্য কোনও উপায়ে ভিত্তি করে মোড়ক স্ক্রিপ্ট চলাকালীন এই গোপনীয় ফাইলগুলি উত্পন্ন করা । যেহেতু বর্তমানে যখন গোপনের ফর্ম্যাটটি পরিবর্তিত হয় বা গোপন করে, তখন আমাদের এটিকে সংস্করণ নিয়ন্ত্রণ চ্যানেলের বাইরে দলের সাথে যোগাযোগ করা দরকার - এবং এটি সর্বদা ভাল কাজ করে না, সত্যি বলতে। তবে গোপনীয় ঘটনাগুলি খুব কম সময়েই বদলে যায়।


1
কোডের সাথে লিঙ্ক করুন - gist.github.com/kesor/21f942be0350559b44f7ad1f9d846e7c
ইভজেনি

8

আমরা টেরফর্মটি আমাদের গোপনীয়তাগুলি পরিচালনা করি avoid এমনকি যদি উপরে বর্ণিত হিসাবে আপনি কোনও ভেরিও ফাইল "সেক্রেটস.টিফভারস" দ্বারা সিক্রেটস ইনজেক্ট করার ব্যবস্থা করেন তবে এই গোপনীয়তাগুলি আপনার টেরফর্ম (রিমোট-) অবস্থায় সংরক্ষণ করা হবে।

আপনি উদাহরণস্বরূপ S3 অনুমোদন ব্যবহার করে দূরবর্তী-রাষ্ট্রের ফাইলগুলি সুরক্ষা দিতে পারেন, বা আপনি স্থানীয় রাষ্ট্রের ফাইলগুলিকে গিটিংগোর করতে পারেন তবে আমরা এই ধরণের সুরক্ষার উপর নির্ভর না করার সিদ্ধান্ত নিয়েছি।


2
এছাড়াও github.com/hashicorp/terraform/issues/516 দেখুন যেখানে তারা tfstate ফাঁস রহস্যের বিষয়টি ট্র্যাক করে
jottr

6

আপনি যদি ডাব্লুএসে থাকেন , তবে অ্যাডাব্লুএস ব্লগে সেগমেন্ট.আইওর দ্বারা "গোপনীয়তা পরিচালনার সঠিক উপায়" একবার দেখুন । আমরা গোপনীয়তা পরিচালনার জন্য আমাদের গ্রাহকদের সকলকে ব্যবহার করার পক্ষে পরামর্শ দিই । এটি কেএমএস কীগুলির সাথে একসাথে এডাব্লুএস সিস্টেমস ম্যানেজার প্যারামিটার স্টোর (এসএসএম) উপকারের মাধ্যমে কাজ করে। এটি নিশ্চিত করে যে গোপনীয়তা বিশ্রামে এনক্রিপ্ট করা (এবং ট্রানজিটে), আইএএম এর সাথে সুরক্ষিত, ক্লাউডট্রেইলের সাথে শ্রাবণযোগ্য এবং কেবল রান-টাইমে পরিবেশগত পরিবর্তনশীল হিসাবে উদ্ভাসিত হয়।chamber

চেম্বারটি কনফিগার করার পরে এবং কেএমএস কী সেটআপ করার পরে , আমরা প্যারামিটার স্টোরটিতে গোপনীয়তাগুলি লিখি।

chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret

তারপরে আপনি যখন টেরেমফর্মটি কল করবেন তখন সেই গোপনীয়তাগুলি ব্যবহার করুন।

chamber exec db -- terraform plan

এটি ধরে নিয়েছে যে আপনি একটি পরিবর্তনশীল বলে DB_USERএবং DB_PASSআপনার এইচসিএল কোডটিতে সংজ্ঞা দিয়েছেন।

উদাহরণস্বরূপ, আপনি এটিতে যুক্ত করতে পারেন variables.tf

variable "DB_USER" { }
variable "DB_PASS" { }

দ্রষ্টব্য: chamber সর্বদা বড় হাতের মধ্যে পরিবেশের পরিবর্তনগুলি রফতানি করবে

terraform-aws-kms-keyকেএমএস কীটি সহজতর করার জন্য আমরা একটি টেরাপের মডিউল সরবরাহ করি । chamberএকাধিক নেমস্পেসের সাথে কীভাবে ব্যবহার করতে হয় সেইসাথে কীভাবে গোপনীয়তা পরিচালনা করতে টেরাপের সাথে চেম্বার ব্যবহার করতে হয় তার উদাহরণ সহ আমাদের বিস্তারিত ডকুমেন্টেশন দেখুন Check চেম্বার নির্ভরতা বিধানের জন্য আমাদের সম্পূর্ণ রেফারেন্স উদাহরণটি দেখুন ।

হিসাবে হিসাবে .tfstate, আপনি রাষ্ট্র ফাইলটিতে প্লেইন-পাঠ্য গোপনীয়তার অস্তিত্ব সম্পর্কে সত্যই একটি ভাল বিষয় নিয়ে এসেছেন। এর আশেপাশে আসলে কোনও উপায় নেই। পরিকল্পনা তৈরির জন্য টেরফর্মটিকে পরিবর্তনগুলি গণনা করার জন্য, এটি "পূর্বে" এবং "পরে" অবস্থা জেনে রাখা উচিত। এই কারণে, আমরা বাধ্যতামূলক সংস্করণ সহ একটি এনক্রিপ্ট করা এস 3 বালতি ব্যবহার করার পরামর্শ দিই। terraform-aws-tfstate-backendসেরা অভ্যাস অনুসারে একটি বালতি এবং ডায়নামোডিবি লকিং টেবিলের ব্যবস্থা করতে মডিউলটি ব্যবহার করুন ।


এটি এডাব্লুএস পরিষেবাগুলির সাথে অত্যন্ত জড়িত, যা প্রশ্নটি উল্লেখ করে না এবং এটি প্রাথমিক ভিত্তি বা অন্য কোনও মেঘের পক্ষে উত্তর বলে মনে হচ্ছে না।
তেনসিবাই

@ বাসা, আপনি ঠিক বলেছেন। আসল প্রশ্নটি সর্বোত্তম প্রস্তাবনা দেওয়ার জন্য অপারেটিং প্ল্যাটফর্মটি নির্ধারণের জন্য পর্যাপ্ত তথ্য সরবরাহ করে না। প্ল্যাটফর্মের ক্ষমতা অনুসারে প্রতিটি প্ল্যাটফর্ম আলাদা হবে different প্রিম বা বেয়ারমেটাল ব্যবহারকারীরা ভল্ট এবং টেরফর্ম এন্টারপ্রাইজের সংমিশ্রণটি ব্যবহার করে বিবেচনা করতে পারেন। যা বাস্তবায়নের সুযোগ অনেক বেশি, আরও অনেক বেশি হবে। :)
এরিক অস্টারম্যান

আমি ইতিমধ্যে এডাব্লুএস সিক্রেটস ম্যানেজার ব্যবহার করেছি এবং চেম্বার এবং প্যারামিটার স্টোরটি ব্যবহার করতে চাই না। সিক্রেটস ম্যানেজারের সাথেও কি একই জিনিস করা সম্ভব?
red888

3

.Tf ফাইলগুলিতে গোপনীয়তা আমদানি করতে আপনি বাহ্যিক ডেটা উত্সও ব্যবহার করতে পারেন । এটি যেমন একটি স্ক্রিপ্ট হতে পারে যা আপনার গোপনীয়তাগুলি ডিক্রিপ্ট করে।


2

আমি কয়েকটি ভিন্ন উপায়ে দেখেছি তবে ভল্টের মতো আরও বড় কিছু বাস্তবায়নের আগে অ্যাডহক জিনিসটি করার জন্য আমি বিশেষত গিট-ক্রিপ্ট পছন্দ করি।


2
কারা কমেছে, তা দয়া করে ব্যাখ্যা করুন।
jottr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.