メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

共有 Linux AMI のガイドライン

攻撃対象領域を縮小し、作成する AMI の信頼性を向上させるためには、次のガイドラインを使用します。

注記

セキュリティのガイドラインのリストは、いずれも完全ではありません。共有 AMI を注意深く作成し、機密データが漏洩される可能性について十分考慮してください。

AWS Marketplace 向けの AMI を作成する場合、Building AMIs for AWS Marketplace のガイドライン、ポリシー、ベストプラクティスを参照してください。

AMI の安全な共有についての詳細は、次の記事を参照してください。

起動時に AMI ツールを更新する

Instance Store-Backed の AMI の場合、起動時に、AMI で Amazon EC2 AMI 作成ツールをダウンロードして、アップグレードすることをお勧めします。これにより、共有 AMI に基づく新しい AMI に最新の AMI ツールが与えられます。

Amazon Linux については、/etc/rc.local に次を追加してください。

Copy
# Update the Amazon EC2 AMI tools echo " + Updating EC2 AMI tools" yum update -y aws-amitools-ec2 echo " + Updated EC2 AMI tools"

この方法では、イメージ上の他のソフトウェアが自動的に更新されます。

注記

自動更新するソフトウェアを決定するときは、更新によって発生する WAN トラフィックの量 (お客様のユーザーはそれに対して課金されます) と、更新により AMI 上の他のソフトウェアが中断されるというリスクについて考慮してください。

他のディストリビューションの場合は、AMI ツールが最新版であることを確認してください。

ルートのパスワードベースのリモートログインを無効にする

パブリック AMI に固定のルートパスワードを使用することは、セキュリティの面で危険であり、すぐに知られるおそれがあります。初回ログイン後にパスワードを変更するようにユーザーに依存していますが、変更されるまでの一瞬の間にパスワードが悪用される危険性があります。

この問題を解決するには、ルートユーザーのパスワードベースのリモートログインを無効にします。

To disable password-based remote logins for root

  1. Open the /etc/ssh/sshd_config file with a text editor and locate the following line:

    #PermitRootLogin yes
  2. Change the line to:

    PermitRootLogin without-password

    The location of this configuration file might differ for your distribution, or if you are not running OpenSSH. If this is the case, consult the relevant documentation.

ローカルルートアクセスを無効にする

共有 AMI を使用する際のベストプラクティスは、直接ルートログインを無効にすることです。これを行うには、実行中のインスタンスにログインし、次のコマンドを発行します。

Copy
[ec2-user ~]$ sudo passwd -l root

注記

このコマンドが sudo の使用に影響を及ぼすことはありません。

SSH ホストキーペアの削除

パブリック AMI から派生した AMI を共有する場合は、/etc/ssh にある既存の SSH ホストキーペアを削除します。これにより、他のユーザーがお客様の AMI を使用してインスタンスを起動したときに、SSH は、新しい固有の SSH キーペアを生成するように強制されるため、セキュリティが強化され、「中間者」攻撃の可能性を減らします。

システムにある次のすべてのキーファイルを削除します。

  • ssh_host_dsa_key

  • ssh_host_dsa_key.pub

  • ssh_host_key

  • ssh_host_key.pub

  • ssh_host_rsa_key

  • ssh_host_rsa_key.pub

  • ssh_host_ecdsa_key

  • ssh_host_ecdsa_key.pub

  • ssh_host_ed25519_key

  • ssh_host_ed25519_key.pub

次のコマンドを使用して、これらのファイルをすべて確実に削除できます。

