Azure Kubernetes×スタートアップ+Build速報 - MSTechNight #10のLTで ご紹介させていただきました。
Azure AD Pod Identityの簡単な紹介genboku
View Slide
Azure AD Pod Identityとは?2AKS上で動くアプリケーションからパスワードを必要とせずにAzure上のリソースに安全にアクセスできるようにするための仕組みです。
今回の内容⚫ AAD Pod Identityを3ステップで理解する31ベースとなる知識• Azure ADの”地味な”役割• Service Principal• Managed ID2 使い方• ラベルを振ってURLを叩くだけ3実装例• Application Gateway Ingress Controller• Azure Key Vault Provider for Secrets Store CSI Driver
ベースとなる知識Azure ADと聞いてぱっと連想するのは?4ユーザー情報の認証・認可基盤と回答される方が多いはず…Azure上のリソースを操作するためのサービスアカウント(サービスプリンシパル)を提供する役割も担ってます。
ベースとなる知識参考: 3分でわかるAzureでのService Principalhttps://www.slideshare.net/ToruMakabe/3azure-service-principal5サービスプリンシパルとは?Azure上のリソースをユーザの代わりに認証してもらうユーザーに代わってサービスプリンシパルというアカウントでAzureADにアクセスするaz login --service-principal --username SP_ID--password SP_PASSWORD --tenant TENANT_IDサービスプリンシパルVMAzureリソース
ベースとなる知識6サービスプリンシパルの落とし穴サービスプリンシパルVMサービスプリンシパルを使うためのパスワードを安全に保存する方法がないaz login --service-principal --username SP_ID--password SP_PASSWORD --tenant TENANT_IDAzureリソース
ベースとなる知識7サービスプリンシパルの落とし穴サービスプリンシパルVMAzureKeyVaultAzureKeyVaultからパスワードを取得するために結局、サービスプリンシパルのパスワードをVM内に持つ必要がある
ベースとなる知識8⚫ パスワードレスで使えるサービスプリンシパル⚫ Azureのリソースからのみアクセスできないように制限することで安全を確保マネージド IDとは?AKSでマネージドIDを使いやすくしたのがAzure AD Pod Identityです
まとめAzure AD Pod Identityの役割9AKS上で動くアプリケーションのためのID/認証サポート基盤AKS上で動くアプリケーションからパスワードなしにAzure上のリソースに安全にアクセスできるようにする
使い方10
使い方(準備編)111. AKSにAAD Pod Identityをデプロイする2. マネージドIDをAzureに作成する3. AzureIdentity, AzureIdentityBindingと呼ばれるCRDファイル※をデプロイする※PodとマネージドIDの紐づけ情報を提供します4. マネージドIDを使用したいアプリケーションのPodにラベルをつける
例: Podのマニフェストファイル12apiVersion: v1kind: Podmetadata:name: demolabels:aadpodidbinding: $IDENTITY_NAMEspec:containers:- name: demo(以下略)
使い方(アプリケーション側)13AzureBlob StorageAIMS1. Azure Instance Metadata serviceendpoint にリクエストを投げる※http://169.254.169.254/metadata/identity/oauth2/token123Azure Blob Storageにアクセスする2. Azure ADの認証トークンを取得する3. 認証トークンをヘッダーに乗せてBlobStorageにアクセスする
実装例14
実装例1: Application Gateway IngressController⚫ AzureのManaged WAFであるApplicationGatewayをAKSのIngress Controllerとして使用できるようにする15参考:https://github.com/Azure/application-gateway-kubernetes-ingressここでAzure ADPod Idenitityが使用されている
実装例2: Azure Key Vault Provider forSecrets Store CSI Driver⚫ Azure Key Vaultに安全にアクセスして秘匿情報を取得するためのCSIドライバー⚫ Azure Key Vaultにアクセスする認証方法としてServicePrinicipalの代わりにAAD PodIdentityが選択できる⚫ 絶賛開発中ですが気になる方は下記URLに動作手順が記載されているのでご覧くださいhttps://github.com/Azure/secrets-store-csi-driver-provider-azure/blob/master/docs/pod-identity-mode.md16
まとめAAD Pod IdentityとはAKS上で動くアプリケーションからパスワードを必要とせずにAzure上のリソースに安全にアクセスできるようにするための仕組み171ベースとなる知識(Service Principal, Managed ID)2 使い方• ラベルを振ってURLを叩くだけ3実装例• Application Gateway Ingress Controller• Azure Key Vault Provider for Secrets Store CSI Driver
参考文献18⚫ AAD Pod IdentityのGitHubウェブサイトhttps://github.com/Azure/aad-pod-identity※開発元プロジェクト⚫ AAD Pod Concept Designhttps://github.com/Azure/aad-pod-identity/blob/master/docs/design/concept.png⚫ Pod Identity(MS Azureチームによる技術ブログ)https://medium.com/microsoftazure/pod-identity-5bc0ffb7ebe7※“How does it work?” がシンプルに内部で行っている処理を開設している⚫ Azure Kubernetes Service の Machine Learning Web サービスでAzure AD ID を使用するhttps://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-use-azure-ad-identity※具体的にアプリケーションにどうやって実装すればいいかわかりやすい。Microsoft SDKを利用している場合、いい感じに処理が隠蔽されていることがわかる。⚫ https://github.com/Azure/AKS/issues/1480