次の方法で共有


SSH ポスチャ コントロールとは

SSH Posture Control を使用すると、Ubuntu、Red Hat、Azure Linux など、サポートされている Linux ディストリビューションで SSH Server のセキュリティ体制を監査および構成できます。 SSH Posture Control は、Azure ガバナンス サービス (ポリシー、マシン構成) とシームレスに統合されるため、次のことができます。

  • 業界または組織の sshd 標準に準拠 を確保する
  • sshd ベースのリモート管理の攻撃対象領域の を減らす
  • セキュリティと生産性のために、フリート全体で一貫した sshd セットアップを確保する

準拠している SSH チェックの一覧を示すスクリーンショット

監査者へのコンプライアンスを示すのに役立つ (および必要に応じてアクションを実行できるように) 各コンプライアンス チェックには、コンプライアンスまたはコンプライアンス違反がどのように決定されたかを示す 理由 フィールドを介した証拠が含まれます。

sshd パラメーター (ポート番号、許可されるグループなど) をカスタマイズすることも、Linux 用の Azure セキュリティ ベースラインに合わせたポリシーの既定値を使用することもできます。

作業を開始するためのドキュメント

  • クイック スタート: クリック バイ クリックのハンズオン エクスペリエンスについては、「クイック スタート: SSH ポスチャ 制御 をテスト マシンに適用する」を参照してください。
  • 概要とリファレンス: 概念情報、リファレンス、FAQ については、この 記事 進んでください。

監査のみの動作と監査と構成の動作の選択

SSH ポスチャ 制御ポリシーを割り当てるときは、監査専用 (別名"監査") 動作 選択するか、監査と構成の ("構成" とも呼ばれる) 動作 選択できます。

ポリシー定義 Azure Policy 効果 想定される内容に関する注意事項
監査のみの動作 を する **Audit** SSH Posture Control on Linux machines auditIfNotExists を する このポリシーには、多くの一般的なシステム イメージと比較して、より制限の厳しい設定が含まれています。 たとえば、ルート SSH アクセスの拒否などです。 したがって、準拠していない 状態が報告されます。
監査と構成の動作 の **Configure** SSH Posture Control on Linux machines deployIfNotExists を する 上記のように、最初に報告 準拠していない 状態が表示されます。 その後、マシンはポリシーに一致するように再構成され、最終的に 準拠 状態になります。

既存のマシンの場合、管理者は通常、監査のみの動作から始めて既存の状態を判断し、システム自動化で許可されているアカウントなどの依存関係を検出します。 既存のフリートと SSH ポスチャ コントロールの既定値を比較した後、カスタマイズする SSH ポスチャ コントロール パラメーターを決定します。 この分析と計画の後、監査と構成の動作 (リングなどの安全な展開プラクティス) に移行します。

グリーンフィールド シナリオや破棄可能なテスト マシンの場合は、その分析をスキップし、強力な SSH ポスチャ コントロールの既定値から始めて、監査と構成の動作に直接移動することを選択できます。

注意

マシンを構成する前に、新しい構成を検証するように細心の注意を払ってください。 誤ってマシンにアクセスできなくなる可能性があります。

誤って自分自身をロックアウトする例を次に示します。

  • 適用されたネット承認設定 (allowUsersdenyGroupspermitRootLoginなど) は、必要なログインを許可しません
  • sshd 用に構成する port は、環境内の他のコントロール (SELinux ポリシー、ホスト ファイアウォール規則、ネットワーク ファイアウォール規則など) によってブロックされます。
    • 多くの Red Hat ファミリ ディストリビューションでは、既定で SELinux ポリシーが設定されており、sshd が 22 以外のポートを使用することをブロックしています。
    • エンタープライズ チームの境界を越えないようにするために、SSH ポスチャ制御は sshd のみを構成しました。 現在、構成された sshd ポートに対応するために、コンピューター上の SELinux ポリシーやファイアウォール規則などを変更しようとはしません。 これらのシナリオについてご相談される場合は、お問い合わせください (下記 その他のリソース 参照)。

