ฉันมีบทบาท IAM พร้อมแนบนโยบายต่อไปนี้:
{
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
อย่างที่คุณเห็นสิทธิ์การเข้าถึงแบบเต็มจะได้รับ
ฉันใช้ไพ ธ อนต่อไปนี้เพื่อรับการแปลงข้อมูลประจำตัวของ IAM เป็นข้อมูลรับรอง 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 มันล้มเหลว นี่คือตัวอย่างบรรทัดคำสั่ง:
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
ตัวอย่างแน่นอนว่าเป็นตัวยึดตำแหน่ง โดเมนจริงได้รับการยืนยันในบัญชี AWS SES ของฉัน
ในความเป็นจริงถ้าฉันเรียกใช้รหัสเดียวกันเพื่อแปลงจากผู้ใช้ IAM แทนที่จะค้นหาข้อมูลประจำตัวบทบาทจาก meta-data ฉันสามารถใช้ชื่อผู้ใช้และรหัสผ่านเพื่อส่งอีเมลได้
AFAICT สิ่งนี้ไม่ได้รับอนุญาตให้ใช้กับข้อมูลประจำตัวของบทบาทของ IAM ซึ่งจะเป็นประโยชน์หากเป็นจริง ฉันวางแผนที่จะสร้างการตั้งค่า Postfix เพื่อให้กระบวนการในกล่องส่งเมลไปยัง localhost และกำหนดเส้นทางนั้นไปยังบริการ SES ฉันพยายามหลีกเลี่ยงการใส่ข้อมูลประจำตัวผู้ใช้ของ IAM บนเซิร์ฟเวอร์ อย่างไรก็ตามดูเหมือนว่าอาจไม่มีวิธีการหลีกเลี่ยงในตอนนี้
ความคิดใด ๆ