iam 역할 계정으로 amazon ses smtp 서비스를 통해 이메일을 보낼 수 있습니까?


10

다음 정책이 첨부 된 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 -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 역할 자격 증명으로는 허용되지 않으며, 사실 인 경우에는 절실합니다. 상자의 프로세스가 로컬 호스트로 메일을 보내고 SES 서비스로 라우팅 할 수 있도록 Postfix 구성을 생성 할 계획이었습니다. 서버에 IAM 사용자 자격 증명을 넣지 않으려 고했습니다. 그러나 지금 그것을 피할 수있는 방법이 없을 것 같습니다.

이견있는 사람?


1
나는 똑같은 것을 시도했고 같은 결론에 도달했습니다. 현재 SES SMTP에 IAM 역할 자격 증명을 사용할 수없는 것 같습니다.
Christian

답변:



1

사용자에게 다음 권한을 부여 할 수 있습니다. 이미 와일드 카드를 사용했기 때문에 중복 된 것처럼 보이지만 다음 정책은 여기에서 작동하고 (postfix와 함께) AWS에서 생성합니다.

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

-1

왜 가장 간단한 것부터 시작하지 않습니까?

{
    "Version": "2012-10-17",
    "Statement":[{
       "Effect": "Allow",
       "Action": ["ses:*"],
       "Resource":"*"
       }
    ]
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.