Amazon EKS クラスターのランタイムカバレッジとトラブルシューティング - Amazon GuardDuty

Amazon EKS クラスターのランタイムカバレッジとトラブルシューティング

Runtime Monitoring を有効にして EKS の GuardDuty セキュリティエージェント (アドオン) をインストールした後、EKS クラスターのカバレッジの評価を開始できます。

カバレッジ統計の確認

自分のアカウントまたはメンバーアカウントに関連付けられた EKS クラスターのカバレッジ統計は、選択した AWS リージョン のすべての EKS クラスターに対する正常な EKS クラスターの割合です。次の式はこれを次のように表します。

(正常なクラスター/すべてのクラスター)*100

いずれかのアクセス方法を選択して、アカウントのカバレッジ統計を確認してください。

Console
  • AWS Management Console にサインインし、https://console.aws.amazon.com/guardduty/ で GuardDuty コンソールを開きます。

  • ナビゲーションペインで、[Runtime Monitoring] を選択します。

  • [EKS クラスターのランタイムカバレッジ] タブを選択します。

  • [EKS クラスターのランタイムカバレッジ] タブでは、[クラスターリスト] テーブルにあるカバレッジステータス別に集計されたカバレッジ統計を表示できます。

    • [クラスターリスト] テーブルは次の列でフィルタリングできます。

      • クラスター名

      • アカウント ID

      • [エージェント管理タイプ]

      • [カバレッジステータス]

      • [アドオンバージョン]

  • EKS クラスターのいずれかの [カバレッジステータス][異常] の場合、[問題] 列には、ステータスが [異常] である理由に関する追加情報が含まれている場合があります。

API/CLI
  • 独自の有効なディテクター ID、リージョン、およびサービスエンドポイントを使用して ListCoverage API を実行します。この API を使用して、クラスターリストをフィルタリングしたり、ソートしたりできます。

    • 以下の CriterionKey のオプションのいずれかを使用して例 filter-criteria を変更できます。

      • ACCOUNT_ID

      • CLUSTER_NAME

      • RESOURCE_TYPE

      • COVERAGE_STATUS

      • ADDON_VERSION

      • MANAGEMENT_TYPE

    • 以下のオプションで sort-criteria の例 AttributeName を変更できます。

      • ACCOUNT_ID

      • CLUSTER_NAME

      • COVERAGE_STATUS

      • ISSUE

      • ADDON_VERSION

      • UPDATED_AT

    • max-results (最大 50) を変更できます。

    • アカウントと現在のリージョンの detectorId を検索するには、https://console.aws.amazon.com/guardduty/ コンソールの [設定] ページを参照するか、ListDetectors API を実行します。

    aws guardduty --region us-east-1 list-coverage --detector-id 12abc34d567e8fa901bc2d34e56789f0 --sort-criteria '{"AttributeName": "EKS_CLUSTER_NAME", "OrderBy": "DESC"}' --filter-criteria '{"FilterCriterion":[{"CriterionKey":"ACCOUNT_ID", "FilterCondition":{"EqualsValue":"111122223333"}}] }' --max-results 5
  • GetCoverageStatistics API を実行すると、statisticsType に基づいてカバレッジ集計された統計情報を取得できます。

    • statisticsType を次のオプションのいずれかに変更できます。

      • COUNT_BY_COVERAGE_STATUS - カバレッジステータス別に集計された EKS クラスターのカバレッジ統計を表します。

      • COUNT_BY_RESOURCE_TYPE - リスト内の AWS リソースのタイプに基づいて集計されたカバレッジ統計。

      • コマンドで例 filter-criteria を変更できます。CriterionKey に対して次のオプションを設定できます。

        • ACCOUNT_ID

        • CLUSTER_NAME

        • RESOURCE_TYPE

        • COVERAGE_STATUS

        • ADDON_VERSION

        • MANAGEMENT_TYPE

    • アカウントと現在のリージョンの detectorId を検索するには、https://console.aws.amazon.com/guardduty/ コンソールの [設定] ページを参照するか、ListDetectors API を実行します。

    aws guardduty --region us-east-1 get-coverage-statistics --detector-id 12abc34d567e8fa901bc2d34e56789f0 --statistics-type COUNT_BY_COVERAGE_STATUS --filter-criteria '{"FilterCriterion":[{"CriterionKey":"ACCOUNT_ID", "FilterCondition":{"EqualsValue":"123456789012"}}] }'

