🌺

【悪用厳禁】EC2 にSSHキー、パスワード無しでログイン

に公開

このIAMポリシーをユーザーにアタッチすることで、EC2 Instance Connect をサポートする様々なLinuxディストリビューションにおいて、SSHキーやパスワードなしでEC2インスタンスにセキュアにログインできるようになります。

この方法は、EC2 Instance Connect が利用可能な幅広いLinux OS で共通して利用できます。特定のOS に限定されるものではありませんので、ご自身の環境に合わせて柔軟に活用ください。

OS 互換性

EC2 Instance Connect は、以下の主要なLinuxディストリビューションを含む、多くのOS で利用可能です。

  • Amazon Linux (2023, 2, 以降)
  • Ubuntu (16.04 LTS 以降、推奨は 18.04 LTS 以降)
  • CentOS (7 以降)
  • Red Hat Enterprise Linux (RHEL) (7.4 以降)
  • Debian (9 以降)
  • SUSE Linux Enterprise Server (SLES) (12 SP3 以降)
  • Fedora (30 以降)
  • openSUSE Leap (42.3 以降)
  • Oracle Linux (7.4 以降)

前提条件

EC2 Instance Connect を利用するためには、インスタンスとユーザー側で以下の前提条件を満たす必要があります。

インスタンス側の前提条件

  • サポートされている AMI: サポート対象OS一覧 を参照してください。

  • EC2 Instance Connect エージェント: インスタンスに ec2-instance-connect パッケージがインストールされ、実行されている必要があります。(最近の公式 AMI には通常プリインストールされています)

  • サブネットのインターネットアクセス: インスタンスがパブリックIPアドレスを持つ場合はインターネットゲートウェイ、プライベートサブネットの場合はNATゲートウェイ経由でのインターネットアクセスが必要です。

  • セキュリティグループの設定: インスタンスに適用されているセキュリティグループで、アウトバウンドトラフィック を許可する必要があります。具体的な設定例:

    • 最も簡単な設定 (セキュリティリスク注意): すべてのOutboundトラフィックを許可
      • タイプ: すべてのOutboundトラフィック または すべてのトラフィック
      • プロトコル: すべて
      • ポート範囲: すべて
      • 送信先: 0.0.0.0/0

    セキュリティグループ設定手順 (AWSコンソール):

    1. EC2コンソールを開き、左メニューから「セキュリティグループ」を選択します。
    2. インスタンスに適用しているセキュリティグループを選択します。
    3. アウトバウンドのルール」タブを開き、「アウトバウンドルールを編集」をクリックします。
    4. ルールを追加」ボタンをクリックし、上記の設定例を参考にルールを追加します。
    5. ルールを保存」をクリックします。

ユーザー側の前提条件

  • IAM 権限: 接続を試みる IAM ユーザーまたはロールに、上記の IAMポリシー (JSON) がアタッチされている必要があります。
  • IAMポリシーアタッチ権限 (管理者向け): ユーザーにIAMポリシーをアタッチするためには、IAMポリシーを管理する権限が必要です。ポリシーアタッチ作業は通常、管理者権限を持つユーザーが行います。

IAMポリシー (JSON)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSSHPublicKey",
                "ec2-instance-connect:OpenTunnel"
            ],
            "Resource": "arn:aws:ec2:リージョン:アカウントID:instance/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        }
    ]
}

