ফাইলগুলিতে শংসাপত্রগুলি এড়ানোর সময় আমি কীভাবে উত্তরযোগ্য অ্যাজুর প্লেবুকগুলি চালাব?


13

পটভূমি

  1. আমরা অ্যাজুর অবকাঠামো সরবরাহ এবং পরিচালনা করতে জবাবদিহি ব্যবহার করি। এই মুহুর্তে আমরা আনসিবল "ম্যানুয়ালি" চালাচ্ছি অর্থাৎ আমরা বিভিন্ন স্বয়ংক্রিয় কাজের জন্য ম্যানুয়ালি প্লেবুকগুলি চালিত করি । কোনও সিআই অবকাঠামো নেই।
  2. সম্ভবত প্রাসঙ্গিক নয় তবে আমরা গতিশীল স্ক্রিপ্ট ব্যবহার করে আমাদের তালিকা পরিচালনা করি azure_rm.py
  3. আমরা যথাসাধ্য নিরাপদ হতে উত্সাহিত হয়
    1. ~/.vault_passকোনও স্থানীয় ফাইলে বা ভল্ট পাসওয়ার্ড সংরক্ষণ করবেন না
    2. অ্যাজুরে সিক্রেটগুলিতে সংরক্ষণ করবেন না ~/.azure/credentials
    3. কোনও সুরক্ষিত জিনিস সংরক্ষণ করবেন না .bashrc

এই ধরনের পরিস্থিতিতে, আমার প্লেবুকগুলি উপরের নির্দেশিকাগুলি অনুসরণ করার সাথে সাথে আমার প্লেবুকগুলি অ্যাজুরে সিক্রেটস অ্যাক্সেস করতে পারে তা নিশ্চিত করার জন্য একটি সুসংগত কৌশল নিয়ে আসতে সমস্যা হচ্ছে।

প্রশ্ন

আমার প্লেবুকগুলি সেগুলি অ্যাক্সেস করতে পারে তা নিশ্চিত করার পরে আমি কীভাবে ফাইলগুলিতে উত্তরযোগ্য ভল্ট এবং অ্যাজুরি শংসাপত্রগুলি সংরক্ষণ করতে পারি?

আমি কি চেষ্টা করেছি

এখন পর্যন্ত আমি একটি মোড়ক স্ক্রিপ্ট নিয়ে এসেছি

  1. ব্যবহারকারীকে ভল্টের পাসওয়ার্ডের জন্য জিজ্ঞাসা করে
  2. একটি ভোল্টেড শেল স্ক্রিপ্ট ডিক্রিপ্ট করার জন্য এটি ব্যবহার করে
  3. স্ক্রিপ্টটি মূল্যায়ন করে, যা পরিবেশে অ্যাজুরি এনভায়রনমেন্ট ভেরিয়েবল লোড করে;
  4. এইভাবে সেট করা পরিবেশের উপর প্লেবুক চালায়।

এর চেয়ে আরও ভাল (আরও মার্জিত, কম জটিল, আরও "উত্তরযোগ্য") সমাধান?


এই কর্মপ্রবাহে আপনাকে সবচেয়ে বেশি বিরক্ত করে কী?
কনস্ট্যান্টিন সুভোরভ

1
@ কনস্টান্টিনসোভরভ মূলত এটি সম্মতি-ভারী উদ্যোগের জন্য মোটামুটি সাধারণ প্রয়োজন (যা আমার কাছে কমপক্ষে) মনে হয় তা অর্জন করার জন্য আমাকে যে পরিমাণ হুপ লাগাতে হবে তা হ'ল।
বিশ

উত্তর:


8

ভল্টের পাসওয়ার্ড

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

উদাহরণস্বরূপ আপনি ব্যবহার করতে পারেন gpg-agentবা keychainআপনার প্রকৃত পাসওয়ার্ড সংরক্ষণ করতে এবং যখন প্রয়োজন হয় তখন এটি আনলক করতে পারেন। এই ব্লগ পোস্টে আরও পড়ুন: https://benincosa.com/?p=3235

