2017/05/04

CloudFormation によるセキュア AWS 展開のメリット

クラウド cloud computing
2017 年 5 月 4 日 Teri Radichel 著

Secplicity の以前のブログ記事で説明したように、自動化は人的ミスの可能性を少なくし、セキュリティを向上させるのに役立ちます。セキュリティの自動化では、プログラムを利用して、インフラストラクチャやアプリケーションを展開しますが、クラウドの展開については、どのような方法での自動化が可能なのでしょうか。AWS を使用する場合、CloudFormation がその 1 つの選択肢です。CloudFormation には、AWS リソース展開プロセスの保護に役立つ機能があります。

CloudFormation とは何か

CloudFormation は、人がボタンをクリックして展開するのではなく、仮想マシン、ネットワーク、データベース、ストレージ、ユーザ、権限、カスタムアプリケーション、セキュリティアプライアンスなどを AWS クラウドプラットフォームに展開するソフトウェアを記述できる、AWS のサービスです。「CloudFormation テンプレート」は、作成する AWS リソースを定義する、特別な形式で記述されたテキストファイルです。任意の AWS ツールを使ってコマンドを実行することで、リソースをテンプレートに自動的に展開できます。詳細については、CloudFormation のマニュアルと CloudFormation リソースのリストを参照してください。

CloudFormation はシステムのセキュリティにどのように役立つのか

AWS ユーザは、AWS コンソールにログインして、いくつかのオプションを選択、プッシュボタンで AWS にリソースを簡単に作成したり変更したりできます。この方法での問題は、クリックするボタンや入力する情報を(偶然にまたは意図的に)間違えたときに発生します。前述のように、セキュリティの問題の多くは、人的ミスによるものです。セキュリティポリシーと一致しない変更を防止し、変更前の状態に戻す作業は、正しく管理されていないランダムなプロセスにおいては、複雑になります。同じリソースの展開を何回も繰り返したり、複数の場所に展開したりすると、手順にばらつきがあるために、間違いが発生する可能性が高くなります。エラーを追跡して修正するには、いくつものログを調べて情報を収集しなければなりません。運が良ければ、修正に必要なログが残っているかもしれませんが、手動での問題の修正では、さらなる人的エラーが発生する可能性があります。

CloudFormation テンプレートを手動の代わりに使用する方法では、開発チーム、運用チーム、セキュリティチームが AWS リソースを展開するためのコードを記述できます。チームが事前にテストを実施することで、コードが正しく動作することを確認できます。これらの手順を実行することで、本番システムへの展開時に人的エラーが発生する可能性が最小限に抑えられます。また、コードを使って最初の展開、それ以降の展開を実行し、エラーが発生した場合はロールバックを実行できます。変更によって問題が発生した場合も、元の管理システムに保存されている古いバージョンのコードによって、システムを以前の状態に復元できます。適切な計画に従って、サービス停止などの予期しないエラーが発生した場合も正しい順序で再実行するようにスクリプトを設計できます。このようなスクリプトであれば、最初に失敗したタスクであっても、正しい場所から処理を再開し、正常に終了させることができます。

CloudFormation 権限の管理

AWS Identity and Access Management(IAM)は、非常に詳細のポリシーを作成し、アカウントでどのユーザが何を実行できるかを定義できるサービスです。AWS CloudFormation サービスには、許可アクションのリストがあり、ポリシーによって、特定のユーザやシステムに対してこれらのアクションを実行する権限を制限できます。IAM のロール、ポリシー、ユーザ、およびグループの詳細については、このブログ記事では説明しませんが、ユーザまたはロールに CloudFormation CreateStack アクションを使用した AWS リソースの作成を許可する IAM ポリシーの例を示します。

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

CloudFormation 監査ログ

CloudFormation では、AWS コンソールによる展開時に発生したイベントのリアルタイムと展開後の監査ログが提供されます。たとえば、この監査ログには、Firebox Cloud の自動展開の時刻と発生したイベントが表示されます。

CloudFormation コンソールのテンプレートタブには、スタックを作成したテンプレートが表示されます。アカウントの変更を CloudFormation だけに制限した場合、この情報を使用することで、アカウントに存在するものを確認できます。

