সমস্যা: পাইথনে boto3 লাইব্রেরি ব্যবহার করে AWS Secret Manager-এ থাকা বাইনারি/এনক্রিপ্টেড ফরম্যাট থেকে সিক্রেট কী প্লেইন টেক্সট হিসেবে পাওয়া।
পদ্ধতি/অ্যালগরিদম
ধাপ ১: boto3 এবং botocore এক্সেপশন ইম্পোর্ট করুন এক্সেপশন হ্যান্ডল করার জন্য।
ধাপ ২: secret_stored_location আবশ্যিক প্যারামিটার। এটি সিক্রেট সংরক্ষণের জায়গা।
ধাপ ৩: boto3 লাইব্রেরি ব্যবহার করে AWS সেশন তৈরি করুন। নিশ্চিত করুন region_name ডিফল্ট প্রোফাইলে আছে। না থাকলে সেশন তৈরি করার সময় সিদ্ধা region_name পাস করুন।
ধাপ ৪: secretmanager-এর জন্য AWS ক্লায়েন্ট তৈরি করুন।
ধাপ ৫: get_secret_value কল করুন এবং secret_stored_location কে SecretId হিসেবে পাস করুন।
ধাপ ৬: যাচাই করুন এটি প্লেইন টেক্সট কিনা অথবা এনক্রিপ্টেড।
ধাপ ৭: যদি এনক্রিপ্টেড হয়, তবে base64.b64decode ব্যবহার করে বাইনারি মান ডিকোড করার ফাংশন কল করুন।
ধাপ ৮: এটি প্রদত্ত লোকেশনের সকল সিক্রেট ডিক্রিপ্ট করা মোডে, অর্থাৎ প্লেইন টেক্সট হিসেবে রিটার্ন করে।
ধাপ ৯: মান রিট্রিভ করার সময় যদি কোনো সমস্যা হয় তবে জেনেরিক এক্সেপশন হ্যান্ডল করুন।
উদাহরণ কোড
AWS Secret Manager-এ থেকে ডিক্রিপ্ট করা প্লেইন টেক্সট সিক্রেট পেতে নিচের কোডটি ব্যবহার করুন:
import boto3
import base64
from botocore.exceptions import ClientError
def get_decrypted_secret_details(secret_stored_location):
session = boto3.session.Session()
s3_client = session.client('secretmanager')
try:
response = s3_client.get_secret_value(SecretId=secret_stored_location)
if not ('SecretString' in response):
decoded_secret_values = base64.b64decode(response['SecretBinary'])
return decoded_secret_values
return response['SecretString']
except ClientError as e:
raise Exception("boto3 client error in get_decrypted_secret_details: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_decrypted_secret_details: " + e.__str__())
a = get_decrypted_secret_details('/secrets/aws')
print(a)আউটপুট
{"user":"SERVICE_USER","accesskey":"I**************"}