আপনি যদি কিছুটা ভৌতিক হয়ে থাকেন তবে আপনার পাসওয়ার্ড স্ক্রিপ্টটি কল করার সময় আপনি বিজ্ঞপ্তিটি যুক্ত করতে পারেন, এর মতো:

#!/bin/bash
PARENT_PROCESS=$(ps -p $PPID -o args | tail -n 1)
osascript -e "display notification \"Vault password used by ${PARENT_PROCESS}\" with title \"Ansible\" sound name \"default\""
gpg --batch --use-agent --no-tty --decrypt key.gpg 2>/dev/null

এই ভল্ট পাসওয়ার্ড স্ক্রিপ্টটি key.gpgপ্রকৃত ভল্ট কী হিসাবে ব্যবহার করে এবং স্ক্রিপ্ট ব্যবহৃত হয় যখন প্যারেন্ট প্রসেসের নাম সহ পপআপ বিজ্ঞপ্তি (ম্যাকোএসের জন্য) দেখায়। জিপিজি-এজেন্ট কিছু সময়ের জন্য পাসওয়ার্ড আনলক করে, তাই প্রতিবার আপনি প্লেবুক শুরু করার সময় পাসওয়ার্ড প্রবেশ করার দরকার নেই।

শুধু vault_password_file = ./vault_pass.shআপনার মধ্যে সেট করুন ansible.cfg

পরিবেশ

আপনি বলেছিলেন যে আপনি azure_rm.pyগতিশীল ইনভেন্টরি স্ক্রিপ্ট হিসাবে ব্যবহার করেন। এর অর্থ হল যে আপনি উত্তর-প্লেবুক ব্যবহার করতে সক্ষম হওয়ার জন্য আপনার পরিবেশ ভেরিয়েবলগুলিতে শংসাপত্রগুলি সেট করতে হবে।

আপনি দুটি ফাইল তৈরি করতে পারেন:

secure_env (ভল্ট সহ এনক্রিপ্ট করা):

export AZURE_SECRET=xxx;export AZURE_SUBSCRIPTION_ID=xxx;

set_env (সরল পাঠ্য):

echo -n "Setting secure vars... "
eval $(ansible-vault view secure_env)
echo "done."

আপনি যখন নিজের অটোমেশন কার্য সম্পাদন করতে নতুন টার্মিনাল খুলেন, আপনাকে চালাতে হবে:

source set_env

এই মুহুর্তে, বাশ মূল্যায়ন করে set_envএবং secure_env(উত্তরযোগ্য-ভল্টের মাধ্যমে ডিক্রিপ্ট)। এই কমান্ডের পরে আপনার বর্তমান শেলের জন্য অ্যাজুরে শংসাপত্রগুলি সংজ্ঞায়িত করা হয়েছে, সুতরাং আপনি যথারীতি প্লেবুকগুলি সম্পাদন করতে পারেন:

ansible-playbook provision-my-azure-instances.yml

সুতরাং এই দুটি পদ্ধতির ব্যবহার করে আপনি সঞ্চয় করতে পারেন key.gpgএবং secure_envআপনার সংগ্রহস্থলে রাখতে পারেন; তারপরে source set_envএকবার নতুন টার্মিনালে কল করুন, একবার জিপিজি পাসওয়ার্ড লিখুন (কী-পিপিগির ভবিষ্যতে ব্যবহার আনলক করতে); তারপরে ansible-playbookকোনও পাসওয়ার্ড ছাড়াই আপনি যতবার কল করুন ।


উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। আমাকে সপ্তাহে চেষ্টা করে দেখতে দিন।
বিশ

সুতরাং আমার আসল পদ্ধতির উপরে প্রধান সুবিধাটি হ'ল এটি জিপিজি ব্যবহার করে - যা ক্যাশেগ সুবিধা উপস্থাপন করে --- তাই না? পরিবেশের পদ্ধতির সাথে আমি যা এসেছি তার অনুরূপ।
বিশ

