こんにちは、株式会社サイバーエージェント 技術本部 データサイエンスソリューショングループに所属する津田 均です。2019年4月にAWS様ご協力のもと行った社内勉強会のレポートをお届けします。
私が所属する技術本部ではエンジニアの技術力のより一層の向上を図るべく、定期的に社内勉強会を開催しています。今回は「サーバレスのこれまでとこれから」と「これだけは知っておいてほしい!AWS上のセキュリティ対策」という2つのテーマについてAWS様から発表がありました。CAでは多くのサービスやチームでAWSが利用されており、どちらも弊社にとって身近で大切なテーマです。
それでは当日の様子も交えて、内容をお伝えします。
「サーバレスのこれまでとこれから」
Keisuke Nishitani 様からはAWSのサーバレスアーキテクチャを実現するためのサービスをご紹介いただきました。
サーバを所有した場合、サーバのセットアップ、キャパシティやスケーラビリティの管理、耐障害性を確保するための冗長化、セキュリティパッチの適用などの手間がエンジニアにのしかかります。このため、価値を生み競合サービス等と差別化を図るためのビジネスロジックの開発に割ける時間が減り、エンジニアにとってもビジネス面でも好ましい状態ではありません。
この状況を改善すべく、物理サーバから仮想サーバ、コンテナ技術、そしてサーバレスアーキテクチャへとインフラの抽象度が上がっていきました。AWSにおいてサーバレスとはインフラのプロビジョニングが不要で、自動でスケールし、価値に対する支払いで済み、高可用かつ安全である技術である、と位置付けています。
AWSでは仮想サーバ、コンテナ技術、サーバレスアーキテクチャに相当するサービス(それぞれ Amazon EC2, Amazon ECS, AWS Lambda 等)をそれぞれ展開しています。これらの使い分けとしては、まずAWS Lambdaで開発しようとしているサービスが実現できるかを検討し、次にコンテナ技術、それでも難しければ仮想サーバを利用するとよいとのことでした。Lambda はアプリケーションでいうところのフレームワークに相当し、制約はあるものの、その上で開発が行えれば生産性を上げることができます。
発表の後半ではAWS Lambdaの機能としてLambda Layersの紹介やALB(Application Load Balancer)との連携の紹介があり、またLambdaを利用したアプリケーションモデルとして、StepFunctionsやAmazon API Gatewayについても紹介がありました。Lambdaも含め、これらの機能については定期的にオンラインセミナーが開催されていますので活用したいです。
「これだけは知っておいてほしい!AWS上のセキュリティ対策」
Taro Hirose 様からはAWSの数あるセキュリティ対策のうち、特に重要なものをピックアップしてご紹介いただきました。
AWSではセキュリティ対策を最優先に考えており、セキュリティへの大規模な投資や、セキュリティに対する継続的な投資、またセキュリティ専門部隊の設置も行なっています。クラウドサービスに対するイメージとしてセキュリティへの心配が上がることも多く、その点AWSでは盤石の体制でセキュリティを担保しています。
一方ユーザがAWS上でサービスを構築する場合、セキュリティとアジリティはトレードオフの関係になることが多いです。AWSがいくらセキュリティ対策を行なっていても、その上で動作するアプリケーションがセキュリティを考慮していなければ効果が薄れてしまいます。そこで今回は、最低限ユーザが行うべきセキュリティ対策の紹介がありました:
- AWSルートアカウントは極力利用しない
- MFAによるアカウントの保護
- 強度の強いパスワードポリシーの利用
- IAMユーザーのパスワードローテーション
- アクセスキーのローテーション
- EC2にはIAMロールを利用
- 原則IAMユーザーのアクセスキーは利用しない
- IAMユーザー/アクセスキーは共有しない
- git-secrets を使ったクレデンシャルの管理
- S3バケットへのアクセス権限を確認する
- 各種AWSサービスのログを有効化する
- GuardDuty を有効化する
- ネットワークの境界防御を意識する
- 公開Webサイトではできる限りCloudFrontを挟 む
- 必要に応じてデータ/通信を暗号化する
- Secretsはセキュアに保管する
- インシデント対応の手順を定義しておく
- Trusted Advisorを定期的にチェックする
これを見ると、特にIAMに関する事項が多く、発表でもIAMに重点を置いて話がありました。
AWSルートアカウントはIAMで設定するアクセスポリシーが適用されない強力なアカウントです。このアカウントのAccessKeyは削除し、パスワードも強度が高いものを設定し、さらになりすましを防ぐために多要素認証(MFA)を利用することを推奨しています。また、認証情報はレポートを見ることが可能です。このレポート上ではパスワードやアクセスキーのローテーションなどを監査可能です。使用していない認証情報を削除し、最小権限の原則を保ちたいですね。
git-secrets はすぐに行えてセキュリティ効果が高そうだなと感じました。これはコミット時にAWSのアカウント情報などの機密情報などを含むかどうかチェックする仕組みです。弊社でも残念なことにパブリックアカウントに認証情報が漏れる事件が過去に発生しています。個人や組織としてセキュリティ意識を高めることはもちろんですが、ミスは起こりうるものですし、これを仕組み化で防ぐことができるのはありがたいです。私も早速インストールして、よく作業するリポジトリに適用しました。Mac OS であれば `brew install git-secrets` して、対象のリポジトリ上で `git secrets –install` `git secrets –register-aws` すれば設定が完了します。
おわりに
勉強会後にはAWS様のオフィス内で懇親会がありました。そこではCA内でどのようにAWSが利用されているのかや、AWSの様々な機能について質問や議論が行われました。
今回はサーバレスとセキュリティという、一見無関係に見えるテーマでの発表でした。ただ、セキュリティとアジリティはトレードオフだという言葉に沿って考えてみると、アジリティはサーバレスなどのAWSが提供する様々なサービスを利用して得る代わりに、その余力でセキュリティにも十分配慮できると見ることができるでしょう。AWSを利用することで、アジリティもセキュリティも確保できる、とも考えられます。
また、サーバレスについての発表では、抽象度が高まると制約が大きくなる代わりに生産性が向上できるというトレードオフについて説明がありました。AWSでは様々なサービスが提供されており、その中には似たようなものも少なくありません。それらをどう使い分けるかを考える上で、制約と生産性というトレードオフが一つに指針になりそうです。