Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
aws-iam-authenticator — AWS IAM 認証情報を使用して Kubernetes クラスターに認証するためのツール | Kitploit
ツール/GitHubGitHub/kubernetes-sigs/aws-iam-authenticator
認証と認可クラウドインフラストラクチャセキュリティクラウドセキュリティアイデンティティ&アクセス管理 (IAM)
GitHubkubernetes-sigs/aws-iam-authenticator

aws-iam-authenticator

AWS IAM 認証情報を使用して Kubernetes クラスターに認証するためのツール

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
2.3k450461日前Kitploit レビュー済み

Kubernetes 用 AWS IAM Authenticator

AWS IAM 認証情報を使用して Kubernetes クラスターへ認証するためのツールです。 このツールの初期開発は Heptio によって主導されました。本プロジェクトは複数のコミュニティエンジニアからの貢献を受けており、現在は Heptio と Amazon EKS OSS Engineers によってメンテナンスされています。

目次

  • なぜこれが必要なのか?
  • どのように使うのか?
  • Kops での使用方法
  • どのように動作するのか?
  • クラスター ID とは何か?
  • 認証情報の指定と AWS プロファイルの使用
  • クラスター外部からの API 認可
  • トラブルシューティング
  • 完全な設定フォーマット
  • 開発
  • コミュニティ、ディスカッション、コントリビューション、サポート

なぜこれが必要なのか?

AWS 上で Kubernetes クラスターを運用している管理者であれば、クラスターのプロビジョニングと更新のために AWS IAM 認証情報をすでに管理しているはずです。 Kubernetes 用 AWS IAM Authenticator を使用することで、Kubernetes アクセスのために別途認証情報を管理する必要がなくなります。 AWS IAM はさらに、帯域外の監査証跡 (CloudTrail 経由) や 2FA/MFA の強制など、数多くの優れた特性を提供します。

AWS 上で Kubernetes インストーラーを構築している場合、Kubernetes 用 AWS IAM Authenticator はブートストラッププロセスを簡素化できます。 新しくインストールしたクラスターから初期管理者認証情報を何とかして安全に持ち出す必要がなくなります。 代わりに、クラスターのプロビジョニング時に専用の KubernetesAdmin ロールを作成し、クラスター管理者のログインを許可するように Authenticator を設定できます。

どのように使うのか?

AWS 上でクラスターが稼働しており、Kubernetes 用 AWS IAM Authenticator のサポートを追加したいと仮定すると、次のことを行う必要があります:

  1. ユーザーの識別に使用する IAM ロールを作成します。
  2. Authenticator サーバーを DaemonSet として実行します。
  3. API サーバーが Authenticator と通信するように設定します。
  4. kubectl が Authenticator トークンを使用するように設定します。

1. IAM ロールの作成

まず、Kubernetes クラスター内のユーザー/グループにマッピングされる 1 つ以上の IAM ロールを作成する必要があります。 最も簡単な方法は、AWS コンソールにログインすることです:

  • 「Role for cross-account access」/「Provide access between AWS accounts you own」オプションを選択します。
  • AWS アカウント ID 番号 (コンソールの右上に表示されます) を貼り付けます。
  • ロールには追加のポリシーをアタッチする必要はありません。

これにより、アカウント内の認可されたユーザー/ロールが引き受け可能な、権限のない IAM ロールが作成されます。 以下で必要となるため、ロールの Amazon Resource Name (ARN) を控えておいてください。

AWS コンソールの代わりに AWS CLI を使用して、これを 1 ステップで行うこともできます:

# get your account ID
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')

# define a role trust policy that opens the role to users in your account (limited by IAM policy)
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')

# create a role named KubernetesAdmin (will print the new role's ARN)
aws iam create-role \
  --role-name KubernetesAdmin \
  --description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)." \
  --assume-role-policy-document "$POLICY" \
  --output text \
  --query 'Role.Arn'

次の手順をスキップして、以下を使用することもできます:

  • 既存のロール(クロスアカウントアクセスロールなど)。
  • IAM ユーザー(下記の mapUsers を参照)。
  • EC2 インスタンスまたはフェデレーティッドロール(下記の mapRoles を参照)。

2. サーバーを実行する

このサーバーは、各マスターノード上で DaemonSet としてホストネットワーキングを使用して実行され、localhost ポートを公開することを想定しています。

ConfigMap と DaemonSet の設定例については、deploy/example.yaml を参照してください。 適用する前に、クラスタに合わせて以下の値を更新してください:

  • config.yaml 内のプレースホルダー IAM ARN(arn:aws:iam::000000000000:...)を置き換えます。
  • clusterID をクラスタ固有の一意な値に設定します。
  • DaemonSet のスケジューリングルールがコントロールプレーンノードのラベル/テイントと一致していることを確認します。

その後、デプロイします:

kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator

Podがコントロールプレーンノード上で実行されると、aws-iam-authenticator server はホスト上の /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml(または --generate-kubeconfig で設定されたパス)にWebhook kubeconfigを作成します。

(オプション) 証明書、鍵、kubeconfigの事前生成

自動インストーラーを構築している場合は、aws-iam-authenticator init を使用して証明書、鍵、Webhook kubeconfigファイルを簡単に事前生成することもできます。 このコマンドはファイルを生成し、設定された出力ディレクトリに配置します。

