निम्नलिखित नीति के साथ मेरी IAM भूमिका है:
{
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
जैसा कि आप देख सकते हैं, पूर्ण पहुंच दी गई है।
मैं ITP क्रेडेंशियल्स को SMTP क्रेडेंशियल्स में परिवर्तित करने के लिए निम्नलिखित अजगर का उपयोग करता हूं:
#!/usr/bin/env python
from __future__ import print_function
import base64
import hashlib
import hmac
import json
import struct
import urllib2
METADATA_BASE = 'http://169.254.169.254/2012-01-12/meta-data'
def main():
access_key_id, secret_access_key = get_access_creds()
username, password = get_smtp_creds(access_key_id, secret_access_key)
print('SMTP Username: %s' % username)
print('SMTP Password: %s' % password)
def get_access_creds():
url_handle = urllib2.urlopen('%s/iam/security-credentials' %
(METADATA_BASE,))
role_name = url_handle.read()
url_handle.close()
url_handle = urllib2.urlopen('%s/iam/security-credentials/%s' %
(METADATA_BASE, role_name))
sec_cred_doc = url_handle.read()
url_handle.close()
sec_cred_data = json.loads(sec_cred_doc)
access_key_id = buffer(sec_cred_data['AccessKeyId'])
secret_access_key = buffer(sec_cred_data['SecretAccessKey'])
return access_key_id, secret_access_key
def get_smtp_creds(access_key_id, secret_access_key):
message = 'SendRawEmail'
version = 0x02
sig= hmac.new(
secret_access_key,
msg=message,
digestmod=hashlib.sha256)
sig_bytes = sig.digest()
sig_and_version_bytes = (struct.pack('B', version) + sig_bytes)
smtp_password = base64.b64encode(sig_and_version_bytes)
return access_key_id, smtp_password
if __name__ == '__main__':
main()
जब मैं इस कोड को चलाता हूं, तो कुछ SMTP उपयोगकर्ता नाम और पासवर्ड आउटपुट होते हैं। जब मैं कहता हूं कि स्वाक्स के साथ संदेश भेजने की कोशिश की जाती है, उदाहरण के लिए, यह विफल रहता है। यहाँ एक उदाहरण कमांड लाइन है:
swaks -s email-smtp.us-east-1.amazonaws.com --from wt@example.com --to wt@example.com --auth-user <smtp username from script above> --auth-password <smtp password from script above> --tls
Example.com, निश्चित रूप से, एक प्लेसहोल्डर है। वास्तविक डोमेन को मेरे AWS SES खाते पर सत्यापित किया गया है।
वास्तव में, अगर मैं मेटा-डेटा से भूमिका क्रेडेंशियल्स की खोज करने के बजाय एक IAM उपयोगकर्ता से कन्वर्ट करने के लिए समान कोड चलाता हूं, तो मैं ईमेल और पासवर्ड का उपयोग करके ईमेल को ठीक कर सकता हूं।
AFAICT, यह सिर्फ IAM भूमिका क्रेडेंशियल्स के साथ अनुमति नहीं है, जो कि अगर यह सच है तो लंगड़ा है। मैं एक पोस्टफ़िक्स कॉन्फिगरेशन जनरेट करने की योजना बना रहा था ताकि लोकलहोस्ट को मेल भेजा जा सके और एसईएस सर्विस को रूट कर दिया जाए। मैं सर्वर पर IAM उपयोगकर्ता क्रेडेंशियल डालने से बचने की कोशिश कर रहा था। हालाँकि, ऐसा लग रहा है कि अब इससे बचने का कोई तरीका नहीं हो सकता है।
कोई विचार?