SSH ポスチャ 制御スコープ: ルール、既定値、カスタマイズ

次の表に、SSH ポスチャ 制御を使用して監査または構成できる項目を示します。 これらのそれぞれは、ルールと呼ばれます。

各ルールには、Linux 用の Azure セキュリティ ベースラインに合わせた既定の構成値があります。

ほとんどのルールには、ポリシーの割り当て パラメーターを使用して、監査または構成および監査 カスタム値を指定できます。 たとえば、組織の標準で sshd にポート 1111 (22 ではなく) を使用する場合は、ポリシー割り当てで対応するパラメーターを設定します。 これらのパラメーターには、次の表に含まれる識別子があります。 通常、短いパラメーター名はプログラムによって (たとえば、az policy assignment create --params ...で) 使用され、長いパラメーター表示名は Azure portal ワークフローで使用されます。

値をカスタマイズするときは、sshd と互換性のある値を指定するように注意してください。 たとえば、allowGroups は、グループ名パターンのスペース区切りのリストを受け取ります。 参照については、sshd_config man ページを参照してください。 sshd_configリファレンスは、 を許可する方法や、リストが交差する拒否 など、他の sshd 動作 理解するのにも役立ちます。

手記

表のレイアウトを維持するために、一部のセル値は表の下の脚注に移動されています。

ルール名 既定値 パラメーター名 パラメーターの表示名
/etc/ssh/sshd_config に対するアクセス許可が構成されていることを確認する 600 <脚注 1> sshd_configのアクセス許可
IgnoreRhosts が設定されていることを確認する はい ignoreHosts rhosts と shosts を無視する
LogLevel が設定されていることを確認する 情報 logLevel ログの詳細レベル
MaxAuthTries が設定されていることを確認する 6 maxAuthTries 認証試行の最大数
SSH アクセスの許可されたユーザーが構成されていることを確認する 脚注 5 を参照 allowUsers SSH で許可されているユーザー
SSH アクセスに対して拒否されたユーザーが構成されていることを確認する denyUsers SSH で拒否されたユーザー
SSH アクセスで許可されるグループが構成されていることを確認する * allowGroups SSH で許可されるグループ
SSH アクセスで拒否されたグループが構成されていることを確認する denyGroups SSH の拒否されたグループ
HostbasedAuthentication が設定されていることを確認する いいえ hostBasedAuthentication ホスト ベースの認証
PermitRootLogin が設定されていることを確認する いいえ permitRootLogin ルートが ssh を使用してログインできるかどうか
PermitEmptyPasswords が設定されていることを確認する いいえ permitEmptyPasswords サーバーが空のパスワード文字列を持つアカウントへのログインを許可するかどうか
ClientAliveCountMax が設定されていることを確認する 0 clientAliveCountMax sshd がクライアントからメッセージを受信せずに送信される可能性があるクライアント アライブ メッセージの数。
ClientAliveInterval が設定されていることを確認する 3600 clientAliveInterval タイムアウト間隔 (秒単位)。その後、クライアントからデータが受信されていない場合、sshd は応答を要求するメッセージを送信します
MAC が構成されていることを確認する <脚注 2> <脚注 3> 使用可能なメッセージ認証コード (MAC) アルゴリズムの一覧
バナーが構成されていることを確認する <脚注 4> banner 認証が許可される前にリモート ユーザーに送信されるバナー ファイルの内容
PermitUserEnvironment が設定されていることを確認する いいえ permitUserEnvironment ~/.ssh/authorized_keys の ~/.ssh/environment and environment= オプションが sshd によって処理されるかどうか
暗号が構成されていることを確認する aes128-ctr,aes192-ctr,aes256-ctr ciphers 許可されている暗号の一覧
SSH ポートが構成されていることを確認する 22 port SSH ポート
ベスト プラクティス プロトコルが使用されていることを確認する 2 パラメーターしない パラメーターしない

