Amazon EKS セキュリティのベストプラクティス - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon EKS セキュリティのベストプラクティス

このトピックでは、クラスターのセキュリティのベストプラクティスを示します。

IMDS および Amazon EC2 インスタンスプロファイルの認証情報へのアクセスの制限

デフォルトでは、Amazon EC2 インスタンスメタデータサービス (IMDS) は、ノード IAM ロールに割り当てられた認証情報をインスタンスおよびそのインスタンスで実行されているコンテナに提供します。サービスアカウントの ロールIAMを使用すると、サービスアカウントのトークンの ロールを使用するようにポッドの認証情報チェーンが更新されます。IAMただし、ポッドはノードに割り当てられたインスタンスプロファイルの権限を継承できます。以下の場合は、コンテナで使用可能なアクセス許可を最小限に抑えるために、IMDS へのポッドのアクセスをブロックすることをお勧めします。

  • サービスアカウントの IAM ロールを実装し、AWS のサービスへのアクセスを必要とするすべてのポッドに直接必要なアクセス許可を割り当てました。

  • 現在のリージョンを取得するなどの他の理由で、クラスターのポッドで IMDS へのアクセスが必要ありません。

詳細については、「インスタンスメタデータからのセキュリティ認証情報の取得」を参照してください。以下のいずれかのオプションを使用して、インスタンスやコンテナから IMDS へのアクセスを防ぐことができます。

重要

クラスターで AWS ロードバランサーコントローラーを使用する場合は、ロードバランサー設定を変更する必要がある場合があります。詳細については、「AWS Load Balancer コントローラーを Amazon EKS クラスターにデプロイするには」を参照してください。

  • ノードおよびすべてのコンテナから IMDSv1 へのアクセスをブロックし、ホストネットワークを使用しないすべてのコンテナに対する IMDSv2 へのアクセスをブロックする – ポッド仕様に hostNetwork: true があるインスタンスおよびポッドに対してはホストネットワーキングを使用します。このオプションを実装するには、状況に該当する行と列のステップを完了します。

    デプロイ方法 新しいノードグループ 既存のノードグループ
    カスタム起動テンプレートのないマネージド型ノード 以外のデプロイ方法を使用して使用することはできません。eksctl でデプロイする場合は、eksctl--disable-pod-imds オプションを使用します。eksctl create nodegroup は、指定したオプションに基づいて起動テンプレートを作成し、その起動テンプレートを使用してノードグループをデプロイするために使用できます。eksctl この表の次の行の New node group 列の設定を含むカスタム起動テンプレートを使用して新しいノードグループを作成することをお勧めします。
    カスタム起動テンプレートを使用したマネージドノード [起動テンプレート] の [高度な詳細] で次の設定を行います。
    • アクセス可能なメタデータEnabled

    • メタデータのバージョンV2 only (token required)

    • メタデータレスポンスのホップ制限1

    [New (新規)] 列の設定で起動テンプレートを更新し、新しい起動テンプレートのバージョンを使用してノードグループを更新します。
    自己管理型
    • を使用してノードグループを作成する場合AWS マネジメントコンソール

      1. リージョンとオペレーティングシステム用のセルフマネージド型ノードグループ AWS CloudFormation テンプレートをダウンロードします。

        • Linux – および 中国 (北京) 以外のすべてのリージョン中国 (寧夏)

          https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Linux – 中国 (北京) および 中国 (寧夏)

          https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Windows – および 中国 (北京) 以外のすべてのリージョン中国 (寧夏)

          https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
        • Windows – 中国 (北京) と 中国 (寧夏)

          https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
      2. ファイルを編集します。という行を HttpPutResponseHopLimit : 2 に変更し、ファイルを保存します。HttpPutResponseHopLimit : 1

      3. セルフマネージド型Amazon Linuxノードの起動」または「セルフマネージド型 Windows ノードの起動」の手順を使用して、ノードグループをデプロイします。テンプレートを指定する方法については、[AWS CloudFormationAmazon S3 URL] を選択するのではなく、[Upload a template file (テンプレートファイルのアップロード)]、[Choose file (ファイルの選択)] の順に選択し、編集したファイルを選択して、指示に従います。[DisableIMDSv1] の値も に設定します。true

    • を使用してノードグループを作成する場合は、eksctl--disable-pod-imds オプションを使用します。eksctl create nodegroup

    • を使用してノードグループを更新または移行する場合AWS マネジメントコンソール

      1. リージョンとオペレーティングシステム用のセルフマネージド型ノードグループ AWS CloudFormation テンプレートをダウンロードします。

        • Linux – および 中国 (北京) 以外のすべてのリージョン中国 (寧夏)

          https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Linux – 中国 (北京) および 中国 (寧夏)

          https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
        • Windows – および 中国 (北京) 以外のすべてのリージョン中国 (寧夏)

          https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
        • Windows – 中国 (北京) と 中国 (寧夏)

          https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
      2. ファイルを編集します。という行を HttpPutResponseHopLimit : 2 に変更し、ファイルを保存します。HttpPutResponseHopLimit : 1

      3. 既存のセルフマネージド型ノードグループの更新」の手順を使用して、セルフマネージド型ノードグループを更新します。テンプレートを指定する方法については、[AWS CloudFormationAmazon S3 URL] を選択するのではなく、[Upload a template file (テンプレートファイルのアップロード)]、[Choose file (ファイルの選択)] の順に選択し、編集したファイルを選択して、指示に従います。[DisableIMDSv1] の値も に設定します。true

      重要

      ノードグループを更新するたびに、新しい AMI や Kubernetes バージョンなどの何らかの理由で、テンプレートの以前の設定を再度変更する必要があります。

    • を使用してノードグループを移行する場合は、新しいノードグループを作成するときに、eksctl--disable-pod-imds オプションを使用します。eksctl create nodegroup

      重要

      新しい AMI や Kubernetes バージョンなど、何らかの理由でノードグループを更新するたびに、新しいノードグループを作成するときに必ずこのオプションを使用してください。

  • ホストネットワークを使用しないすべてのコンテナの IMDSv1 および IMDSv2 へのアクセスブロック インスタンスとポッド仕様に – を持つポッドはホストネットワーキングを使用しますが、従来の理由からも hostNetwork: true へのアクセスが必要です。IMDSv1 各 iptables ノードで (root として) 以下の Amazon Linux コマンドを実行するか、インスタンスブートストラップユーザーデータスクリプトに含めます。

    yum install -y iptables-services iptables --insert FORWARD 1 --in-interface eni+ --destination 169.254.169.254/32 --jump DROP iptables-save | tee /etc/sysconfig/iptables systemctl enable --now iptables
    重要
    • 前述のルールは、名前が eni で始まるノード内のネットワークインターフェイスにのみ適用されます。これは、ホストネットワークを使用しないポッド用に CNI プラグインが作成するすべてのネットワークインターフェイスです。ノードや、ホストネットワーキングを使用するポッド (kube-proxy や CNI プラグインなど) については、IMDS へのトラフィックは中断されません。

    • ネットワークポリシーを実装する場合は、Calcico などのツールを使用すると、前のルールが上書きされる場合があります。ネットワークポリシーを実装するときは、このルールを上書きしないこと、またはポリシーにこのルールが含まれることを確認します。

    • ポッドにセキュリティグループを適用している場合は、前述のコマンドに加えて、ブランチネットワークインターフェイスもあります。また、次のコマンドを実行します。

      iptables -t mangle -A POSTROUTING -o vlan+ --destination 169.254.169.254/32 --jump DROP

      ブランチネットワークインターフェイスの詳細については、「ポッドのセキュリティグループ」を参照してください。