Copy
[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub

警告

shred などの安全な削除ユーティリティでは、ストレージメディアからファイルのすべてのコピーを削除できない可能性があります。ファイルの非表示のコピーは、ジャーナルファイルシステム (Amazon Linux のデフォルト ext4 を含む)、スナップショット、バックアップ、RAID、および一時キャッシュによって作成することができます。詳細については、shredドキュメントを参照してください。

重要

パブリック AMI から既存の SSH ホストキーペアを削除することを忘れた場合、ルーチン監査プロセスから、AMI のインスタンスを実行するすべての顧客に向けて、セキュリティ上のリスクがある可能性について通知されます。短い猶予期間の後に、AMI にプライベートのマークが付けられます。

パブリックキー認証情報のインストール

パスワードを使用したログインを防ぐように AMI を構成したら、ユーザーが別のメカニズムを使用してログインできるようにしておく必要があります。

ユーザーは、Amazon EC2 を使用すると、インスタンスの起動時にパブリックプライベートキーペア名を指定できます。RunInstances API 呼び出し (またはコマンドライン API ツール) で有効なキーペア名を指定すると、パブリックキー (CreateKeyPair または ImportKeyPair の呼び出し後に Amazon EC2 がサーバー上に保持するキーペアの一部) を、インスタンスメタデータに対する HTTP Query を介してインスタンスで使用できるようになります。

SSH を使用してログインするには、AMI が起動時にキー値を取得し、それを /root/.ssh/authorized_keys (または AMI 上のその他のユーザーアカウントの同等項目) に付加する必要があります。ユーザーはキーペアを使用して AMI のインスタンスを起動し、ルートパスワードを入力せずにログインできます。

Amazon Linux や Ubuntu を初めとする多くのディストリビューションでは、cloud-init パッケージを使用して、設定されたユーザーのパブリックキー認証情報を挿入します。cloud-init をサポートしていないディストリビューションの場合は、システムスタートアップスクリプト(たとえば、/etc/rc.local)に次のコードを追加して、起動時に root ユーザーに対して指定したパブリックキーを取り込みます。

Copy
if [ ! -d /root/.ssh ] ; then mkdir -p /root/.ssh chmod 700 /root/.ssh fi # Fetch public key using HTTP curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key if [ $? -eq 0 ] ; then cat /tmp/my-key >> /root/.ssh/authorized_keys chmod 700 /root/.ssh/authorized_keys rm /tmp/my-key fi

この設定は、あらゆるユーザーアカウントに適用できます。root に限定する必要はありません。

注記

この AMI に基づいたインスタンスを再バンドルすると、起動時に使用されたキーが組み込まれます。キーへの組み込みを阻止するには、authorized_keys ファイルの内容を空にする (ファイルを削除する) か、またはこのファイルを再バンドルから除外します。

sshd DNS チェックの無効化 (オプション)

sshd DNS チェックを無効にすると、sshd セキュリティが若干低下します。ただし、DNS の解決策が失敗した場合は、SSH ログインが引き続き機能します。sshd チェックを無効にしなかった場合、DNS の解決策が失敗すると、すべてのログインが阻止されます。

sshd DNS チェックを無効にするには

  1. テキストエディタで /etc/ssh/sshd_config ファイルを開き、次の行を探します。

    #UseDNS yes
  2. 行を次のように変更します:

    UseDNS no

注記

この構成ファイルの場所は、ディストリビューションに応じて、または OpenSSH を実行していない場合は、異なることがあります。このような場合は、関連資料を参照してください。

公開元を明らかにする

現在のところ、AMI はそれぞれアカウント ID で表されるため、共有 AMI を提供したのが誰かを簡単に特定する方法はありません。

お客様の AMI の説明と AMI ID を Amazon EC2 forum に投稿することをお勧めします。これにより、新しい共有 AMI の使用に関心があるユーザーに便利な中心となる場所が提供されます。AMI を Amazon Machine Image (AMI) ページに投稿することもできます。

自身の保護

前のセクションでは、共有 AMI を起動するユーザーに対して、共有 AMI をセキュアで安全にし、また、便利にする方法について説明しました。このセクションでは、お客様の AMI を利用するユーザーから、お客様ご自身を保護するためのガイドラインを説明します。

共有する AMI に、機密性のあるデータやソフトウェアは保管しないことをお勧めします。共有 AMI を起動するユーザーは、それを再バンドルしたり、自分のものとして登録したりできる可能性があります。以下のガイドラインに従って、見落としやすいセキュリティ上のリスクを回避してください:

  • ec2-bundle-vol--exclude directory オプションを使用して、バンドル操作に含めたくない機密情報が入っているディレクトリおよびサブディレクトリをスキップすることをお勧めします。特に、イメージをバンドルするときに、すべてのユーザー所有の SSH パブリックキー/プライベートキーペアおよび SSH authorized_keys ファイルを除外します。Amazon パブリック AMI で、これらのファイルは、 ルートアカウントの場合は /root/.ssh、通常のユーザーアカウントの場合は /home/user_name/.ssh/ に配置されています。詳細については、「ec2-bundle-vol」を参照してください。

  • バンドルの前に必ずシェル履歴を削除してください。同じ AMI で複数のバンドルのアップロードを試行すると、シェル履歴にシークレットアクセスキーが含まれます。次の例は、インスタンス内からのバンドルの前に実行される最後のコマンドとなる必要があります。

    Copy
    [ec2-user ~]$ shred -u ~/.*history

    警告

    上記の警告で示した shred の制限は、ここにも適用されます。

    bash は、終了時に現在のセッション履歴をディスクに書き込むことに注意してください。~/.bash_history を削除後にインスタンスをログアウトし、再度ログインすると、~/.bash_history が再作成され、前のセッション中に実行されたすべてのコマンドが含まれています。

    bash 以外の他のプログラムもディスクに履歴を書き込むため、注意して不要な dot ファイルと dot ディレクトリを削除または除外します。

  • 実行中のインスタンスをバンドルするには、プライベートキーと X.509 証明書が必要です。これらの証明書およびその他の証明書を、バンドルされていない場所 (インスタンスストアなど) に書き込みます。