EKS クラスターのカバレッジステータスが [異常] である場合は、「Amazon EKS ランタイムカバレッジの問題のトラブルシューティング」を参照してください。

カバレッジステータス変更時の EventBridge 通知

アカウントの EKS クラスターのカバレッジステータスが [異常] と表示されることがあります。カバレッジステータスが [異常] になったことを検出するためにカバレッジステータスを定期的にモニタリングし、ステータスが [異常] の場合はトラブルシューティングすることをお勧めします。または、Amazon EventBridge ルールを作成して、カバレッジステータスが Unhealthy から Healthy に変更された場合やそれ以外の変更があった場合に通知を受け取ることもできます。デフォルトでは、GuardDuty はこれをアカウントの EventBridge バスに公開します。

通知スキーマの例

EventBridge のルールでは、あらかじめ定義されたサンプルイベントとイベントパターンを使用して、カバレッジステータスの通知を受け取ることができます。EventBridge ルールの作成の詳細については、「Amazon EventBridge ユーザーガイド」の「ルールの作成」を参照してください。

さらに、次の通知スキーマの例を使用して、カスタムイベントパターンを作成します。アカウントの値を必ず置き換えてください。Amazon EKS クラスターのカバレッジステータスが Healthy から Unhealthy に変更されたときに通知を受け取るには、detail-typeGuardDuty Runtime Protection Unhealthy である必要があります。カバレッジステータスが Unhealthy から Healthy に変更されたときに通知を受け取るには、detail-type の値を GuardDuty Runtime Protection Healthy に置き換えます。

{ "version": "0", "id": "event ID", "detail-type": "GuardDuty Runtime Protection Unhealthy", "source": "aws.guardduty", "account": "AWS アカウント ID", "time": "event timestamp (string)", "region": "AWS リージョン", "resources": [ ], "detail": { "schemaVersion": "1.0", "resourceAccountId": "string", "currentStatus": "string", "previousStatus": "string", "resourceDetails": { "resourceType": "EKS", "eksClusterDetails": { "clusterName": "string", "availableNodes": "string", "desiredNodes": "string", "addonVersion": "string" } }, "issue": "string", "lastUpdatedAt": "timestamp" } }

Amazon EKS ランタイムカバレッジの問題のトラブルシューティング

EKS クラスターのカバレッジステータスが Unhealthy の場合、GuardDuty コンソールの [問題] 列または CoverageResource データ型を使用して、対応するエラーを確認できます。

包含タグまたは除外タグを使用して EKS クラスターを選択的にモニタリングする場合、タグの同期に時間がかかることがあります。これにより、関連する EKS クラスターのカバレッジステータスに影響が及ぶ可能性があります。対応するタグ (包含または除外) を削除してから、もう一度追加してみることができます。詳細については、「Amazon EKS ユーザーガイド」の「Amazon EKS リソースのタグ付け」を参照してください。

カバレッジ問題の構造は Issue type:Extra information です。通常、問題にはオプションの追加情報があり、特定のクライアント側の例外や問題に関する説明が含まれる場合があります。追加情報に基づき、EKS クラスターのカバレッジの問題をトラブルシューティングするための推奨ステップを以下の表に示します。

問題のタイプ (プレフィックス)

追加情報

推奨されるトラブルシューティングの手順

アドオンの作成に失敗