CloudFormation のリソースタブには、CloudFormation テンプレートによって作成されたリソースのリストが表示されます。

物理 ID 列のリンクをクリックすると、リソースに関する詳細が表示されます。

CloudFormation スタックポリシー

CloudFormation スタックポリシーによって、CloudFormation スタックリソースへの不正更新を防止できます。AWS スタックポリシーのドキュメントに記載されている、スタック内のデータベース以外のすべてのリソースに対する更新を許可するスタックポリシーの例を、以下に示します。

{
"Statement" :
[{
"Effect" : "Allow",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "LogicalResourceId/ProductionDatabase"
}]
}

CloudTrail ログ

CloudTrail ログは、Amazon クラウドプラットフォームで実行された、CloudFormation アクションを含むすべての AWSサービスアクションを追跡します。

特定のイベントをクリックすると、詳細情報も表示できます。

「イベントの表示」ボタンをクリックすると、さらに詳しい情報が表示されます。最終的には、アカウント内で AWS サービスによって実行されるすべてのアクションは、API コール、すなわち、ソフトウェアシステムにおけるプログラムによるアクションの実行要求の結果ということになります。ボタンをクリックした場合も、AWS コンソールが API コールを実行することで、要求されたアクションが実行されます。これらの API コールは、AWS クラウドプラットフォームが認識できる形式の Web 要求によって作成されます。イベントの詳細には、ログに記録されたイベントに関連する実際の Web 要求コードが表示されます。

ログのセキュリティ

ログ機能ときめ細かいアクセス制御が組み込まれたサードパーティプラットフォームを使用することで、ログの保護が容易になります。また、権限を正しく設定することで、職務の分離が容易になります。たとえば、アカウント内のユーザやシステムがログを変更したり削除したりしないようにし、それらのアクションを追跡するようにできます。このような対策は、法的問題によって、発生した出来事を証明する必要が生じた場合に、重要になる可能性があります。AWS IAM では、このようなセキュリティポリシーを強制する権限構造を作成できます。スケーラブルかつセキュアなログプラットフォームであれば、詳細なログを長期間に渡って保存できます。

災害復旧とフェイルオーバ

ソフトウェアを使用してシステムやネットワークを再展開すれば、セキュリティの自動化に関する以前の記事で説明したように、災害復旧やフェイルオーバの際の役に立ちます。CloudFormation を使用するメリットの 1 つとして、AWS プラットフォームとの密接な統合が可能な点が挙げられます。CloudFormation は、同じテンプレート内のリソースを認識して、正しい順序で、また、可能な場合は並列で展開します。パラメータを使用して環境ごとに変更される構成値をテンプレートコードから分離することで、異なる環境であっても同じテンプレートを実行できます。擬似パラメータは通常、任意の AWS アカウントやリージョンで動作するテンプレートを作成するために、AWS 環境情報を参照します。

展開プロセスへのセキュリティチェックの組み込み

AWS の真のメリットの 1 つは、特定のイベントに基づいてアクションを実行できる点にあります。CloudFormation イベントもその 1 つであり、CloudFormation アクションがアカウントで発生した場合に、CloudWatch イベント、Amazon Inspector、AWS Config Rules などの AWS サービスを使用して、セキュリティチェックを実行できます。これらのツールによって、セキュリティポリシーに適合しない変更を自動的に防止し、元の状態に戻すことができます。

将来のセキュリティのための先行投資

最初は、CloudFormation テンプレートの構文を習得するのに時間がかかるかもしれません。IAM ポリシーなどの権限を制限するセキュリティ制御をアカウントに正しくセットアップするのにも時間がかかります。しかしながら、このような先行投資によって、将来の展開で時間やセキュリティのメリットがもたらされます。CloudFormation は、エラーを防止し、ログ機能を強化し、クラウド展開にセキュリティを追加する、非常に強力で柔軟なツールです。

この連載の次回の記事では、CloudFormation を使用して AWS アカウントに WatchGuard Firebox Cloud を展開する方法を説明します。— Teri Radichel (@teriradichel)