1
আপনার ওপি থেকে আমি বুঝতে পারি যে আপনি প্লেবুক চালানোর সময় প্রতিবার মোড়ক ব্যবহার করেন। সঙ্গে sourceপদ্ধতির আপনি টার্মিনাল সেশন প্রতি একবার পরিবেশ সেট এবং আলাদাভাবে সরঞ্জামের সব পরিসীমা ব্যবহার করতে পারেন:, ansible-playbooks, জায় স্ক্রিপ্ট, আকাশী নীল CLI কোনো চাদরে ছাড়া।
কনস্ট্যান্টিন সুভেরভ

আহ, বুঝেছি। আমার দলে এইটা খুব খারাপ। আপনার উত্তরটিকে আরও সুবিধাজনক সমাধান হিসাবে গ্রহণ করা। গবেষণা এবং ব্যাখ্যা জন্য ধন্যবাদ! এছাড়াও, আমি আপনার ব্লগটি পছন্দ করেছি :)
বিশ

জিপিজি (বা ম্যাকস বা লিনাক্সে একটি কীচেন) ব্যবহারের প্রধান সুবিধা হ'ল প্রতিটি দলের সদস্যের কাছে অনন্য একটি ব্যক্তিগত কী আনলক করার জন্য নিজস্ব স্বীকৃতি রয়েছে। এই কীটি তখন আনসিবল্ট ভল্ট পাসওয়ার্ড আনলক করতে ব্যবহৃত হয় যা একটি ভাগ করা গোপনীয়তা। আনসিবল ভল্টের পাসওয়ার্ড সহ যদি কেউ যেভাবেই দল ছেড়ে দেয় তবে আপনাকে আপনার সমস্ত গোপনীয়তা ঘুরিয়ে দিতে হবে, তবে কমপক্ষে জিপিজি / কীচেন পাসওয়ার্ড পরিবর্তন করতে হবে না।
রিচভেল

2

উত্তরযোগ্য ২.৪ জন যেহেতু ব্যবহার করতে পারে তাই দয়া করে https://docs.ansible.com/ansible/2.4/vault.html পড়ুন --vault-id @prompt

উত্তর-ভল্ট ব্যবহার করে একটি ফাইল এনক্রিপ্ট করুন:

ansible-vault encrypt /path/to/encrypted/file

প্লেবুক চালান এবং এর ফলস্বরূপ:

fatal: [localhost]: FAILED! => {"msg": "A vault password or secret must be
specified to decrypt /path/to/encrypted/file"}

ফাইলগুলি ডিক্রিপ্ট করার একাধিক বিকল্প রয়েছে যার মধ্যে রয়েছে @prompt:

ansible-playbook some-playbook --vault-id @prompt

অনুরোধ করবে:

Vault password (default):

ভল্টের পাসওয়ার্ড প্রবেশ করানো হয়ে গেলে প্লেবুকটি সফল হওয়া উচিত।


1
পৃষ্ঠাটি পড়ার মতো দেখে মনে হচ্ছে সেখানে কোনও সমাধান রয়েছে তবে কেবলমাত্র লিঙ্কটি ব্যবহার করে তা বের করতে অক্ষম। আপনি দয়া করে বিস্তারিত বলতে পারেন?
বিশ

বিশদ দেওয়ার জন্য আপনাকে ধন্যবাদ। পুরানো --ask-vault-passবিকল্পটি ব্যবহার করে - আমি অবশ্যই ভল্টের পাসওয়ার্ডের জন্য ব্যবহারকারীকে জিজ্ঞাসা করতে চাই । এবং এটির পরিবর্তে কীভাবে --vault-idআরও ভাল কর্মপ্রবাহের বড় প্রশ্নের উত্তর দেওয়া যায় তা আমি বুঝতে ব্যর্থ ।
বিশ

যখন তুমি আমাকে লিংক উল্লেখ করা আমি হয়নি এক কুচুটে বিকল্প দেখুন: ansible-playbook --vault-id my-vault-password.py। আমি ভেবেছিলাম সম্ভবত পাইথন স্ক্রিপ্টটি ব্যবহার করে আপনার সমাধান হয়েছে :) আমিও এটিকে ঘিরে কিছু চিন্তাভাবনা করছি।
বিশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.