0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EKS on Fargateでサービスアカウントにロールをアタッチする

Last updated at Posted at 2023-05-24

経緯

fargateノードで動作するPodでロールが紐づけられたサービスアカウントを実行したいが、「これ!」という解決策の記事が見つかりにくかったのでメモ程度に書いています。

補足

eksctlは使用しません。
各用語・単語の説明はしません。

必要なリソース・手順

  • OIDCが利用可能なeks on fargate(構築済みという前提)
  • ロールの作成
  • サービスアカウントの作成
  • 環境変数の設定
  • deployment等へのマウント追記(optional)

設定例

最小限の設定項目を記載しています。詳細はこちら.

ロールの作成

  • k8s上のnamespaceはmy-ns
  • サービスアカウント名はmy-sa
  • ロール名はmy-role

aud, subについてはこちらを!
IAM および AWS STS の条件コンテキストキー.

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Effect": "Allow",
   "Principal": {
    "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.REGION.eks.amazonaws.com/CLUSTER_ID"
   },
   "Action": "sts:AssumeRoleWithWebIdentity",
   "Condition": {
    "StringEquals": {
     "oidc.REGION.eks.amazonaws.com/CLUSTER_ID:sub": 
"system:serviceaccount:my-ns:my-sa",
     "oidc.REGION.eks.amazonaws.com/CLUSTER_ID:aud": "sts.amazonaws.com"
    }
   }
  }
 ]
}

サービスアカウントの作成

ここまででサービスアカウントとIAMロールの関係が認識されますが、このままではPodがロールを引き受けられません。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-sa
  namespace: my-ns
  annotations:
    eks.amazonaws.com/role-arn: "arn:aws:iam::111122223333:role/my-role"

環境変数の設定

configMapなどで環境変数を用意します。

  • 名前はmy-cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-cm
data:
  AWS_REGION: ap-northeast-1
  AWS_ROLE_ARN: "arn:aws:iam::111122223333:role/my-role"

deployment等へのマウント追記 (optinal)

deploymentを前提に書いています。
マウントポイントに注意してください。

# spec.template.spec.containers
volumeMounts:
  - mountPath: "/var/run/secrets/eks.amazonaws.com/serviceaccount/"
    name: aws-token
# spec.template.spec
volumes:
- name: aws-token
  projected:
    sources:
    - serviceAccountToken:
        audience: "sts.amazonaws.com"
        expirationSeconds: 86400
        path: token

確認方法

CloudTrailのログでAssumeRoleWithWebIdentityのアクションの結果が成功になっていたら適切にサービスアカウントがロールを引き受けていることがわかります。

参考

こちらは図があってわかりやすいです。
AWS EKSのIAM Roles for Service Accountsの仕組みを完全に理解する記事。
Amazon EKS Pod Identity Webhook

IAM ロールを引き受けるための Kubernetes サービスアカウントの設定
IAM および AWS STS の条件コンテキストキー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?