サービスアカウントを使用して AWS サービスにアクセスするように pods を設定する - アマゾン 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 CloCloudShell に最新バージョンの AWS CLI がインストールおよび設定されていること。現在のバージョンは、aws --version | cut -d / -f2 | cut -d ' ' -f1 で確認できます。macOS の yumapt-get、または Homebrew などのパッケージマネージャーは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

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

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

    1. 次のコマンドを使用し、Pod をデプロイして設定を確認できるデプロイマニフェストを作成します。example の値は独自の値に置き換えます。

      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 ロール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