1日1%成長する ~AWS SES~

AWSの学習メモ

AWS SES

バウンス
    SMTPセッション時エラー
        送信元のMTAがエンベロープの発信者メールアドレスにエラーメール
    SMTPセッション以外
        送信先のMTAがエンベロープの発信者メールアドレスにエラーメール

    エラー発生時にユーザが以内など恒久的なエラー => バウンス

SES以外
    メリット
        - 慣れたMTAの既存のノウハウをい返せる
        - 宛先ISPの送信ルールの適用が柔軟に自分たちで出来る
    デメリット
        - 全て構築しなければならない
        - Email送信のための制限解除やDNS逆引きなどAWSに申請が必要

    EC2で構築
        - MTAのホスト名とEIP用意
        - ポート25制限解除とDNS逆引き登録申請
        - メール関連のDNS設定
            - SPFDKIM、MXレコード
        - バウンス処理

    メールボックスシュミレーターなるものがある

Bounce処理は重要。
受けてのSPAM扱いにならないように相手先の注意事項の確認と検証は必ずする

メール受信
    ※一般的なメールボックスは無い

    - S3バケットへのメール配信
    - SNSトピックへのメール公開
    - Lambdaを使ったカスタムレコード
    - バウンスアクション
    - 受信ルールセットの評価停止
    - ヘッダーの追加
    - Amazon WorkMailアクション

IPアドレスフィルタ
    1つでも設定すると   
        - EC2のIPアドレスから送信されるメールをブロックする
        - EC2のIPアドレスから受信する場合は許可指定する


メール送信のお作法や受信側の迷惑にならないようにする。
    - 最悪利用停止も考えられる
        - BounceやComplaint(受信者が拒否)の処理を行うこと
        - Spam判定とされるメールは送らない
        - docomo等のメールフィルタは非公開だけど注意事項は出てるので確認すること
    

1日1%成長する ~AWS SES~

AWSの学習メモ

AWS SES

Suppression List機能
    ハードバウンスしたEmailアドレスが登録される
        - 一度登録されると14日残る
        - アカウントを超えて共有される
        - SESへのCallは成功するが外のSMTPへは通信しない
    機能
        バウンスをお越し続けることで送信元ドメインやSESのIPアドレスプールの評判が落ちないようにする

コンテンツフィルタ
    ISPSpamとみなされないか。
    ウイルスやマルウェアは事前に防ぐ

送信元認証
    SPF:送信元IPアドレスに基づく認証
        SESからはamazonses.comが使用される
        MAIL FROMドメインが送信元メールサーバのSESと一致するため認証合格する。
    DKIM:送信元による署名に基づく認証
        SESでメールヘッダに「DKIM-Signature:s=xxx; d=example.com」みたいなものがつく
        宛先MTAでxxx._domainkey.example.comの検証をDNSへ行う
        公開鍵先DNSを応答するので取得して認証する。
    DMARC:DNS上で認証失敗時の挙動をポリシーというレコードで公開
        1. SPFチェックの合格
        2. DKIM署名

送信元以外の信頼
    専用IP
        上限緩和申請で取得できる
            -> 理由などが必要
            -> また取得後は共有IPから徐々に移行していく
        ホワイトリスト利用
    共有IP
        AWSで管理評価してくれる
            -> 例えばIPが汚れないようになる

1日1%成長する ~AWS SES~

AWSの学習メモ

