Slide 1

Slide 1 text

EKS AnywhereとIAM Anywhereを組み合わせてみた 氏名 竹中 太基 経歴 2019年4月~ Web系企業入社(バックエンドエンジニア) 2021年7月~ ビッグツリーテクノロジー&コンサルティ ング入社(AWSエンジニア) 趣味 ・コンテナ技術の調べもの ・犬 @tknk_tknk @regmarmcem

Slide 2

Slide 2 text

EKS Anywhereとは https://aws.amazon.com/jp/eks/eks-anywhere/ EKSと同じKubernetes環境(EKS Distro)をオンプレミスに構築する →eksctl anywhere create clusterで、Cluster APIによってクラスタを構築する

Slide 3

Slide 3 text

IAM Roles Anywhereとは https://twitter.com/AWSIdentity/status/1544768575361241088 AWSの外部のリソースに対してIAM権限を与えることができる →X.509証明書を一時的なAWSクレデンシャルと交換することで実現

Slide 4

Slide 4 text

本日やること ・EKS Anywhereでローカルに構築したクラスター上のPodから、IAMによる認可を行う Amazon EKS Anywhere Amazon DynamoDB Amazon S3 AWS Cloud

Slide 5

Slide 5 text

EKS Anywhere Local Clusterの構築 ➜ CLUSTER_NAME=dev-cluster ➜ eksctl anywhere generate clusterconfig $CLUSTER_NAME --provider docker > $CLUSTER_NAME.yaml ➜ eksctl anywhere create cluster -f $CLUSTER_NAME.yaml ➜ export KUBECONFIG=${PWD}/dev-cluster/generated/dev-cluster.kind.kubeconfig Warning EKS Anywhere only works on computers with x86 and amd64 process architecture. It currently will not work on computers with Apple Silicon or Arm based processors. →おうちKubernetes上には構築できないので、WSL2上にローカルクラスタを作成 環境 ・Ubuntu20.04 on WSL2 on Windows11 Local Clusterの立ち上げ完了!(超簡単)

Slide 6

Slide 6 text

IAM Roles Anywhereの構築(Trust anchor) ➜ openssl genrsa -out test_root_ca.key 4096 ➜ openssl req -new -key test_root_ca.key -out test_root_ca.csr # CNをTestCAにすること ➜ openssl x509 -req -days 3650 -in test_root_ca.csr -extfile ca_extfile.txt -signkey test_root_ca.key -out test_root_ca.crt ①CA証明書の作成 ②証明書(pem形式)を記入し、作成

Slide 7

Slide 7 text

IAM Roles Anywhereの構築(Profiles) ⓪Roleの作成 ... "Condition": { "StringEquals": { "aws:PrincipalTag/x509Subject/CN": “dynamodbclient“ } ... ... "Condition": { "StringEquals": { "aws:PrincipalTag/x509Subject/CN": “s3client“ } ... ①Profileの作成 IAM Roles Anywhereの設定完了 ➜ openssl genrsa -out dynamodbclient.key 4096 ➜ openssl req -new -key dynamodbclient.key -out dynamodbclient.csr # CNをdynamodbclientにすること ➜ openssl x509 -req -CAkey -CA -CAcreateserial -in dynamodbclient.csr –extfile ext.txt -out dynamodbclient.crt ②認証用の証明書を作成

Slide 8

Slide 8 text

アプリケーションの設定 aws_singing_helperで認証情報を取得 ➜ cat ~/.aws/config [profile dynamodbclient] credential_process = aws_signing_helper credential-process --certificate /secret-volume/tls.crt --private-key /secret-volume/tls.key --trust-anchor-arn $TRUST_ANCHOR_ARN --profile-arn $PROFILE_ARN --role-arn $ROLE_ARN …(省略) func main() { sess := session.Must(session.NewSessionWithOptions ( session.Options{Profile: "dynamodbclient“}, )) client := dynamodb.New(sess) …(省略) } アプリケーション側でprofileを指定 FROM ubuntu:20.04 RUN apt update COPY ./config ./ COPY ./dynamodbclient ./ # ビルド済みのGo言語のバイナリを配置 COPY ./aws_signing_helper /bin/ # aws_signing_helperのバイナリを配置 COPY ./dynamodbclient.key ./secret-volume/ COPY ./dynamodbclient.crt ./secret-volume/ ENV AWS_SDK_LOAD_CONFIG=1 ENV AWS_CONFIG_FILE=/config Dockerfile

Slide 9

Slide 9 text

アプリケーションの設定 dynamodbclient.yaml ➜ docker build -t dynamodbclient . ➜ docker save dynamodbclient:latest > dynamodbclient.tar ➜ docker cp dynamodbclient.tar dev-cluster-eks-a-cluster-control-plane:/ ➜ docker exec -it dev-cluster-eks-a-cluster-control-plane bash bash-4.2# ctr -n k8s.io images import dynamodbclient.tar bash-4.2# exit ➜ k create secret tls dynamodb-secret --cert=dynamodbclient.crt --key=dynamodbclient.key ➜ k apply –f dynamodbclient.yaml kind: Pod spec: containers: - image: dynamodbclient:latest imagePullPolicy: Never name: dynamodbclient command: ["/bin/bash", "-c", "/dynamodbclient >> /log/dynamodbclient.log"] volumeMounts: - name: secret-volume mountPath: /secret-volume volumes: - name: secret-volume secret: secretName: dynamodb-secret Dockerイメージをcontrol planeにロードし、ローカルイメージを用いるPodを作成

Slide 10

Slide 10 text

アプリケーションの設定 ➜ docker exec -it dev-cluster-eks-a-cluster-control-plane bash bash-4.2# cat /var/log/dynamodbclient.log current value is as follows { Item: { ID: { N: "1" }, TIME: { S: "2022-08-08 00:54:20.269041775 +0000 UTC m=+0.003399239" } } } hostPathにログを出力するように設定したため、control planeからログを確認

Slide 11

Slide 11 text

感想 ➜ aws_signing_helper credential-process --certificate <(echo $CERT) --private-key <(echo $PRIVATE_KEY) --trust-anchor-arn --profile-arn --role-arn ➜ aws_signing_helper credential-process --certificate <(echo $CERT) --private-key /secret-volume/tls.key --trust-anchor-arn --profile-arn --role-arn これはNG これはOK ・DynamoDBやS3の認可のためにIAMユーザーを作らなくてもよいのはいい。 ・認証用の秘密鍵をどこに持たせるのがいいかはあまり自信がないのでご意見あれば伺 いたいです→今回はTLS Secretとしてマウントした ・aws_signing_helperはオープンソースではなく、SDKに同様の機能が今のところない ため今後に期待 おまけ https://github.com/regmarmcem/iam-anywhere-example コード