表脚注:

  1. accessPermissionsForSshdConfig

  2. messageAuthenticationCodeAlgorithms

  3. hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com

  4. #######################################################################\n\nAuthorized access only!\n\nIf you are not authorized to access or use this system, disconnect now!\n\n#######################################################################\n

    1. 注: エンド ユーザーには次のように表示されます。
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    
  5. allowUsers では、既定値 "@" はマシン上のすべてのアカウントを表します

追加の (sshd 以外の) ポリシー パラメーター

これらの追加のポリシー パラメーターは、ポリシーの割り当て中に使用できます。 これらは、マシン上の sshd 設定ではなく、Azure Policy の割り当て動作に影響します。

名前 形容 デフォルト
Arc 接続サーバーを含める このオプションを選択すると、Arc 接続マシンごとに毎月課金されることに同意します。
影響 このポリシーの実行を有効または無効にする < 監査のみの選択と監査と構成の動作に依存>

ポリシー定義 ポリシーの割り当て ゲストの割り当て マシンの構成 これはどのように一緒に収まりますか?

SSH ポスチャ 制御の使用を開始するには、ポリシー割り当てを作成することが主なアクションです。 ポリシーの割り当てにより、ポリシー定義 ("Linux マシンの SSH ポスチャ制御の監査" など) が スコープの ("my_factory_3_resource_group" など) にリンクされます。

システムを使用すると、次に示すように、追加のリソースの種類と用語が表示されます。

ポリシー割り当てがゲスト割り当て を介してマシン構成サービスにマシンをリンクする方法を示す図

形容
ポリシー定義の Policy サービス内で、使用可能な監査や構成の動作のクラスターを記述する抽象データ。 たとえば、"Linux マシンでの SSH ポスチャ 制御の監査" などです。
ポリシーの割り当て 抽象ポリシー定義を、リソース グループなどの具体的なスコープにリンクします。 ポリシーの割り当てには、パラメーターとその割り当てに固有のその他のプロパティを含めることができます。
Machine Configuration OS レベルでの監査と設定の構成を処理する Azure サービスとエージェント。
ゲスト割り当て ポリシーの割り当て、マシン、マシン構成サービスの間の 3 方向リンクとして機能するリソース。 ポリシーは、必要に応じてゲスト割り当てリソースを作成および監視します。
"guest" と "machine" の用語の詳細については、「ゲスト構成」と「Automanage」という用語が表示される理由を参照してください。
Machine Arc 対応マシンまたは Azure VM。

互換性 (ディストリビューション、SSH サーバーの実装など) について

SSH ポスチャ 制御は、単一の実行時間の長い SSH サーバー インスタンスのメインストリーム汎用 Linux シナリオ用に設計されています。

  • そのライフサイクルが init システムによって systemd として管理されている
  • ファイルによって動作が goverened される場合は、OpenSSH sshd の動作と一致 sshd_config
  • 有効な構成/状態が sshd -T 出力によって明らかにされ、OpenSSH sshd の動作と一致する

サポートされているすべてのディストリビューション (下記参照) については、これが既定の SSH サーバーのユース ケースです。

原則として、マシンは、任意の数のコードベースに基づいて、さまざまな有効期間で任意の数の SSH サーバー インスタンスを実行し、任意の数の場所 (構成ファイル、コマンド ライン引数、コンパイル時パラメーターなど) から構成を取得できます。 このようなケースは、現時点では SSH ポスチャ 制御の範囲外です。 今後ご興味のある方は、 にお問い合わせください。

