Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AWS運用における最適パターンの徹底活用

3,990 views

Published on

JustTechTalk#09の資料です。
多岐にわたるAWSサービスを効果的に運用するには、ノウハウを生かした最適パターンの徹底活用が重要です。弊社の運用ツールを交えた仕組み作りについて、ご紹介します。

Published in: Engineering
  • Be the first to comment

AWS運用における最適パターンの徹底活用

  1. 1. JustTechTalk #09 AWS運用における最適パターンの徹底活用 2017年6月30日 株式会社ジャストシステム 豊田雅信
  2. 2. 自己紹介 Windowsパッケージ製品のOLE対応 インターネットブーメラン インターネットディスク 法人IDiskASP / 親展通信 データセンターからAWSへ JUST.SFA
  3. 3. はじめに ジャストシステムのサービスは、アプリケーション開発者が責任 を持つ。サービスは、一旦運用開始されれば、お客様の持ち物と いう意識を忘れない。 アプリケーション開発者自ら、AWSのネットワークやサーバーな どのインフラベストプラティクスに従って運用し、障害に強く、 システム全体での幅広い対応ができるように。
  4. 4. アジェンダ 1. ベストプラクティス AWSからの情報発信を有効活用 2. 最適パターン 最適パターンの利用を徹底し、効率化・高信頼 AWSセキュリティ要件を考慮した最適構成 AWS構築/デプロイの自動化 AWSコストダウンと自動バックアップ、リモート保守 早期発見/復旧でAWSシステム安定運用
  5. 5. 凡事徹底 当たり前のことを確実にやる 何から手を付けたらいいのかを整理... AWSのベストプラティクスを参考に、実践例も交えて Infrastructure as Code ベストプラティクスを元に作ったチェックシートに従った手 作業 × コードで書くと、必ず結果が同じに ○
  6. 6. ベストプラクティクス アーキテクチャ AWS Well‐Architectedフレームワーク アーキテクチャ・ベストプラクティス セキュリティ AWS セキュリティのベストプラクティス IAMのベストプラクティス AWS アクセスキーを管理するためのベストプラクティス クラウドインフラ Amazon EC2 のベストプラクティス ネットワーキング / DDOSに対するベストプラティクス Amazon RDS のベストプラクティス Amazon ElastiCache のベストプラクティス
  7. 7. 徹底事項 1. セキュリティ 二要素認証﴾MFA﴿ / IPアドレス制限、Bastion﴾踏み台﴿ ログ保管 AWSコンソールサインイン、SSHログイン検知 IAM roles for EC2 instances 最前線の防御 ELB ﴾Shield﴿ NAT GW / S3 Endpoint AWSアカウントのアクティビティ、セキュリティチェック 2. 構築、デプロイ自動化 Infrastructure as Code 3. メンテナンス バックアップ、コストダウン、リモート保守 4. 監視 AWSイベント通知、Zabbix監視 早期発見⇒自動復旧
  8. 8. 1. セキュリティ
  9. 9. 徹底事項1 IAM(Identity and Access Management)ユ ーザーに、二要素認証(MFA)とIPアドレス 制限のIAMポリシーを関連付ける IAM ユーザー AWS で作成するアカウントであり、AWS とやり取りする ためにこれを使用する人またはサービスを表わす 二要素認証﴾Multi Factor Authentication﴿ パスワードに加えて、承認済みの認証デバイスまたは SMS テキストメッセージから取得した一意の認証コード を利用してセキュリティを高める 責任共有モデル
  10. 10. 認証タイプ ① AWSサービス サインイン Password AWS root or IAM user account login to the AWS管理コン ソール ② AWSサービス Access Keys Degitally signed requests to AWS APIs﴾ AWS SDK, CLI﴿ 永続「アクセスキーID/シークレットアクセスキー」 一時「アクセスキーID/シークレットアクセスキー/セ ッショントークン」 ③ SSH Key Pairs SSH login to EC2 instances Multi-Factor Authentication(MFA)からの認証コードでセキュリティ強化
  11. 11. 二要素認証(MFA) / IPアドレス制限 ポリシーをグループに設定して、ユーザーをこのグループに登録 二要素認証(MFA) 新しく設定されたMFAデバイスを介して認証されるまで、任意の AWSリソースへのアクセスを許可しない ユーザーが自分の認証情報および MFA を設定できるように IPアドレス制限 特定のIPアドレスからのアクセスを許可する IPアドレス条件演算子 AWS リソースの管理に関するポリシーの例
  12. 12. 徹底事項2 IAMユーザーのAWSコンソールサインイ ン、インスタンスへのSSHログインを自 動検知させて、管理者に必ず自動通知
  13. 13. AWSコンソールサインイン検知 CloudWatch イベント 用のイベントタイプ AWS コンソールのサインインイベント CloudWatchEvent 米国東部(バージニア北部) リージョンでのみサポート CloudTrail によってキャプチャされる API 以外の イベント AWS コンソールのサインインイベント AWS サービスイベント AWS CloudTrail による IAM イベントのログ記録
  14. 14. CloudWatch Event 設定 ルール イベントソース サービス名 AWSコンソールサインイン イベントタイプ サインインイベント ターゲット トピック SNS﴾メール通知﴿ ※ AWS1コンソールのリージョンは、バージニアを選択します。
  15. 15. メール本文例 "Type" : "Notification", "MessageId" : "3d8e6444‐1310‐5483‐9036‐358ead2000a9", "TopicArn" : "arn:aws:sns:us‐east‐1:xxxxxxxxxxxxxxx:sign‐in ‐event","Message" : "{"version":"0","id":"0aa70629‐e d8d‐4b52‐b688‐0e4696964775","detail‐type":"AWS Console SignIn via CloudTrail","source":"aws.signin","account ":"xxxxxxxxxxxx","time":"2017‐06‐26T07:46:32Z","reg ion":"us‐east‐1","resources":[],"detail":{"eventVer sion":"1.05","userIdentity":{"type":"IAMUser","pr incipalId":"AIDAJGD6J62YSF24CTOBG","accountId": "xxxxxxxxxxx","accessKeyId":"", "userName":"xxxx.xxxx" },"eventTime":"2017‐06‐ ...
  16. 16. 徹底事項3 SSHセッション記録をログ保管する
  17. 17. Bastion(踏み台) 2段階認証、セッション記録・ログ保管、ログイン通知 Bastionホストを2段階認証 Securing SSH to Amazon EC2 Linux Hosts BastionホストにSSHセッション記録 How to Record SSH Sessions Established Through a Bastion Linux Bastion Hosts on the AWS Cloud CloudFormation テンプレート Linux Bastion Hosts on AWS Remote Desktop Gateway on AWS
  18. 18. Bastion(踏み台)の中身 カスタムスクリプト SSHフィーチャーブロックやチェック /usr/bin/bastion/shell /etc/ssh/sshd_config AWSコンソールログ出力 CloudWatchLogs /etc/awslogs/awslogs.conf /var/log/bastion /var/log/awslogs.log ログS3保管 /usr/bin/bastion/sync_s3 /var/log/bastion/bastion.log ユーザ管理 SSH公開鍵(john.pub)をS3に配置、削除 /usr/bin/bastion/sync_user /var/log/bastion/users_changelog.txt
  19. 19. 徹底事項4 EC2インスタンスには、必ずIAMロールを アタッチして運用する。一時的な資格情 報を使用することが、IAMのベストプラ クティス
  20. 20. 徹底4 IAM roles for EC2 instances EC2で永続キーを使わない 既存のAmazon EC2インスタンスにIAM Roleがアタッチできる Security Token Service(STS) 一時的なセキュリティ認証情報を使用して AWS リソースへの アクセスをリクエストする AssumeRole GetFederationToken GetSessionToken クロスアカウントアクセス AWS アカウント間の IAM ロールを使用したアクセスの委任 ロールの信頼関係、"Action": "sts:AssumeRole"のPrincipalのと ころで信頼する対象を設定
  21. 21. 徹底事項5 攻撃対象領域を削減するために、インタ ーネットに直接繋がるエントリポイント を最小限にする
  22. 22. 最前線の防御 ELB (Shield) ELB はネットワークへの攻撃に対する最前線の防御機能も持つ。 ELB は有効な TCP リクエストのみをサポートするため、UDP や SYN フラッドなどの DDoS攻撃は、インスタンスに到達すること はできない。 Public Subnet Private Subnet 全ての EC2インスタンスを ELB の背後に配置し、インターネット のみにELB を公開。攻撃対象領域を最小化することができる。 AWS Shield Standardは、追加費用無しに自動で SYN/ACK フラッ ド、リフレクション攻撃、HTTPスローリードなど、今日最も一般 的な攻撃の96%から守られる。 WAFは、別途必要。
  23. 23. ELB 設定 ELBのアベイラビリティーゾーン設定 ELB専用のPublic Subnetを用意する subnetは少なくとも 8 個の空き IP アドレス アベイラビリティーゾーンにPublic Subnet ELBを指定 Public subnet ELB ‐ ap‐northeast‐1a Public subnet ELB ‐ ap‐northeast‐1c ソースセキュリティグループ security group ELB﴾Inbound 443 Any / Outbound 80 Web ﴿ インスタンス Private SubnetのEC2インスタンスを組み込む security group EC2﴾Inbound 80 ELB ﴿
  24. 24. NAT(ネットワークアドレス変換) GW プライベートサブネットのインスタンスからインターネット や他の AWS サービスに接続 NAT GWを専用のPublic Subnetに配置 NAT GWにセキュリティグループを関連付けることはでき ない。セキュリティグループは、プライベートサブネッ トのインスタンスに対して使用し、それらのインスタン スに出入りするトラフィックを管理する。 NAT GWがあるサブネットに出入りするトラフィックを管 理するには、ネットワーク ACLを使用する。ネットワー ク ACLは NAT ゲートウェイのトラフィックに適用。NAT GWはポート 1024~65535 を使用。
  25. 25. VPC Flow Logs見える化 NAT﴾ネットワークアドレス変換﴿ GW サブネットのアウトバウンド VPC Flow Logsを分析 ElasticSearch Kibana VPCフローログ CloudWatch Logs Subscription Consumer Quicksight VPC Flow Logsを分析 Amazon QuickSight
  26. 26. 利用例
  27. 27. S3 Endpoint VPC と S3をプライベート接続。NAT経由しない。 エンドポイントのルーティングを設定 送信先 s3プレフィックスpl‐xxaxxxxxx ﴾com.amazonaws.ap‐northeast‐1.s3﴿ ターゲット vpce‐xxxxxxxx VPCエンドポイント S3プレフィックスID「宛先のAWSクラウド上のサービスを特 定」アウトバウンド制限時 ネットワークACLで指定できない VPC セキュリティグループで送信先にプレフィックスID を指定 アウトバウンドルール HTTPS 送信先 pl‐xxxxxxxx Amazon S3 の VPC エンドポイント用のバケットポリシー
  28. 28. 徹底事項6 AWSアカウントのアクティビティ監視を 行い、監査ログを確実に保管する
  29. 29. AWSアカウントのアクティビティ監視 AWS のロギング機能を使用すると、ユーザーがアカウントで実行 したアクションや使用されたリソースを確認できる。ログファイ ルには、アクションの日時、アクションのソース IP、不適切なア クセス許可のために失敗したアクションなどが示される。 AWS CloudTrail AWS Config Amazon CloudWatch Amazon CloudFront、S3、ELB
  30. 30. 徹底事項7 脆弱性検査を徹底する AWSリソース設定モニタリング 脆弱性スキャナ WEBアプリケーション脆弱性検査 DevSecOps セキュリティポリシーもコード化 DevSecOps on AWS ‐ Policy in Code|AWS Summit Tokyo 2017 git‐secrets CloudTrailRemediation
  31. 31. セキュリティチェック AWS Config Rule リソースの設定を継続的にモニタリングでき、設定を評 価することで潜在的なセキュリティの脆弱性を発見 AWS Managed Config Rules 定期実行指定可能 アクティブなルールにつき 2 USD/月 脆弱性スキャナ AWS Inspector セキュリティベストプラクティスや脆弱性の定義に対応 したルールが収められたナレッジベースを元に診断 定期評価設定 1 エージェント 1 評価あたり 0.30 USD/月 オープンソース脆弱性スキャナ OpenVAS AWSへの事前申請必要 Vuls 今後評価予定 WEBアプリケーション脆弱性検査
  32. 32. Agent CloudWatch Logs エージェント SSMエージェント AWS CodeDeploy エージェント Amazon Inspctorエージェント Windows Server 2016 以前 EC2Config Windows Server 2016 EC2Launch ポリシー
  33. 33. 2. 構築、デプロイ自動化
  34. 34. その1 AMI デプロイ アプリケーションを同梱したマシンイメ ージ(AMI) を管理
  35. 35. 新規構築 ベースAMI (Linux/Windows) カスタムAMI ミドルウェア追加等 ネットワーク環境作成 インスタンス作成
  36. 36. その1 AMI デプロイ アプリケーションを同梱したマシンイメージ﴾AMI﴿ を管理 ステージング環境で事前に評価したものがベース サーバ特有のプロパティー情報﴾例えば、RDSの接続先エンド ポイント等はGitで管理﴿は、インスタンス起動時に動的登録 ステートレスな構成を保つために、ログのような状態が保存 されたデータはリアルタイムに外へ出す 監視対象の動的な自動登録﴾Zabbixアクティブエージェント﴿ ロールバック EC2 待機系のインスタンスから RDS スナップショットから ログ外出し Fluentd
  37. 37. その2 AWS CodeDepoly ノンストップでWEBアプリケーションの 更新が可能に
  38. 38. CodeDeploy アプリケーション
  39. 39. CodeDeploy インスタンス
  40. 40. CodeDeploy イベント
  41. 41. その2 AWS CodeDeploy aws-codedeploy-samples common_functions.sh ELB付け外しの共通メソッド deregister_from_elb.sh ELBからインスタンスを切り離す register_with_elb.sh ELBにインスタンスを組み込む トラフィックのブロック(BlockTraffic)と許可(AllowTraffic)が 追加された。 CLBは上記スクリプトが不要に。 ALBは必要。 appspec-'hooks' Section 初回デプロイ時にCodedeployの「ApplicationStop」タスクが実行 されないため、ミドルウェアのサービスが再起動されない。事前 処理を行いたい場合、「BeforeInstall」 で実行。
  42. 42. aws‐codedeploy‐samples
  43. 43. その3 GitLab CI + AWS CodeDepoly ビルドを Jenkins から GitLab CIに .gitlab‐ci.yml にビルド手順を記述 Infrastructure as Code Dockerを利用してビルドするため、多彩なバージョンを確認 可能 スポットインスタンスで、並列ビルド 必要な時に起動 コストパフォーマンス
  44. 44. GitLab-CE Requirements GitLab Installation /etc/gitlab.gitrab.rb 正規SSLワイルカード利用をお勧め external_url 'https://gitlab.example.com' nginx['ssl_certificate']="server.crt" nginx['ssl_certificate_key']="server.key" registry_external_url 'https://registry.example.com' registry_nginx['ssl_certificate']="server.crt" registry_nginx['ssl_certificate_key']="server.key" Configuration options GitLab Runner GitLab Runner 導入コストが低く保守も簡単。たまにバグを踏みますが...
  45. 45. Terraform 汚れている﴾taint﴿リソース 異常終了した場合等に、リソース管理ファイルにtaintが 付与される場合あり terraform.tfstate を S3に保存してバージョン管理 terraformの実行履歴で過去の障害を追跡 provider/aws: Allow aws_instances to be resized rather than forcing a new instance ﴾#11998﴿ インスタンスタイプの変更がサポートされた﴾今まで、 terraform からインスタンスのStop/Startができなかった﴿
  46. 46. 構築自動化例 Amazon VPC Architecture terraform community modules AMI作成 Amazon EBS‐Backed Linux AMI の作成 Amazon EBS‐Backed Windows AMI の作成 AMI取得 most_recent = true
  47. 47. 3. AWSコストダウンと自動バックアップ
  48. 48. コストダウン インスタンス起動/停止自動化 オンデマンド契約は、夜間・休日停止で﴾2,142時間+3,072時 間﴿ / 8,760時間﴾年﴿ 約60% の削減効果 RDS﴾データベース﴿のスナップショットによる復元自動化 RDSは停止できない。スナップショットから復元する自動化の 仕組みを構築することで、コストダウン。 Amazon RDSでDBインスタンス﴾シングル﴿の停止と開始を サポート リザーブドインスタンス購入 インスタンスタイプは1年固定で運用することが条件だが、約 30% の削減効果。No Upfront(前払いなし)可能。 定期実行はCron or Rundeckを利用。Lambdaに対応できてない。
  49. 49. 自動バックアップ RDSは、1 ~ 35 日間指定可能 EC2は、API呼び出しを自力で行う AMI削除するときは、EBSSnapshotの残骸も忘れずに
  50. 50. AWS RDS/EC2 保守 RDSバックアップ Amazon RDS DB インスタンスのバックアップと復元 バックアップ保持期間は、1 ~ 35 日間で設定 特定の時点への DB インスタンスの復元 通常、現在時刻の 5 分以内 PITリカバリ遅い? EC2バックアップ AMI / EBSSnapshot EC2 Instance Backup﴾CLI﴿ EBS増量 Linux EBSボリュームのリサイズ、IOPS、タイプの変更
  51. 51. リモート保守 ログ調査 Cloud Watch Logs ログをAWSコンソールで確認﴾インスタンスログイン不要﴿ 複数サーバーのログを集約して検索可能 更新 Systems Manager SSMはEC2インスタンスに対し外部からコマンド実行やソフト ウェア構成を行う機能﴾インスタンスログイン不要﴿ タグでグループ化 集中管理して一括更新 Agent update Windows Update ライセンスファイル更新 脆弱性対応
  52. 52. AWS System Manager
  53. 53. 4. 早期発見/復旧でAWSシステム安定運用
  54. 54. 徹底事項8 AWS EC2 Auto Recovery インスタンスのステータスチェック Amazon EC2の自動リカバリ﴾Auto Recovery﴿ 機能 put‐metric‐alarm で自動リカバリを設定 ‐‐metric‐name StatusCheckFailed_System ‐‐alarm‐actions ec2:recover ‐‐metric‐name StatusCheckFailed_Instance ‐‐alarm‐actions action/actions/AWS_EC2.InstanceId.Reboot/1.0 ‐‐metric‐name StatusCheckFailed ‐‐demensions InstanceId Amazon Elastic Compute Cloud インスタンスの復元
  55. 55. 徹底事項9 AWS メンテナンス予告通知 コマンドライン EC2インスタンスの予定されたイベント describe‐instance‐status DBインスタンスのOSの更新 Describe‐pending‐maintenance‐actions ApplyPendingMaintenanceAction AWS Healthで設定可能に! Monitoring AWS Health Events with CloudWatch Events サービス名/Health イベントタイプ/特定のヘルスイベント Specific services﴾s﴿ EC2 or RDS Specific event type category﴾s﴿ scheduledChange How to Use Amazon CloudWatch Events
  56. 56. イベントSNS通知 RDS Amazon RDS イベント通知の使用 例:フェイルオーバー RDS‐EVENT‐0049 マルチ AZ フェイル オーバーが完了しました。 ElasticChache ElastiCache イベントのモニタリング 例:ElastiCache: FailoverComplete"Failover to replica node %s completed" レプリカノードへのフェイルオーバーが成功しま した。
  57. 57. AWS Certificate Manager ACMは無料でSSL/TLS証明書のプロビジョニング、管理、およびデ プロイを簡単に行える。ELB/CloudFront/API Gateway 落とし穴 ACMでは自動で証明書更新が完了するが、自動更新が完了するに はDNSが設定されていて、インターネットからの HTTPS リクエス トを許可しておく必要がある。 今回のサイトはワイルドカード﴾*.eaxmple.com﴿の証明書を利用し ていたが、ワイルドカードの場合は、example.com または www.example.com でアクセスできる必要がある。また、IPアドレ ス制限が設定されていると、AWSからのリクエストを受けること ができない。⇒ CloudWatch Eventsに更新通知を登録しておく! ACM の Amazon が発行する証明書のマネージド型更新
  58. 58. Route53にDNSフェイルオーバー機能が追加
  59. 59. Zabbix監視
  60. 60. Zabbix監視構成 ZabbixAgent監視 各EC2サーバのZabbixAgentとマネージャーが通信を行 い、OSリソースやプロセス稼働状況の情報を収集する。 Munin併用 CloudWatch+fluentd連携 fluentdを利用して、AWS標準監視CloudWatchか ら、AWS﴾RDS/ELB/SQS﴿ の情報を収集する。 Webシナリオ監視 AWS内外からWebページの応答速度と閲覧可否を確認 監視スクリプト JMX監視 監視対象自動登録
  61. 61. 監視テンプレート 設定をテンプレートとして管理し、テンプレートをホストに 適用することで監視設定を容易に ログ監視 条件式に一致したらメール通知 監視スクリプト プロセス再起動 インスタンス再起動 Javaスレッドダンプ採取 S3/NatGW/ElasticSearch等をチェック 必要に応じて復旧自動化
  62. 62. アプリケーションパフォーマンス監視 AWS X-Ray AWS X‐Ray – 分散アプリケーションの内部を見る Javaスタックトレース 現時点ではコード追加埋め込みが必要 Application Performance 運用環境で障害が発生した場合、復旧が第一 ただ、困ったことに、復旧できないこともある アプリケーションパフォーマンス監視ツールを導入すること で、予兆の発見や早期原因究明に役立つ pg_statsinfo
  63. 63. Athena 東京で利用可能に
  64. 64. Athena 環境構築 1. S3バケット作成 Athenaが参照するログを格納 2. EC2にIAMロール付与 ログをS3にアップロードする権限をインスタンスに付与 3. Athenaデータベース構築 AWSのAthenaのコンソール上でDBとログテーブルを作成 4. 日単位のパーティションを作成 Athena JDBC Driver / AWS SDK for Java 5. データを列指向形式に変換、データ圧縮﴾Google Snappy﴿ Apache Drillで変換 / drill‐env.sh メモリ設定 変換コマンドsqlline/Apache ZooKeeper [初期構築並列] 6. S3アップロード AWS CLI
  65. 65. Eメール送信 1. Amazon Elastic Compute Cloud﴾EC2﴿インスタンス上にMail Transfer Agent﴾MTA﴿を自前で構築して配信 AWSへの事前申請等必要 2. Amazon Simple Email Services﴾SES﴿の利用﴾自前でバウンスメー ルを管理する管理サーバと連係﴿ APIを利用してメール配信 バウンスメールに注意 3. 外部Email配信サービスの利用﴾大量に短期間で送信したい場 合:障害時連絡を一括配信等 携帯キャリアメイルもサポート﴿ 障害時一斉メール配信で、ノウハウのある外部ASPを利用 参考 AWSからのEメール送信
  66. 66. 自前MTA構成
  67. 67. 自前MTA設定 1. OpenDKIMのセットアップ 2. Postfixのセットアップ 3. ELBのProxyProtocol有効化﴾冗長構成の場合﴿ ロードバランサーのProxy Protocolを有効にする 4. Amazon Route 53に、DKIM公開鍵とSPFレコードの登録 5. AWS制限解除と逆引きDNS登録申請 AWS EC2 Eメール上限緩和 / 逆引き﴾rDNS﴿設定申請手順 6. Postfix maillog バックアップ﴾冗長構成の場合、ログ集約﴿ 7. SESリレー対応﴾SES と Postfixの連係﴿ 必要に応じて Amazon SES を既存の Eメールサーバーに統合 STARTTLS を使用して Amazon SES エンドポイントへの統合
  68. 68. リンク AWSによる優れた設計 セキュリティ 信頼性 パフォーマンス効率 コストの最適化 運用上の優秀性 AWSクイックスタート まとめ AWSのサービスは多岐にわたっています。AWSのドキュメントや 実施例を整理・有効活用した、取り組み事例をご紹介しました。

×