アドオン aws-guardduty-agent は、クラスター ClusterName の現在のクラスターバージョンと互換性がありません。指定されたアドオンはサポートされていません。

aws-guardduty-agent EKS アドオンのデプロイをサポートする Kubernetes バージョンのいずれかを使用していることを確認してください。詳細については、「GuardDuty セキュリティエージェントでサポートされている Kubernetes のバージョン」を参照してください。Kubernetes バージョンの更新については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

アドオンの作成に失敗

アドオンの更新に失敗

アドオンのステータスが異常

EKS アドオンの問題 - AddonIssueCode: AddonIssueMessage

特定のアドオン問題コードの推奨ステップについては、「Troubleshooting steps for Addon creation/updatation error with Addon issue code」を参照してください。

この問題で発生する可能性のあるアドオンの問題コードのリストについては、「AddonIssue」を参照してください。

VPC エンドポイントの作成に失敗

VPC エンドポイントの作成は、共有 VPC vpcId ではサポートされていません

Runtime Monitoring では、組織内の共有 VPC の使用がサポートされるようになりました。アカウントがすべての前提条件を満たしていることを確認します。詳細については、「共有 VPC を使用するための前提条件」を参照してください。

自動エージェント設定で共有 VPC を使用する場合のみ

共有 VPC vpcId の所有者アカウント ID 111122223333 では、Runtime Monitoring、自動エージェント設定、またはその両方が有効になっていません。

共有 VPC 所有者アカウントは、少なくとも 1 つのリソースタイプ (Amazon EKS または Amazon ECS (AWS Fargate)) の Runtime Monitoring および自動エージェント設定を有効にする必要があります。詳細については、「GuardDuty Runtime Monitoring に固有の前提条件」を参照してください。

プライベート DNS を有効にするには、enableDnsSupportenableDnsHostnames VPC 属性の両方が vpcId に対して true に設定されている必要があります (サービス: Ec2、ステータス コード: 400、リクエスト ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)。

次の VPC 属性が true - enableDnsSupport および enableDnsHostnames に設定されていることを確認する必要があります。詳細については、「VPC の DNS 属性」を参照してください。

https://console.aws.amazon.com/vpc/ にある Amazon VPC コンソールを使用して Amazon VPC を作成する場合は、必ず [DNS ホスト名を有効にする] および [解決を有効にする] の両方を選択してください。詳細については、「VPC 設定オプション」を参照してください。

共有 VPC エンドポイントの削除に失敗

共有 VPC エンドポイントの削除は、アカウント ID 111122223333、共有 VPC vpcId、所有者アカウント ID 555555555555 では許可されません。

考えられるステップ:
  • 共有 VPC 参加者アカウントの Runtime Monitoring ステータスを無効にしても、共有 VPC エンドポイントポリシーと所有者アカウントに存在するセキュリティグループには影響しません。

    共有 VPC エンドポイントとセキュリティグループを削除するには、共有 VPC 所有者アカウントで Runtime Monitoring または自動エージェント設定ステータスを無効にする必要があります。

  • 共有 VPC 参加者アカウントは、共有 VPC 所有者アカウントでホストされている共有 VPC エンドポイントとセキュリティグループを削除することはできません。

ローカル EKS クラスター

EKS アドオンはローカルのアウトポストクラスターではサポートされていません。

実用的ではありません。

詳細については、「AWS Outposts の Amazon EKS」を参照してください。

EKS Runtime Monitoring の有効化許可が付与されていません

(追加情報が表示される場合と表示されない場合があります)

  1. この問題に関する追加情報がある場合は、根本原因を修正して次の手順に従ってください。

  2. EKS Runtime Monitoring を切り替えて、オフにしてから再度オンにします。GuardDuty エージェントも必ず、GuardDuty を使用して自動的にデプロイするか、手動でデプロイしてください。

進行中の EKS Runtime Monitoring 有効化リソースのプロビジョニング

