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ı?