AzureAD連携

Azure Active Directory (Azure AD)

Azure ADはクラウドベースのディレクトリで、ディレクトリサービス、アプリケーションのアクセス管理やID保護機能が統合されたID管理サービスです。 OAuth2プロバイダとしても機能するので、OpenID Connectを利用したKubernetesの認証プロバイダとして利用できます。

Kubernetesの認可とAzure RBAC

Azure RBAC統合では、Azure Kubernetes Service(AKS)でKubernetes認可Webhookサーバが使用されることにより、Azureロールの定義とロールの割り当てを使用して、Azure ADと統合されたKubernetesのクラスタリソースの権限と割り当てを管理できます。Azure RBAC統合されたAKSにkubectlコマンドでアクセスする場合に、Azure ADのログインが求められます。Azure RBAC統合は、AKSのクラスタ作成時または作成後に有効にできます。

  • サービスアカウント認証によるAPI呼び出し

Azure AD統合の詳細な仕組みや設定方法は、公式ドキュメント - Azure ADの統合公式ドキュメント - AKS マネージドAzure Active Directory 統合をご参照ください。

Azure AD統合が有効になっているAKSクラスタのコンフィグファイル(~/.kube/config)をaz aks get-credentialsコマンドで取得すると認証プロバイダがAzure ADに指定されていることがわかります。ここで利用されるAzure ADのアプリケーションはユーザから参照することはできません。


kind: Config
preferences: {}
users:
- name: clusterUser__
  user:
    auth-provider:
      config:
        access-token: (base64でエンコードされたトークン)
        apiserver-id: (Azure ADアプリケーションのサーバアプリケーションID)
        client-id: (Azure ADアプリケーションのアプリケーション(クライアント)ID)
        config-mode: '1'
        environment: AzurePublicCloud
        expires-in: '4809'
        expires-on: '1647241314'
        refresh-token: (base64でエンコードされたトークン)
        tenant-id: (AzureテナントID)
      name: azure

Kubernetesの内部ではどのように設定されているかというと、Azure RBAC統合すると aks-cluster-admin-binding-aad というClusterRoleBindingが作成されます。このClusterRoleBindingでcluster-adminにひもづけられたAzure ADのグループの属するユーザはAzure ADで認証され、cluster-adminのClusterRoleが割り当てられます。


Name:         aks-cluster-admin-binding-aad
Labels:       addonmanager.kubernetes.io/mode=Reconcile
              kubernetes.io/cluster-service=true
Annotations:  
Role:
  Kind:  ClusterRole
  Name:  cluster-admin
Subjects:
  Kind   Name                                  Namespace
  ----   ----                                  ---------
  Group  (Azure ADグループのオブジェクトID)

同じようにAzure ADのグループをRoleBindingの仕組みを利用してKubernetesのRoleにひもづけることも可能です。

Azure ADでの統合認証だけでは、Azure RBACとKubernetes RBACを両方管理する必要がありますが、Azure RBAC統合をすることでKubernetes RBACとの連携が可能になり、より安全にKuberntesのクラスタを管理できるようになります。

Just-in-Time クラスターアクセス

AKSクラスタのアクセス制御を実現する方法として、Azure ADのPrivileged Identity Management(PIM)を利用したJust-In-Timeクラスタアクセスという方法があります。PIMはAzureリソースへのアクセスを管理・制御・監視することができるAzure ADのサービスです。

PIMの特権アクセスグループ(*1)の機能を利用してAKSクラスタのアクセス制御を行うことが可能です。特権アクセスグループに属すメンバーは通常は権限が無効になっていますが、期間を指定して権限のアクティブ化の申請と承認を経て権限が利用できるようになります。対象のアカウントが乗っ取られた場合でも、管理者が申請を拒否することで権限の行使を阻止することができます。このようにすることで、ユーザーに最小権限を与える仕組みを可能とします。

*1:PIMの特権アクセスグループは現在プレビューです。また、Azure AD Premium P2サブスクリプションが必要です。

今回は、KubernetesのRBACによるKubernetesのクラスタをまもる方法を紹介しました。次回は、アプリケーション(Pod)レベルのセキュリティについて紹介します。

著者プロフィール


NRI セキュアテクノロジーズ  田中 悠一郎(たなか ゆういちろう)


2016年に NRIセキュアテクノロジーズ株式会社に入社。セキュリティ診断やペネトレーションテスト に従事 。セキュリティ診断ではWebアプリケーションやスマートフォンアプリ、ブロックチェーンを活用したシステムの診断を担当する他、コンテナオーケストレーションシステムを対象としたコンテナ診断サービスの立ち上げに従事。

Microsoft 大溝 桂(おおみぞ けい)


大学卒業後サン・マイクロシステムズ株式会社に入社。Javaアプリケーションの開発やコンサルティングに従事。その後、レッドハット株式会社にてJBoss ミドルウェア/OpenShiftのソリューションアーキテクトとして Kubernetes/ContainerやRed Hat on Azureを推進する活動を通じてAzureやマイクロソフトのビジネスに興味を持ち、2018年に日本マイクロソフトに入社。日本マイクロソフトではクラウドソリューションアーキテクトとして、エンタープライズのお客様へのAzureの提案やアーキテクチャ設計の支援をしている。