(追加情報が表示される場合と表示されない場合があります)

実用的ではありません。

EKS Runtime Monitoring を有効にしても、リソースプロビジョニングステップが完了するまでカバレッジステータスが Unhealthy として残る場合があります。カバレッジステータスは定期的に監視および更新されます。

その他 (その他の問題)

承認が失敗したためにエラーが発生しました

EKS Runtime Monitoring を切り替えて、オフにしてから再度オンにします。GuardDuty エージェントも、GuardDuty を使用して自動的にデプロイするか、手動でデプロイするようにしてください。

アドオンの作成または更新エラー

トラブルシューティングのステップ

EKS アドオンの問題 - InsufficientNumberOfReplicas: 必要な数の複製がないため、アドオンは異常です。

  • 問題メッセージを使用して、根本原因を特定して修正できます。クラスターの説明から開始できます。例えば、kubectl describe pods を使用してポッド障害の根本原因を特定します。

    根本原因を修正した後、ステップ (アドオンの作成または更新) を再試行します。

  • 問題が解決しない場合は、Amazon EKS クラスターの VPC エンドポイントが正しく設定されていることを確認します。詳細については、「VPC エンドポイント設定の検証」を参照してください。

EKS アドオンの問題 - AdmissionRequestDenied: 許可ウェブフック "validate.kyverno.svc-fail" がリクエストを拒否しました: リソース違反のポリシー DaemonSet/amazon-guardduty/aws-guardduty-agent: restrict-image-registries: autogen-validate-registries:...

  1. Amazon EKS クラスターまたはセキュリティ管理者は、アドオンの更新をブロックしているセキュリティポリシーを確認する必要があります。

  2. コントローラを無効にする (webhook) か、コントローラが Amazon EKS からのリクエストを受け付けるようにする必要があります。

EKS アドオンの問題 - ConfigurationConflict: 適用しようとしたときにコンフリクトが見つかりました。コンフリクト解決モードのため、続行できません。Conflicts: DaemonSet.apps aws-guardduty-agent - .spec.template.spec.containers[name="aws-guardduty-agent"].image

アドオンを作成または更新するときは、OVERWRITE コンフリクト解決フラグを指定してください。これにより、Kubernetes API を使用して Kubernetes の関連リソースに直接加えられた変更が上書きされる可能性があります。

最初に「アドオンを削除」してから再インストールできます。

EKS アドオンの問題 - AccessDenied: priorityclasses.scheduling.k8s.io "aws-guardduty-agent.priorityclass" is forbidden: User "eks:addon-manager" cannot patch resource "priorityclasses" in API group "scheduling.k8s.io" at the cluster scope

不足している権限を手動で eks:addon-cluster-admin ClusterRoleBinding に追加する必要があります。以下を yaml から eks:addon-cluster-admin に追加します。

--- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: eks:addon-cluster-admin subjects: - kind: User name: eks:addon-manager apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io ---

次のコマンドを使用して、この yaml を Amazon EKS クラスターに適用できるようになります。

kubectl apply -f eks-addon-cluster-admin.yaml

EKS アドオンの問題 - AccessDenied: admission webhook "validation.gatekeeper.sh" denied the request: [all-namespace-must-have-label-owner] All namespaces must have an `owner` label

コントローラを無効にするか、コントローラが Amazon EKS クラスターからのリクエストを受け付けるようにする必要があります。

アドオンを作成または更新する前に、GuardDuty 名前空間を作成して owner というラベルを付けることもできます。

EKS アドオンの問題 - AccessDenied: admission webhook "validation.gatekeeper.sh" denied the request: [allowed-container-registries] container <aws-guardduty-agent> has an invalid image registry

EKS エージェントバージョン 1.6.0 以降のリポジトリ」に記載されているように、アドミッションコントローラーのウェブフックがリージョンのレジストリにアクセスすることを明示的に許可する必要があります。