Bir iam role hesabı ile amazon ses smtp servisi aracılığıyla e-posta göndermek mümkün müdür?


10

Aşağıdaki politika eklenmiş bir IAM rolüm var:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}

Gördüğünüz gibi tam erişim izni var.

IAM kimlik bilgilerini SMTP kimlik bilgilerine dönüştürmek için aşağıdaki python'u kullanıyorum:

#!/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()

Bu kodu çalıştırdığımda, bazı SMTP kullanıcı adı ve şifresi çıkar. Örneğin, swaks yazanlarla mesaj göndermeye çalıştığımda başarısız oluyor. Örnek bir komut satırı:

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

Örnek.com, elbette, bir yer tutucudur. Gerçek alan adı AWS SES hesabımda doğrulandı.

Aslında, aynı verileri meta verilerden rol kimlik bilgilerini keşfetmek yerine bir IAM kullanıcısından dönüştürmek için çalıştırırsam, e-posta göndermek için kullanıcı adını ve şifreyi kullanabilirim.

AFAICT, buna IAM rol kimlik bilgileriyle izin verilmiyor, bu doğruysa topal. Kutusundaki işlemlerin localhost'a posta göndermesine ve SES hizmetine yönlendirilmesine izin vermek için bir Postfix yapılandırması oluşturmayı planlıyordum. Sunuculara IAM kullanıcı kimlik bilgilerini koymaktan kaçınmaya çalışıyordum. Ancak, şimdi bundan kaçınmanın bir yolu olmayabilir.

Düşüncesi olan var mı?


1
Aynı şeyi denedim ve aynı sonuca vardım. Şu anda SES SMTP için IAM Rol Kimlik Bilgilerini kullanmak mümkün görünmüyor.
Christian

Yanıtlar:



1

Kullanıcılarınıza aşağıdaki izinleri vermeye çalışabilirsiniz. Zaten joker karakterler kullandığınız için gereksiz görünüyor, ancak aşağıdaki politika burada (postfix ile de) çalışıyor ve AWS tarafından üretiliyor.

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

-1

Neden en basit olanla başlamıyorsun?

{
    "Version": "2012-10-17",
    "Statement":[{
       "Effect": "Allow",
       "Action": ["ses:*"],
       "Resource":"*"
       }
    ]
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.