ビュー:
プロファイル適用性: レベル1
Kubernetesのワークロードは、Amazon EKS APIに認証するためにクラスターノードのサービスアカウントを使用すべきではありません。他のAWSサービスにAWS IAMを使用して認証する必要がある各Kubernetesワークロードには、専用のサービスアカウントをプロビジョニングする必要があります。
Amazon EKS上で稼働するKubernetesワークロードをAWS APIに対して認証するための手動アプローチには、サービスアカウントキーをKubernetesのシークレットとして保存する方法 (これには手動でのキーのローテーションとキーの漏洩の可能性が伴う) や、基盤となるノードのIAMサービスアカウントを使用する方法があります。しかし、後者は、1つのポッドがサービスにアクセスする必要がある場合に、サービスアカウントを使用するノード上の他のすべてのポッドがアクセスする必要がない場合、マルチテナントノードにおける最小権限の原則に違反します。

監査

クラスター内の各ネームスペースについて、デフォルトのサービスアカウントに割り当てられた権限を確認し、デフォルト以外のロールやクラスター ロールがバインドされていないことを確認してください。
さらに、各デフォルトサービスアカウントに対してautomountServiceAccountToken: false設定が適用されていることを確認してください。

修復

Amazon EKSクラスターのサービスアカウント用IAMロールを使用すると、IAMロールをKubernetesサービスアカウントに関連付けることができます。このサービスアカウントは、そのサービスアカウントを使用する任意のポッド内のコンテナにAWSの権限を提供できます。この機能により、ノード上のポッドがAWS APIを呼び出せるように、ワーカーノードIAMロールに拡張権限を付与する必要がなくなります。
アプリケーションはAWS認証情報を使用してAWS APIリクエストに署名する必要があります。この機能は、Amazon EC2インスタンスプロファイルがAmazon EC2インスタンスに認証情報を提供する方法に似た、アプリケーションの認証情報を管理するための戦略を提供します。
AWS認証情報をコンテナに作成および配布する代わりに、またはAmazon EC2インスタンスのロールを使用する代わりに、IAMロールをKubernetesサービスアカウントに関連付けることができます。ポッドのコンテナ内のアプリケーションは、AWS SDKまたはAWS CLIを使用して、認可されたAWSサービスにAPIリクエストを行うことができます。
サービスアカウントのIAMロール機能は、次の利点を提供します。
  • 最小特権: サービスアカウントのIAMロール機能を使用することで、ワーカーノードのIAMロールに拡張権限を付与して、そのノード上のポッドがAWS APIを呼び出す必要がなくなります。IAM権限をサービスアカウントに限定でき、そのサービスアカウントを使用するポッドのみがその権限にアクセスできます。この機能により、kiamやkube2iamなどのサードパーティソリューションも不要になります。
  • 認証情報の分離: コンテナは、所属するサービスアカウントに関連付けられたIAMロールの認証情報のみを取得できます。コンテナは、別のポッドに属する別のコンテナ用の認証情報にアクセスすることは決してありません。
  • 監査可能性: CloudTrailを通じてアクセスおよびイベントのログ記録が可能であり、事後監査を支援します。