ポリシーの説明

  • Version: "2012-10-17": IAMポリシーのバージョン指定です。
  • Statement: ポリシーのステートメント(権限定義)の配列です。
    • 1つ目のステートメント:
      • Effect: "Allow": 許可する設定です。
      • Action: 許可するアクションをリストで指定します。
        • ec2-instance-connect:SendSSHPublicKey: EC2 Instance Connect でインスタンスに一時的なSSH公開鍵を送信することを許可します。
        • ec2-instance-connect:OpenTunnel: EC2 Instance Connect でインスタンスへのトンネルを開くことを許可します。
      • Resource: "arn:aws:ec2:リージョン:アカウントID:instance/*": このポリシーが適用されるリソースを指定します。
        • arn:aws:ec2:リージョン:アカウントID:instance/*: 特定リージョン (リージョン) の特定アカウント (アカウントID) 内の すべてのEC2インスタンス を対象とします。
          • リージョンアカウントID は、実際にご利用のAWSリージョンとアカウントIDに置き換えてください。
          • 特定インスタンスのみに許可したい場合は、 arn:aws:ec2:リージョン:アカウントID:instance/インスタンスID のようにインスタンスIDを指定します。
    • 2つ目のステートメント:
      • Effect: "Allow": 許可する設定です。
      • Action: "ec2:DescribeInstances": EC2インスタンスの詳細情報を取得する ec2:DescribeInstances アクションを許可します。EC2 Instance Connect のコンソール画面でインスタンス一覧を表示するために必要です。
      • Resource: "*": リソースは * (すべてのリソース) を指定しています。 ec2:DescribeInstances はリソースレベルのアクセス制御が細かくないため、* で問題ありませんが、セキュリティポリシーに応じて調整してください。

IAMポリシーアタッチの手順

  1. IAMコンソールを開きます。
    • AWSマネジメントコンソールにログインし、IAMサービスを開きます。
  2. ユーザーを選択します。
    • 左側のナビゲーションメニューから「ユーザー」を選択し、ポリシーをアタッチしたいユーザー名をクリックします。
  3. 「許可を追加」をクリックします。
    • ユーザーの概要ページで、「許可」タブを開き、「許可を追加」ボタンをクリックします。
  4. 「ポリシーを直接アタッチ」を選択します。
    • 「ポリシーを直接アタッチ」を選択します。
  5. 「ポリシーの作成」をクリックします。(または既存のポリシーを検索)
    • 新しいポリシーを作成する場合は、「ポリシーの作成」ボタンをクリックします。
    • 既存のポリシーを再利用する場合は、検索ボックスにポリシー名を入力して検索し、該当するポリシーを選択してスキップしてください。
  6. ポリシー定義を入力します。
    • 「JSON」タブを選択し、上記のJSON形式のIAMポリシーをコピー&ペーストします。
    • 必ず arn:aws:ec2:リージョン:アカウントID:instance/* の部分を、ご自身の環境に合わせて修正してください。
  7. 「次へ:タグ」をクリックします。(オプション)
    • 必要に応じてタグを設定します。
  8. 「次へ:確認」をクリックします。
    • ポリシーの概要を確認し、ポリシー名を入力します (例: EC2InstanceConnect-Allow-AllInstances)。
  9. 「ポリシーの作成」をクリックします。
  10. 作成したポリシーをユーザーにアタッチします。
    • ポリシー一覧から作成したポリシーを検索し、チェックボックスをオンにします。
    • 「ポリシーのアタッチ」ボタンをクリックします。
    • 注: IAMポリシーをユーザーにアタッチするには、ユーザー自身にIAMポリシーを管理する権限(例: iam:AttachUserPolicyiam:AttachRolePolicy など)が必要です。通常は管理者権限を持つユーザーがこれらの操作を行います。

EC2 Instance Connect でのログイン方法

  1. EC2コンソールを開きます。
    • AWSマネジメントコンソールにログインし、EC2サービスを開きます。
  2. インスタンスを選択します。
    • 左側のナビゲーションメニューから「インスタンス」を選択し、ログインしたいLinuxインスタンスを選択します。
  3. 「接続」ボタンをクリックします。
    • インスタンスの詳細画面上部にある「接続」ボタンをクリックします。
  4. 「EC2 Instance Connect」タブを選択します。
  5. ユーザー名を選択します。(OSのデフォルトユーザー名)
    • OSのデフォルトユーザー名 (例: Ubuntuの場合は ubuntu、Amazon Linuxの場合は ec2-user、CentOSの場合は centos など) が選択されていることを確認します。
  6. 「接続」ボタンをクリックします。
    • 新しいブラウザウィンドウが開き、インスタンスへのターミナル接続が確立されます。

注意点

  • セキュリティ: このポリシーは、特定リージョン、特定アカウント内のすべてのEC2インスタンスへのEC2 Instance Connectアクセスを許可する広範な権限を持つポリシーです。本番環境などでは、セキュリティを考慮し、必要最小限の権限となるように、リソースを特定インスタンスに限定する、または条件キーを使用するなど、より厳格なポリシーにすることを強く推奨します。
  • 前提条件の確認: EC2 Instance Connect を利用する前に、インスタンスとユーザー側で上記の前提条件を必ず満たしていることを確認してください。詳細については、AWS公式ドキュメント をご確認ください。
GitHubで編集を提案

Discussion