AWS SES

    概要:
        - コスト効率の高いクラウドベースのEメール
        - イベントをトリガーにメール通知
        - S3バケットに対して配信可能
        - バージニアオレゴンアイルランドで利用可能

    ユースケース
        - トランザクションメッセージ送信
            - 購入、出荷、注文状況、ポリシー変更とか
        - マーケティングコミュニケーションの送信
            - 広告、ニュースレター、特典情報、顧客が希望する製品やサービス
        - 通知の送信
            - システムヘルスレポート、アプリケーションアラート、ワークフローステータス
        - 受信Eメールの受信
            - S3バケットに自動的に配信してカスタムコードの実行やSNSで通知

    メール送信
        1. コンソールを利用したメール送信
            システム・セットアップやテスト時
        2. APIを利用
            SendEmail API: from、to、subject、bodyだけを用意すれば送信可能
            SendRawEmail API: メッセージ全体をアプリケーション側で生成して送信
                IAMユーザ、グループ、ロールで実行できるSES APIアクションを指定
        3. SMTPインターフェイスを利用
            - port: 25/465(smtp over ssl)/587(Message submission)
            - TLS必須(Transport Layer Security)
            - 要認証
                認証には専用IAMユーザを作成してクレデンシャルを使用

        SMTPエンドポイントを利用する
            ※デフォルトではEC2から外向きTCP25番ポートは制限対象
                spamのリレー防止
                誤ったspam送信から利用者を守る

    SESと配送先サービスプロバイダの対応
        - 24時間あたりに送信できるEメールの最大数
        - 1秒あたりにアカウントから受け付けるEメールの最大数
            ※制限を超えることは可能だが超えた状態をキープはできない

            SES HTTP REST APIで送信
                -> Daily message quota exceeded:1日分の制限超え
                -> Maximum sending rate exceeded:1秒の制限超え
            SMTPで送信
                -> 454 Throttling failure: Maximum sending rate exceeded
                -> 454 throttling failure: Daily message quota exceeded

        自動的に引き上げる
            - 質の高いコンテンツを送信
            - 実際の本稼働のコンテンツを送信
            - 現在のクォーターに近い送信ボリュームを維持
            - バウンスと苦情を低く抑える

    追跡機能
        オープントラッキング
            1ピクセルx1ピクセルの透明GIF画像ファイルへの固有リンクが挿入されている
        クリックトラッキング
            Eメール内の各リンクを固有のリダイレクトリンクに置き換えている

            イベントトラッキングで可能

    テンプレート
        - アカウント毎に10000まで

1日1%成長する ~AWS Lambda4~

AWSの学習メモ

AWS Lambda4

続き

依存関係のバリデーション
    3rdパーティーのライブラリも脆弱性を含んでいる
    デプロイ前に依存ライブラリの脆弱性スキャンが良い

    CI/CDの一環で
        - OWASP
        - Snyk
        - Twistlock

ユースケース
    王道
        [API gatewary]-[Lambda]-[Dynamodb]
    リアルタイム、非同期通信
        [AWS Appsync]-[Lambda]-[Dyanmodb]
    内部データの公開ルートAPI化
        [API gateway]-[VPC]-[Lambda]-[RDS]
    WebSocketでのリアルタイム
        [API gateway(websocket)]-[Lambda]-[Dynamodb or RDS]

    データ投入をきっかけにファイルを引き渡して処理
        [S3]-[Lambda]-[S3]
    次の処理のためのタスクキュー
        [処理]-[SNS]-[SQS]-[Lambda]-[処理]
    並列処理(MapReduceっぽい)
        [S3]-|-[Lambda]-|
             |-[Lambda]-|-[S3]
             |-[Lambda]-|

    データイベント処理
        [kinesis data stream]-[Lambda]-[S3]
    チャットボット
        [Alexa...etc]-[Lambda]-[リソース]
    IoTバックエンド
        [AWS Iot Core]-[Lambda]-[Dynamodb]
    データ変更トリガー
        [Dynamodb stream]-[Lambda]-[RDS or 外部コール...etc]

    ログデータ収集
        [Lambda]-[Kinesis firehose]-[S3]
    機械学習/データパイプライン
        [Lambda]-[SageMaker]
    データレイクのデータを加工処理
        [S3]-[Lambda]-[Glue or Athena]-[RedShift]
    スケジュール/ジョブ
        [cloudwatch]-[Lambda]

1日1%成長する ~AWS Lambda4~

AWSの学習メモ

AWS Lambda4

続き

非同期う呼び出し(event)
    - SQSにキューイング
    - 内部的にpollerプロセスがメッセージを取得してLambda実行
    - パス上のトラフィックTLS

ランタイム
    - AWSが責任
    - カスタマイズランタイムの場合はユーザの責任

Lambda関数のAudit
    - CloudTrail
        - AWS Lambdaを含むAWSアカウント全体の統制、コンプライアンス、オペレーション監査、リスク監査
    - Config
        - Lambda関数、ランタイム、タグ、ハンドラ名、コードサイズ、メモリ割当
         タイムアウト設定、同時実行数の設定に対する設定変更や削除を追跡

Lambdaのコンプライアンス
    - AICPA SOC
    - ISO 27001
    - ISO 9001
    - PCI DSS
    - FedRAMP
    - HIPAA

セキュアポイント
    - パッチが適用されていないサーバは存在しない
    - SSH不要
    - すべてのリクエストは認可されて監査可能
    - Lambdaは短命
    - 利用する各言語のベストプラクティスに沿う
    - 最低限必要な権限はCloudWatchLogsへの出力権限
    - 必要最小限のアクション許可
    - 1つのIAMロール
    - 認証情報はハードコーディングしない
        - 環境変数
        - KMS
        - Systems Manager