SSH Posture Control は、Azure Policy と Machine Configuration でサポートされている Linux ディストリビューション (開発時に延長サポートされていたものを除く) で使用することを目的としています。 具体的には、2024-06-05 の時点で、次の範囲です。

  • AlmaLinux 9
  • Amazon Linux 2
  • Ubuntu Server 20.04
  • Ubuntu Server 22.04
  • Debian 10
  • Debian 11
  • Debian 12
  • Azure Linux (CBL マリナー) 2
  • Oracle Linux 7
  • Oracle Linux 8
  • CentOS 7.3
  • CentOS 8
  • RHEL 7.4
  • RHEL 8
  • RHEL 9
  • 岩の Linux 9
  • SLES 15

可能な限り、SSH ポスチャ 制御は、上記のディストリビューションの特定の広く使用されているシステム構成でテストされます。 たとえば、Azure ギャラリーのディストリビューション メンテナーによって発行された OS イメージコンポジションなどです。 sysadmins およびイメージ ビルダーは OS からコンポーネントを自由に削除したり、ファイルシステムを読み取り専用にしたり、SELinux を使用してエージェントアクションをブロックしたりできるため、実行時の特定のマシンとの互換性は保証されません。

sshd_config Include ディレクティブとの互換性

SSH ポスチャ 制御は、次のように、sshd_configで Include ディレクティブに対応して使用しようとします。

  • 監査/読み取りアクションの場合: sshd の観点からネット構成を反映するには、sshd -T に依存します。すべてのインクルードを考慮します。
  • 構成/書き込みアクションの場合:
    • マシン上の sshd 実装で Includes がサポートされている場合は、新しい SSH ポスチャ コントロール固有のファイルを (インクルードとして) sshd_configにリンクします。 その後、リンクされた SSH ポスチャ コントロール ファイルにすべての書き込みを配置します。 これにより、システムの検疫とシステム変更の追跡可能性が向上します。
    • マシン上の sshd 実装で Include ディレクティブがサポートされていない場合は、構成の変更をsshd_configに直接書き込みます。

sshd_config Match ディレクティブとの互換性

SSH ポスチャ 制御は、コア sshd 動作を監査および構成するように設計されています。 特定の母集団に異なる sshd 構成を適用できる条件付き Match ブロック (存在する場合) との対話は試みません。

プログラムを使用して結果を照会するにはどうすればよいですか?

