クラウド上にあるリソースのセキュリティ対策は必須です。皆さんのリソースをクラウド上に移行すれば、データが100%安全になるとは言えません。実際には、Amazonなどのサービスプロバイダと責任を共有する、セキュリティのシェアードレスポンシビリティモデル(責任共有モデル)に移行することを意味し、注意や管理が不要というわけではありません。このモデルは、クラウドを支えるインフラのセキュリティ面の運用負担を軽減することができる一方、クラウドに格納したデータについてのセキュリティは利用者に責任があります。
アプリケーションをクラウド上に移行すると、攻撃対象領域は変化しますが、アプリケーション、データベース、およびネットワークレベルの脆弱性は依然として存在します。これらの問題に対処するには、防御線の設定が重要になります。オンプレミスのデータセンターでの経験が豊富にある場合も、クラウドでは状況は異なります。Amazon Elastic Compute Cloud(EC2)におけるクラウド上のインスタンスのセキュリティ対策について詳細に見ていきましょう。
攻撃対象領域の削減
基本的な原則は変わりません。NMAPなどのツールを使用してインスタンスの個別のIPアドレスに対してポートスキャンを行い、開いている不要なポートを閉じます。この対策は多層防御のアプローチの第1ステップです。たとえば、ホスト上の開いている全TCPポートをスキャンします。
nmap -p 1-65535 –t4 –A –v 54.187.225.8
インスタンスに対するすべてのトラフィックは、インバウンドとアウトバウンドのトラフィックを制御する仮想ファイアウォールで、セキュリティグループ(日本語)単位で管理することができます。この仮想ファイアウォールは、EC2のダッシュボードから構成することができます。デフォルトで設定されているセキュリティグループが、プロトコルやポートのオープンを制限して、インターネットからのトラフィックを許可します。しかし、この設定はユーザーの要件に合わせて変更することが可能ですが、脆弱性が高まる危険性があります。セキュリティグループの編集は、次の手順で行います。
説明欄から、動作中のインスタンス → 任意のインスタンスを選択 → セキュリティグループ
プライベートサブネットのインスタンスには内部からのみアクセス可能です。セキュリティグループのルールを作成するとき、インバウンドの接続を外部全体(0.0.0.0/0)に許可するのは得策ではありません。このような設定を確認して、ルールを削除してください。
パスワードベースの認証を削除
認証の仕組みをセキュアにするために、パスワードベースの認証を無効にします。Ubuntu/Linuxインスタンスでは、Amazonのデフォルトではこのオプションは無効になっています。セキュリティを追加するために、このデフォルト設定はそのままにしておくことを推奨します。アプリケーションへのログインは、公開鍵/秘密鍵を使用した鍵認証によるSSH経由で行うべきです。Amazonは公開鍵と秘密鍵のペアの作成方法(日本語)について、わかりやすいマニュアルを提供しています。 AMI(Amazonマシンイメージ)をカスタマイズしている場合、SSHデーモンのコンフィグファイルからパスワードベースの認証を確実に無効(英語)にしてください。重要なシステムの場合、SSHポートへのアクセスをインターネット全体に許可するのは得策ではありません。ホワイトリスト方式で、SSHポートへのアクセスを特定のIPアドレスのみに制限してください。
メタデータとユーザーデータ:アクセスの制限
インスタンスメタデータ(日本語)は、お使いのEC2インスタンスの情報であり、動作中のインスタンスの構成や管理に利用することができます。起動時にAMIの構成を行うスクリプトを配置して、より汎用的なインスタンスを作成することもできます。このインスタンスメタデータは、動作中のインスタンスからさまざまな方法で入手することができます。動作中のインスタンスからインスタンスメタデータの全カテゴリを見るには、以下のURLにアクセスしてください。
http://169.254.169.254/latest/meta-data/
Amazon Web Services (AWS)にはメタデータサーバーが動作中の各インスタンスに配置されており、IPアドレスの前のサーバー部分はすべてのインスタンスに共通です。本アドバイスは表面的な部分しか触れていません。メタデータの追加方法や取得方法については、オンライン上で多くのリソース(日本語)の入手が可能です。また、cURLなどのツールを使用して、インスタンスメタデータの取得が可能です。詳細は以下をご覧ください。
curl http://169.254.169.254/latest/meta-data/
メタデータにはプライベートIPアドレス、インスタンスID、ホスト名など重要な情報が含まれています。同様に、ユーザーデータには、動作中のインスタンスからアクセスすることができます。EC2に配置しているアプリケーションが、プロキシ経由のHTTPリクエストに脆弱性がある場合、このデータはセキュリティ侵害を受ける可能性があります(Andres Rianchoのレポート(英語:PDF)に、この攻撃対象エリアに関する詳細な説明があります)。データ漏えいは非常に深刻なインパクトを与えるため、ぜひ、メタデータとユーザーデータに対するセキュリティ対策を検討してください。
メタデータとユーザーデータのフォルダのアクセス権について、インスタンスの起動時にパーミッションを400に設定して、root権限のみに制限するようセキュリティを強化してください。データの収集が完了したならば、次のコマンドを使用してルーティングのサービスを無効にします。
route add –host 169.254.169.254 reject
この手順により、root権限のないユーザーに対して、アクセスを禁止します。データへのアクセスは、rootアカウントが危険にさらされていることであり、上記で構成したルート設定が削除されることです。
対策として、ファイアウォールのルールを事前定義するiptablesを構成して、rootのみに接続を許可するようにします。
iptables –A OUTPUT –m owner !–uid-owner root –d 169.254.169.254 –j DROP
まとめ
EC2のデフォルトの設定ではセキュリティは十分ではありません。AWSの設定を業界標準で構成し、インスタンスのセキュリティを強化してください。たとえ多くのコストがかかっても、ユーザーデータは保護する必要があります。APIのセキュリティは、呼び出し元のみしかチェックしないレベルのものです。攻撃者にこれらのデータを改ざんされたり、アプリケーションを乗っ取られた場合、皆さんのインスタンス上でコードが実行されることになるため、このようなアクセスをブロックするよう対策を講じる必要があります。
※本ページの内容は2016年3月23日更新のMcAfee Blog の抄訳です。
原文: Secure Your Instance of Amazon’s Elastic Compute Cloud
著者: Dileep Dasari