サービスアカウントの IAM ロール
IAM ロールを Kubernetes サービスアカウントに関連付けることができます。このサービスアカウントは、そのサービスアカウントを使用するポッドのコンテナ AWS にアクセス許可を提供できます。この機能を使用すると、拡張されたアクセス許可を Amazon EKS ノードの IAM ロール に提供する必要がなくなります。そのノードに置かれたポッドは、AWS API を呼び出すことができます。
アプリケーションは AWS 認証情報で AWS API リクエストに署名する必要があります。この機能により、Amazon EC2 インスタンスプロファイルで Amazon EC2 インスタンスに認証情報を提供する場合と類似した方法で、アプリケーションで使用される認証情報を管理できるようになります。AWS 認証情報を作成してコンテナに配布したり、Amazon EC2 インスタンスのロールを使用したりする代わりに、IAM ロールを Kubernetes サービスアカウントと関連付けることができます。ポッドのコンテナにあるアプリケーションは、AWS SDK または AWS CLI を使用して権限付与された AWS のサービスへの API リクエストを実行できます。
Kubernetes サービスアカウントに IAM ロールを割り当てた場合でも、ポッドには (IMDS へのポッドアクセスをブロックしない限り) Amazon EKS ノードの IAM ロール へのアクセス許可が割り当てられます。詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
サービスアカウントの IAM ロール機能には、次の利点があります。
-
最小権限 – サービスアカウント機能のために IAM ロールを使用すると、ノード IAM ロールに拡張されたアクセス許可を提供する必要はなく、そのノード上のポッドは AWS API を呼び出ことができます IAM アクセス許可の範囲をサービスアカウントに設定すると、そのサービスアカウントを使用するポッドのみにそのアクセス許可を付与できます。また、この機能により、
kiam
やkube2iam
などのサードパーティーのソリューションが不要になります。 -
認証情報の分離 – コンテナは、そのコンテナが属するサービスアカウントに関連付けられている IAM ロールの認証情報のみを取得できます。コンテナは、別のポッドに属する別のコンテナを対象とした認証情報にアクセスすることはできません。
-
監査性 – CloudTrail にアクセスしイベントのログ記録を利用することで、遡及的な監査を確実に行えます。
3 つのステップで AWS リソースへのサービスアカウントからのアクセスを有効にする
-
クラスターの IAM OIDC プロバイダーを作成する – クラスターではこの処理を 1 度だけ行う必要があります。
-
IAM ロールを作成して (サービスアカウントに必要なアクセス許可を使用しながら) IAM ポリシーをアタッチする – ポッドが必要とするアクセス許可の個別のコレクションごとに、異なるロールを作成することをお勧めします。
-
IAM ロールをサービスアカウントに関連付ける – AWS リソースへのアクセスを必要とする Kubernetes サービスアカウントごとに、このタスクを完了します。