क्या iam भूमिका खाते के साथ amazon ses smtp सेवा के माध्यम से ईमेल भेजना संभव है?


10

निम्नलिखित नीति के साथ मेरी 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 उपयोगकर्ता क्रेडेंशियल डालने से बचने की कोशिश कर रहा था। हालाँकि, ऐसा लग रहा है कि अब इससे बचने का कोई तरीका नहीं हो सकता है।

कोई विचार?


1
मैंने एक ही चीज की कोशिश की है और उसी निष्कर्ष पर आया हूं। ऐसा लगता है कि वर्तमान में SES SMTP के लिए IAM रोल क्रेडेंशियल्स का उपयोग करना संभव नहीं है।
क्रिश्चियन

जवाबों:



1

आप अपने उपयोगकर्ता को निम्नलिखित अनुमति देने का प्रयास कर सकते हैं। यह बेमानी लगता है क्योंकि आप पहले से ही वाइल्डकार्ड का उपयोग कर चुके हैं, लेकिन निम्न नीति यहां (पोस्टफिक्स के साथ भी) काम करती है और एडब्ल्यूएस द्वारा उत्पन्न की जाती है।

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ses:SendRawEmail",
      "Resource": "*"
    }
  ]
}

-1

आप सबसे सरल के साथ शुरुआत क्यों नहीं करते?

{
    "Version": "2012-10-17",
    "Statement":[{
       "Effect": "Allow",
       "Action": ["ses:*"],
       "Resource":"*"
       }
    ]
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.