APIサーバーを起動する前に、各マスターノードでこれを実行できます。 また、マスターノードをプロビジョニングする前に生成し、適切なホストパスにインストールすることもできます。

ファイルを事前生成しない場合、aws-iam-authenticator server がオンデマンドで生成します。 これは動作しますが、インストール後にKubernetes APIサーバーを再起動する必要があります。

3. APIサーバーがサーバーと通信するように設定する

Kubernetes APIは、トークン認証Webhookを使用してAWS IAM Authenticator for Kubernetesと統合されます。 aws-iam-authenticator server を実行すると、Webhook設定ファイルが生成され、ホストのファイルシステムに保存されます。 APIサーバーの設定に、フラグを1つ追加する必要があります:

--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml

多くのクラスタでは、APIサーバーは静的Podとして実行されます。 /etc/kubernetes/manifests/kube-apiserver.yaml にフラグを追加できます。 ホストディレクトリ /etc/kubernetes/aws-iam-authenticator/ がAPIサーバーPodにマウントされていることを確認してください。 また、更新された静的Pod定義を反映するために、マスターノード上でkubeletデーモンを再起動する必要がある場合もあります:

systemctl restart kubelet.service

4. kubernetes ユーザー/グループへの IAM ロール/ユーザーマッピングの作成

サーバーのデフォルトの動作は、設定ファイルの mapUsers および mapRoles フィールドのみからマッピングを取得することです。詳細は以下の完全な設定フォーマットを参照してください。

--backend-mode フラグを使用すると、サーバーが追加の 2 つのバックエンドからマッピングを取得するように設定できます。EKS スタイルの ConfigMap (--backend-mode=EKSConfigMap) または IAMIdentityMapping カスタムリソース (--backend-mode=CRD) です。デフォルトのバックエンドである、サーバーポッドによってマウントされるサーバー設定ファイルは、--backend-mode=MountedFile に対応します。

これらのバックエンドをカンマ区切りのリストで渡すと、サーバーはその順序で検索します。たとえば、--backend-mode=EKSConfigMap,MountedFile の場合、サーバーはまず EKS スタイルの ConfigMap でマッピングを検索し、指定された IAM ロール/ユーザーのマッピングが見つからなければ、サーバー設定ファイルを検索します。同じ IAM ロール/ユーザーのマッピングが複数のバックエンドに存在する場合、サーバーはカンマ区切りリストで先に現れるバックエンドのマッピングを使用します。この例では、EKS ConfigMap でマッピングが見つかった場合、サーバー設定ファイルに重複または競合するマッピングが存在するかどうかに関わらず、そのマッピングが使用されます。

単一のバックエンドを設定した場合、サーバーはそのバックエンドのみから取得し、他のバックエンドが存在しても無視することに注意してください。たとえば、--backend-mode=CRD の場合、サーバーは IAMIdentityMappings のみから取得し、マウントされたファイルや EKS ConfigMap は無視します。

MountedFile

これはマッピングのデフォルトのバックエンドであり、ほとんどのユーザーにとって十分です。詳細は以下の完全な設定フォーマットを参照してください。

CRD (alpha)

このバックエンドは、各 IAM マッピングを IAMIdentityMapping Kubernetes カスタムリソースとしてモデル化します。このアプローチにより、kubectl または API を使用して Kubernetes ネイティブな方法でマッピングを維持できます。さらに、構文エラー (YAML のずれなど) をより簡単に検出でき、すべてのマッピングに影響を与えることはありません。

IAMIdentityMapping CRD をセットアップするには、まず CRD マニフェストを apply する必要があります:

kubectl apply -f deploy/iamidentitymapping.yaml

CRD をデプロイしたら、IAM アイデンティティをモデル化するカスタムリソースを作成できます。./deploy/example-iamidentitymapping.yaml を参照してください:

---
apiVersion: iamauthenticator.k8s.aws/v1alpha1
kind: IAMIdentityMapping
metadata:
  name: kubernetes-admin
spec:
  # Arn of the User or Role to be allowed to authenticate
  arn: arn:aws:iam::XXXXXXXXXXXX:user/KubernetesAdmin
  # Username that Kubernetes will see the user as, this is useful for setting
  # up allowed specific permissions for different users
  username: kubernetes-admin
  # Groups to be attached to your users/roles. For example `system:masters` to
  # create cluster admin, or `system:nodes`, `system:bootstrappers` for nodes to
  # access the API server.
  groups:
  - system:masters

EKSConfigMap

EKS 形式の kube-system/aws-auth ConfigMap がバックエンドとして機能します。この ConfigMap は EKS クラスタとまったく同じ形式であることが想定されています: https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html。これは EKS との間で移行する際にマッピングを維持したい場合や、他の AWS クラスタに加えて EKS を運用していて各クラスタで同じマッピングを持ちたい場合に便利です。

DynamicFile

cfg.dynamicfilepath で指定されたローカルファイルをバックエンドとして機能させることができます。ファイルの 内容は EKSConfigMap とまったく同じ形式であることが想定されています。このファイルの内容が 変更されるたびに、authenticator は自動的にそれを再読み込みします。これにより ARN マッピングの管理がより柔軟になります。

DynamicFile モードの設定方法については https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/hack/dev/authenticator_with_dynamicfile_mode.yaml を確認してください。

ツールをダウンロード