1日1%成長する ~AWS SES~
AWSの学習メモ
- AWSのblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
AWS SES バウンス SMTPセッション時エラー 送信元のMTAがエンベロープの発信者メールアドレスにエラーメール SMTPセッション以外 送信先のMTAがエンベロープの発信者メールアドレスにエラーメール エラー発生時にユーザが以内など恒久的なエラー => バウンス SES以外 メリット - 慣れたMTAの既存のノウハウをい返せる - 宛先ISPの送信ルールの適用が柔軟に自分たちで出来る デメリット - 全て構築しなければならない - Email送信のための制限解除やDNS逆引きなどAWSに申請が必要 EC2で構築 - MTAのホスト名とEIP用意 - ポート25制限解除とDNS逆引き登録申請 - メール関連のDNS設定 - SPF、DKIM、MXレコード - バウンス処理 メールボックスシュミレーターなるものがある Bounce処理は重要。 受けてのSPAM扱いにならないように相手先の注意事項の確認と検証は必ずする メール受信 ※一般的なメールボックスは無い - S3バケットへのメール配信 - SNSトピックへのメール公開 - Lambdaを使ったカスタムレコード - バウンスアクション - 受信ルールセットの評価停止 - ヘッダーの追加 - Amazon WorkMailアクション IPアドレスフィルタ 1つでも設定すると - EC2のIPアドレスから送信されるメールをブロックする - EC2のIPアドレスから受信する場合は許可指定する メール送信のお作法や受信側の迷惑にならないようにする。 - 最悪利用停止も考えられる - BounceやComplaint(受信者が拒否)の処理を行うこと - Spam判定とされるメールは送らない - docomo等のメールフィルタは非公開だけど注意事項は出てるので確認すること
1日1%成長する ~AWS SES~
AWSの学習メモ
- AWSのblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
AWS SES Suppression List機能 ハードバウンスしたEmailアドレスが登録される - 一度登録されると14日残る - アカウントを超えて共有される - SESへのCallは成功するが外のSMTPへは通信しない 機能 バウンスをお越し続けることで送信元ドメインやSESのIPアドレスプールの評判が落ちないようにする コンテンツフィルタ ISPがSpamとみなされないか。 ウイルスやマルウェアは事前に防ぐ 送信元認証 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のblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
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のblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
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のblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
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のblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
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の学習メモ
- AWSのblackbaltの動画を15分以上毎日見る
- 動画を簡単にまとめる
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 rubyのAWS Flow Frameworkと併用するのが一般的 プログラミングベースなのでStepFunctionsと比較して複雑化する。 そのためまずはStepFunctionsで検討する ユースケース データプロセッシング:複数のデータストアを利用 eコマース:在庫追跡や注文処理 動画処理:サムネイルの生成、ビデオコーディング バッチ処理:ゲノム処理解析のような学術領域 ウェブアプリケーション:複雑なユーザ登録プロセス 管理者承認:管理者が承認した場合に限り処理を行う