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?

EKS Auto mode環境でEKS Pod Identityを使ってKinesisにアクセスしてみた

Posted at

ブログ記事: EKS Pod IdentityでKinesisにアクセスする方法

はじめに

Amazon EKS(Elastic Kubernetes Service)でPod Identityを使用すると、KubernetesポッドからAWSサービスに簡単にアクセスできます。この記事では、EKS Pod Identityを使ってKinesisにアクセスする方法を、実際の成功事例を基に詳細に説明します。初心者でも理解できるように、手順とテスト方法をまとめました。

EKS Pod Identityは、ポッドにIAM権限を付与するプロセスを簡素化する機能で、特にEKS auto modeでは設定が簡単です。今回は、Kinesisストリームへのデータの書き込みと読み込みをテストしながら、その手順を紹介します。

背景

Kinesisはリアルタイムで大量のデータを処理できるAWSのデータストリーミングサービスです。EKS Pod Identityを使うことで、ポッドからKinesisに安全にアクセスでき、従来のIAM Roles for Service Accounts(IRSA)よりも手軽に設定できます。この記事では、実際のログを参考にしながら、設定とテストの流れを解説します。

手順

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

まず、Kubernetesのサービスアカウントを作成します。以下のYAMLファイル(kinesis-sa.yaml)を使います:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: kinesis-sa
  namespace: default

適用します:

kubectl apply -f kinesis-sa.yaml

出力例:

serviceaccount/kinesis-sa created

これで、kinesis-saというサービスアカウントが作成されました。


2. IAMポリシーの作成

KinesisにアクセスするためのIAMポリシーを作成します。以下のJSONファイル(kinesis-policy.json)を用意します:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:PutRecord",
        "kinesis:GetRecords",
        "kinesis:GetShardIterator",
        "kinesis:DescribeStream"
      ],
      "Resource": "arn:aws:kinesis:ap-northeast-1:111122223333:stream/your-stream-name"
    }
  ]
}

ポリシーを作成します:

aws iam create-policy --policy-name KinesisAccessPolicy --policy-document file://kinesis-policy.json

出力例:

{
    "Policy": {
        "PolicyName": "KinesisAccessPolicy",
        "PolicyId": "XXXXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::111122223333:policy/KinesisAccessPolicy",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 0,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "CreateDate": "2025-04-02T17:53:56+00:00",
        "UpdateDate": "2025-04-02T17:53:56+00:00"
    }
}

ここでは、KinesisAccessPolicyというポリシーが作成され、Kinesisへの書き込みや読み込みの権限が設定されました。


3. IAMロールの作成

EKS Pod Identity用のIAMロールを作成します。信頼ポリシー(trust-policy.json)を以下のように定義します:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}

ロールを作成します:

aws iam create-role --role-name KinesisRole --assume-role-policy-document file://trust-policy.json --description "Role for Kinesis access via EKS Pod Identity"

出力例:

{
    "Role": {
        "Path": "/",
        "RoleName": "KinesisRole",
        "RoleId": "XXXXXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::111122223333:role/KinesisRole",
        "CreateDate": "2025-04-02T17:55:46+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "pods.eks.amazonaws.com"
                    },
                    "Action": ["sts:AssumeRole", "sts:TagSession"]
                }
            ]
        }
    }
}

KinesisRoleというロールが作成され、EKS Pod Identityがこのロールを引き受ける準備が整いました。


4. ポリシーのアタッチ

作成したIAMポリシーをIAMロールにアタッチします:

aws iam attach-role-policy --role-name KinesisRole --policy-arn arn:aws:iam::111122223333:policy/KinesisAccessPolicy

これで、KinesisRoleにKinesisへのアクセス権限が付与されました。


5. Pod Identityの関連付け

IAMロールをサービスアカウントに関連付けます:

aws eks create-pod-identity-association --cluster-name your-cluster-name --role-arn arn:aws:iam::111122223333:role/KinesisRole --namespace default --service-account kinesis-sa

出力例:

{
    "association": {
        "clusterName": "your-cluster-name",
        "namespace": "default",
        "serviceAccount": "kinesis-sa",
        "roleArn": "arn:aws:iam::111122223333:role/KinesisRole",
        "associationArn": "arn:aws:eks:ap-northeast-1:111122223333:podidentityassociation/your-cluster-name/a-xxxxxxxxxxxxxxxxxx",
        "associationId": "a-xxxxxxxxxxxxxxxxxx",
        "tags": {},
        "createdAt": "2025-04-03T02:57:19.218000+09:00",
        "modifiedAt": "2025-04-03T02:57:19.218000+09:00"
    }
}

これで、kinesis-saKinesisRoleを使用できるようになりました。


6. テストポッドの作成

サービスアカウントを使用するテストポッドを作成します。以下のYAMLファイル(pod.yaml)を使います:

apiVersion: v1
kind: Pod
metadata:
  name: kinesis-test-pod
  namespace: default
spec:
  serviceAccountName: kinesis-sa
  containers:
  - name: test
    image: amazon/aws-cli
    command: ["sleep", "infinity"]

適用します:

kubectl apply -f pod.yaml

出力例:

pod/kinesis-test-pod created

これで、テスト用のポッドが起動しました。


テスト方法

1. アイデンティティの確認

ポッドに入り、IAMロールが正しく関連付けられているか確認します:

kubectl exec -it kinesis-test-pod -- bash
aws sts get-caller-identity

出力例:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXXX:eks-your-cluster-name-kinesis-te-yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyyy",
    "Account": "111122223333",
    "Arn": "arn:aws:sts::111122223333:assumed-role/KinesisRole/eks-your-cluster-name-kinesis-te-yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyyy"
}

KinesisRoleのARNが表示されれば、Pod Identityが正しく機能しています。


2. Kinesisへの書き込みテスト

Kinesisストリームにデータを書き込みます:

aws kinesis put-record --stream-name your-stream-name --partition-key test-key --data test-data

出力例:

{
    "ShardId": "shardId-000000000001",
    "SequenceNumber": "99999999999999999999999999999999999999999999999999999999"
}

書き込みが成功し、シャードIDとシーケンス番号が返ってきました。


3. Kinesisからの読み込みテスト

まず、シャードイテレータを取得します:

aws kinesis get-shard-iterator --stream-name your-stream-name --shard-id shardId-000000000001 --shard-iterator-type TRIM_HORIZON

出力例:

{
    "ShardIterator": "AAAAAAAAAA..."
}

次に、レコードを読み込みます:

aws kinesis get-records --shard-iterator <your-shard-iterator>

出力例:

{
    "Records": [
        {
            "SequenceNumber": "99999999999999999999999999999999999999999999999999999999",
            "ApproximateArrivalTimestamp": "2025-04-02T18:16:26.769000+00:00",
            "Data": "test-data",
            "PartitionKey": "test-key"
        }
    ],
    "NextShardIterator": "AAAAAAAAAA....",
    "MillisBehindLatest": 0
}

書き込んだデータ(test-data)が正しく読み込まれました。


結論

この記事では、EKS Pod Identityを使ってKinesisにアクセスする方法を、実際の成功事例を基にステップバイステップで解説しました。サービスアカウントの作成からIAMロールの設定、テストポッドでのKinesis操作まで、すべてがスムーズに進みましたね。EKS Pod Identityは、AWSリソースへのアクセスを安全かつ簡単に管理できる強力なツールです。ぜひ参考にしてみてください。

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?