loader image

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

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

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

OS 互換性:

この方法は、以下の主要なLinuxディストリビューションを含む、EC2 Instance Connectをサポートする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 以降)

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. 作成したポリシーをユーザーにアタッチします。
    • ポリシー一覧から作成したポリシーを検索し、チェックボックスをオンにします。
    • 「ポリシーのアタッチ」ボタンをクリックします。

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を使用するには、インスタンスがEC2 Instance Connectの前提条件を満たしている必要があります。詳細については、AWS公式ドキュメントをご確認ください。

コメント

タイトルとURLをコピーしました