Azure Resource Graph (ARG) クエリを使用すると、割り当てと状態データを独自のワークフローに統合できます。 これらの例では、PowerShell の Search-AzGraph を使用して ARG クエリを実行しますが、PowerShell は必要ありません。 Azure Portal、Azure CLI、REST 呼び出しなど、多くのエントリ ポイントから ARG を使用できます。

  1. 要約の最も高度が高い場合は、コンプライアンス状態バケットごとにマシン数を取得できます。 例えば:

    $machineCountsQuery = @'
    // SSH machine counts by compliance status
    guestconfigurationresources
    | where name contains "LinuxSshServerSecurityBaseline"
    | extend complianceStatus = tostring(properties.complianceStatus)
    | summarize machineCount = count() by complianceStatus
    '@
    
    Search-AzGraph -Query $machineCountsQuery
    
    <#
    Sample output from an environment with two machines:
    
    complianceStatus machineCount
    ---------------- ------------
    Pending                     1
    Compliant                   1
    #>
    
  2. コンピューターごとに全体的なコンプライアンス状態が表示されるようにドリルインするには、次のコマンドを使用します。

    $machinePerRowQuery = @'
    // SSH machine level compliance
    guestconfigurationresources
    | where name contains "LinuxSshServerSecurityBaseline"
    | project 
     machine = split(properties.targetResourceId,'/')[-1],
     complianceStatus = properties.complianceStatus,
     lastComplianceStatusChecked = properties.lastComplianceStatusChecked
    '@
    
    Search-AzGraph -Query $machinePerRowQuery
    
    <#
    Sample output:
    
    machine     complianceStatus lastComplianceStatusChecked
    -------     ---------------- ---------------------------
    sshdemovm01 Compliant        2/15/2024 11:07:21 PM
    sshdemovm02 Pending          1/1/0001 12:00:00 AM
    #>
    
  3. 設定の詳細にドリルダウンするには、次のコマンドを使用します。

    $settingPerRowQuery = @'
    // SSH rule level detail
    GuestConfigurationResources
    | where name contains "LinuxSshServerSecurityBaseline"
    | project report = properties.latestAssignmentReport,
     machine = split(properties.targetResourceId,'/')[-1],
     lastComplianceStatusChecked=properties.lastComplianceStatusChecked
    | mv-expand report.resources
    | project machine,
     rule = report_resources.resourceId,
     ruleComplianceStatus = report_resources.complianceStatus,
     ruleComplianceReason = report_resources.reasons[0].phrase,
     lastComplianceStatusChecked
    '@
    
    Search-AzGraph $settingPerRowQuery
    
    <#
    Sample output:
    
    machine     rule                                                  ruleComplianceStatus     ruleComplianceReason
    -------     ---------------                                                  ------               ------
    sshdemovm01 Ensure permissions on /etc/ssh/sshd_config are configured        true            Access to '/etc/ssh/sshd_config' matches required ...
    sshdemovm01 Ensure SSH is configured to meet best practices (protocol 2)     true            'Protocol 2' is found uncommented in /etc/ssh/sshd_config
    sshdemovm01 Ensure SSH is configured to ignore rhosts                        true            The sshd service reports that 'ignorerhosts' is set to 'yes'
    sshdemovm01 Ensure SSH LogLevel is set to INFO                               true            The sshd service reports that 'loglevel' is set to 'INFO'
    sshdemovm01 Ensure SSH MaxAuthTries is configured                            true            The sshd service reports that 'maxauthtries' is set to '6'
    sshdemovm01 Ensure allowed users for SSH access are configured               true            The sshd service reports that 'allowusers' is set to '*@*'
    sshdemovm01 Ensure denied users for SSH are configured                       true            The sshd service reports that 'denyusers' is set to 'root'
    sshdemovm01 Ensure allowed groups for SSH are configured                     true            The sshd service reports that 'allowgroups' is set to '*'
    sshdemovm01 Ensure denied groups for SSH are configured                      true            The sshd service reports that 'denygroups' is set to 'root'
    sshdemovm01 Ensure SSH host-based authenticationis disabled                  true            The sshd service reports that 'hostbasedauthentication' is ...
    #>
    

場所に "ゲスト構成" と "Automanage" という用語が表示されるのはなぜですか?

Machine Configuration サービスは、ゲスト構成 および Automanage Machine Configurationとも呼ばれています。 これらの名前は、サービスやドキュメントを操作するときに発生する可能性があります。 例えば:

  • この記事の Azure Resource Graph クエリの例では、データ テーブルを guestconfigurationresourcesと呼びます。
  • Azure portal では、結果を監視するための便利なビューを "ゲスト割り当て" と呼びます。
  • Azure portal で、関連する VM 拡張機能を適用してマシンの構成を有効にすると、拡張機能のタイトルは "Automanage Machine Configuration" になります。

SSH ポスチャ 制御の目的上、"guest" と "machine" の間に意味のある違いはありません。 Arc 対応マシンと Azure VM が対象です。

組み込みのポリシー定義の識別子は何ですか?

Azure CLI を使用してポリシー割り当てを作成する場合など、表示名ではなく ID でポリシー定義を参照すると便利な場合や必要になる場合があります。

displayName 身分証明書
Linux マシンでの SSH ポスチャ 制御の監査 /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4
Linux マシンで SSH ポスチャ 制御を構成する /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233
  • 問題などのサポートについては、Microsoft サポートにお問い合わせください
  • フィードバックを提供するには、機能要求などについて話し合います。連絡先: linux_sec_config_mgmt@service.microsoft.com