1日1%成長する ~AWS Lambda4~

AWSの学習メモ

AWS Lambda 4

サーバレスセキュリティ
    AWSの提供するコンポーネントについてはAWSのセキュリティに対する考え方、
    取り組みがその根底にある

AWSにとってセキュリティは最優先事項!
    Security of the cloud(AWSのセキュリティ)
        - 場所秘匿
        - 周囲の厳重なセキュリティ
        - 24時間常駐の専門保安要員による物理アクセスコントロール
        - 完全管理された必要性に基づくアクセス
        - 2要素認証以上
        - すべてのアクセスは記録されて監査対象
        - DDos,中間車攻撃対策、IPなりすまし
        - AWSの雇用
            - 従業員は犯罪歴確認
            - amazonリーガルによる機密保持契約
        - アカウント管理
            - 最小限のアクセス適用
            - 少なくとも4半期ごとにアカウント確認
            - 90日間アクティビティがないアカウントの自動的無効化
        - データセキュリティ
            - 法令遵守または政府機関の養成で止む得ない場合を除いて移動、開示はない
            - DoD 5220.22-M(国立産業セキュリティプログラム作業マニュアル)
            - NIST 800-88(メディア衛生のためのガイドライン)

データプレーンとMircoVM
    各関数は1個以上の専用実行環境
    -> MircoVM上で実行される
        -> Lambda workerの上でMicroVMは実行される
        https://www.google.com/search?q=MicroVM+Lambda+worker&sxsrf=ACYBGNRaMd8W-a92FEsByEaMoBKITExLqQ:1573568998771&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjA5c2p8eTlAhWKHqYKHQ2CBSUQ_AUIEigB&biw=1680&bih=844&dpr=2#imgrc=tN3nQHHwW5B4_M

    -> Linuxカーネルベースのコンテナテクノロジーで隔離されて実行される
        - cgroup
            - cpu、メモリ...etcのリソースアクセス制限
        - namespace
            - プロセスID、ユーザID...etcのグルーピング
        - seccomp-bpf
            - syscallの制限
        - iptables/routing tables
            - 実行環境の互いを隔離
        - chroot
            - ファイルシステムのアクセス範囲制限

    -> AWSアカウント間でMicroVMの再利用はない
        - EC2インスタンスモデルからfirecracker(MicroVM向けのハイパーバイザー)へ

1日1%成長する ~AWS Step Functions~

AWSの学習メモ

state抜粋

{
    "StartAt": "Parallel",
    "States": {
        "Parallel": {
            "Type": "Parallel",
            "End": true,
            ~
            "Catch": [{
                "ErrorEquals": ["States.ALL"],
                "Next": "Fallback",
                "ResultPath": "$.error"
            }]
        },
        "Fallback": {
            "Type": "Pass",
            "End": true
        }
    }
}

=> States.ALLはすべてのエラーに合致
=> States.Timeoutはタイムアウト
=> States.TaskFailedはタスク実行失敗
=> States.Permissionsは実行権限がない


実行

実行時のARNはユニークで、
実行ログからたどる事が可能。
また、ステーマシンの実行結果は画面で確認(Visual workflow)
    -> cloudwatch eventでルールに基づいて通知可能
    -> 実行失敗で運用者に通知

課金形態は状態遷移1000会あたり$0.025となる。

リクエストサイズはmax 1MB。

AWS Step Functions localでローカルで開発できる。
dockerやjarパッケージで利用可能。

近しいサービス

・SQS(メッセージキューイング)
    サービス間のメッセージの管理に利用
    使い分けは処理の追跡やサービス間のメッセージ受け渡しなど、
    アプリ向け機能をマネージドで利用する場合はStep Functions
・SWF(simple workflow service)
    Deciderと呼ばれるプログラミングベースでワークフロー制御を行う
    java or rubyAWS Flow Frameworkと併用するのが一般的
    プログラミングベースなのでStepFunctionsと比較して複雑化する。
    そのためまずはStepFunctionsで検討する

ユースケース
    データプロセッシング:複数のデータストアを利用
    eコマース:在庫追跡や注文処理
    動画処理:サムネイルの生成、ビデオコーディング
    バッチ処理:ゲノム処理解析のような学術領域
    ウェブアプリケーション:複雑なユーザ登録プロセス
    管理者承認:管理者が承認した場合に限り処理を行う