サービスアカウントを使用して AWS サービスにアクセスするように pods を設定する - Amazon EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

サービスアカウントを使用して AWS サービスにアクセスするように pods を設定する

Pod が AWS のサービスにアクセスする必要がある場合、Kubernetes サービスアカウントを使用するように設定する必要があります。サービスアカウントは、AWS のサービスにアクセスする権限がある AWS Identity and Access Management (IAM) ロールに関連付ける必要があります。

前提条件
  • 既存のクラスター。まだ所有していない場合は、Amazon EKS の使用を開始する でのガイドのいずれかを参照しながら作成します。

  • 既存の Kubernetes サービスアカウントと、サービスアカウントを IAM ロールに関連付ける EKS Pod Identity の関連付け。ロールには、Pods が AWS のサービス を使用するアクセス許可を含む IAM ポリシーが関連付けられている必要があります。サービスアカウントとロールの作成および設定方法については、「IAM ロールを Kubernetes サービスアカウントに割り当てる」を参照してください。

  • ご使用のデバイスまたは で、 のバージョン AWS CLI 以降または AWS CloudShell 以降がインストールおよび設定されていること。現在のバージョンは、aws --version | cut -d / -f2 | cut -d ' ' -f1 で確認できます。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.30 である場合、kubectl のバージョン 1.291.30、または 1.31 が使用できます。kubectl をインストールまたはアップグレードする方法については、「kubectl および eksctl のセットアップ」を参照してください。

  • クラスター構成を含む既存の kubectl config ファイル。kubectl config ファイルの作成については、「kubeconfig ファイルを作成して kubectl を EKS クラスターに接続する」を参照してください。

Pod がサービスアカウントを使用するように設定するには
  1. 次のコマンドを使用し、Pod をデプロイして設定を確認できるデプロイマニフェストを作成します。example values を自分の値に置き換えてください。

    cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
  2. マニフェストをクラスターにデプロイします。

    kubectl apply -f my-deployment.yaml
  3. Pod に必要な環境変数が存在することを確認してください。

    1. 前の手順のデプロイ時にデプロイされた Pods を確認します。

      kubectl get pods | grep my-app

      出力例は次のとおりです。

      my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
    2. Pod にサービスアカウントトークンのファイルがマウントされていることを確認します。

      kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:

      出力例は次のとおりです。

      AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
  4. ロールにアタッチされた IAM ポリシーで割り当てた権限を使用して、Pods が AWS のサービスと対話できることを確認します。

    注記

    Pod がサービスアカウントに関連付けられた IAM ロールの AWS 認証情報を使用する場合、AWS CLI またはその Pod のコンテナ内の他の SDK は、そのロールによって提供される認証情報を使用します。Amazon EKS ノード IAM ロール に提供された認証情報へのアクセスを制限しない場合、Pod は引き続きこれらの認証情報にアクセスできます。詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する」を参照してください。

    Pods が期待どおりにサービスとやり取りできない場合は、次の手順を実行して、すべてが正しく構成されていることを確認してください。

    1. Pods が、EKS Pod Identity の関連付けを介した IAM ロールの引き受けをサポートする AWS SDK バージョンを使用していることを確認します。詳細については、「AWS SDK で Pod Identity を使用する」を参照してください。

    2. デプロイがサービスアカウントを使用していることを確認します。

      kubectl describe deployment my-app | grep "Service Account"

      出力例は次のとおりです。

      Service Account: my-service-account