समस्या कथन: AWS Secrets Manager में मौजूद बाइनरी/एन्क्रिप्टेड प्रारूप से सीक्रेट कुंजियों को प्लेन टेक्स्ट के रूप में प्राप्त करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।
समस्या हल करने का दृष्टिकोण/एल्गोरिदम
चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।
चरण 2: secret_stored_location आवश्यक पैरामीटर है। यह वह स्थान है जहां सीक्रेट्स सहेजे गए हैं।
चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं। सुनिश्चित करें कि डिफ़ॉल्ट प्रोफ़ाइल में region_name उल्लिखित है। यदि नहीं, तो सत्र बनाते समय स्पष्ट रूप से region_name पास करें।
चरण 4: secretmanager के लिए AWS क्लाइंट बनाएं।
चरण 5: get_secret_value कॉल करें और secret_stored_location को SecretId के रूप में पास करें।
चरण 6: जांचें कि यह प्लेन टेक्स्ट है या एन्क्रिप्टेड।
चरण 7: यदि यह एन्क्रिप्टेड है, तो base64.b64decode का उपयोग करके बाइनरी मानों को डीकोड करने के लिए फ़ंक्शन कॉल करें।
चरण 8: यह दिए गए स्थान पर सभी सीक्रेट्स को डिक्रिप्टेड मोड में, यानी प्लेन टेक्स्ट में लौटाता है।
चरण 9: मान प्राप्त करते समय यदि कुछ गलत होता है तो सामान्य एक्सेप्शन को संभालें।
उदाहरण कोड
AWS Secrets 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 'SecretString' not in response:
decoded_secret_values = base64.b64decode(response['SecretBinary'])
return decoded_secret_values
else:
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**************"}
महत्वपूर्ण सुधार और स्पष्टीकरण
मूल कोड में त्रुटि:
base64मॉड्यूल आयात नहीं किया गया था। उपरोक्त कोड में इसे जोड़ा गया है।लॉजिक सुधार: मूल कोड में यदि SecretString मौजूद है तो कुछ नहीं लौटाता था। उपरोक्त कोड दोनों मामलों को संभालता है।
Secrets Manager स्वचालित रूप से एन्क्रिप्शन/डिक्रिप्शन संभालता है।
SecretStringप्लेनटेक्स्ट के लिए औरSecretBinaryबाइनरी डेटा के लिए उपयोग किया जाता है।यदि
SecretBinaryमौजूद है, तो यह base64-एन्कोडेड बाइनरी डेटा होता है जिसे डिकोड करने की आवश्यकता होती है।
IAM अनुमति
secretsmanager:GetSecretValue अनुमति आवश्यक है। KMS डिक्रिप्शन के लिए kms:Decrypt भी आवश्यक हो सकता है यदि कस्टम KMS कुंजी उपयोग की गई है।