Azure-docs: AKS dengan RBAC tidak dapat melihat Dasbor dengan Azure AD

Dibuat pada 30 Jan 2019  ·  48Komentar  ·  Sumber: MicrosoftDocs/azure-docs

Saya memiliki cluster AKS yang diaktifkan RBAC dengan integrasi Azure AD yang tepat. Semuanya bekerja dengan baik di bidang kontrol. Namun untuk mengakses dasbor, saya membuat token akses az account get-access-token --query accessToken -o tsv dan saya mulai kubectl-proxy .

Perilaku yang diharapkan : Anggota grup Azure AD harus dapat memiliki izin penuh di dasbor dengan token. Ini berfungsi dengan baik sebelumnya (Cluster hampir berumur sebulan). Sekarang saya memiliki cluster baru.

Perilaku Sebenarnya : Dasbor melarang akses ke admin cluster.

Sebenarnya saya ingin tahu bahwa ketika cluster diaktifkan RBAC dengan integrasi Azure AD yang tepat, apakah memberikan cluster-admin akses ke kubernetes-dashboard akun layanan membuatnya tidak aman? Atau saya memahami dari dokumen bahwa dengan URL dasbor siapa pun dapat mengakses Cluster.

Klarifikasi

  1. Saya memiliki ClusterRoleBinding yang tepat untuk grup AzureAD. (Dengan Peran admin cluster)
  2. Ketika saya menaikkan akun layanan ClusterRoleBinding kubernetes-dashboard menjadi cluster-admin , dasbor berfungsi. (Ini cukup jelas tetapi membuatnya eksplisit)

Detail Dokumen

Jangan edit bagian ini.

Pri1 assigned-to-author container-servicsvc doc-bug triaged

Komentar yang paling membantu

@ MicahMcKittrick-MSFT Saya melalui ini dan berfungsi dengan baik. Saya merujuk yang satu ini
https://docs.microsoft.com/en-us/azure/aks/kubernetes-dashboard#for -rbac-enabled-clusters
tepatnya dengan RBAC untuk dashboard.

You can also integrate Azure Active Directory authentication to provide a more granular level of access. Lebih tertarik tentang cara melakukan ini.!

Semua 48 komentar

@Sudharma dapatkah Anda membagikan dokumen yang Anda maksud agar kami dapat membantu dengan lebih baik?

Apa yang ini?

https://docs.microsoft.com/en-us/azure/aks/aad-integration

@ MicahMcKittrick-MSFT Saya melalui ini dan berfungsi dengan baik. Saya merujuk yang satu ini
https://docs.microsoft.com/en-us/azure/aks/kubernetes-dashboard#for -rbac-enabled-clusters
tepatnya dengan RBAC untuk dashboard.

You can also integrate Azure Active Directory authentication to provide a more granular level of access. Lebih tertarik tentang cara melakukan ini.!

@Sudarma terima kasih untuk itu!

@iainfoulds @seanmck bisakah salah satu dari Anda berkomentar lebih lanjut tentang pertanyaan ini?

@Sudharma mohon maaf atas keterlambatan ini. Saya telah mencoba untuk merepro ini tetapi mengalami masalah mendapatkan pengaturan cluster RBAC menggunakan langganan internal saya. Kami semua memeriksanya dan akan memperbarui secepatnya

@iainfoulds aplogies tetapi saya belum bisa mendapatkan pengaturan lingkungan saya untuk menguji ini secara akurat. Untuk beberapa alasan cluster berkemampuan RBAC saya tidak menyediakan dengan benar bahkan pada langganan pribadi saya. Saya telah mencoba ini selama berhari-hari tanpa hasil. Bisakah Anda mencoba untuk menegur ini juga? Saya hanya tidak beruntung.

CC @ Karishma-Tiwari-MSFT @ jakaruna-MSFT jika mereka dapat mencoba repro juga

@Sudharma mohon maaf atas keterlambatan ini. Saya telah mencoba untuk merepro ini tetapi mengalami masalah mendapatkan pengaturan cluster RBAC menggunakan langganan internal saya. Kami semua memeriksanya dan akan memperbarui secepatnya

Tidak masalah. Namun tolong beri saya informasi terbaru karena saya sangat ingin solusi ini

Itu adalah masalah yang sama dengan saya juga. Saya melihat bahwa prompt login dasbor juga tidak meneruskan token yang dikeluarkan melalui layar login. Itu masih memperlakukan permintaan koneksi dasbor melalui akun layanan.

Selain itu, saya belum memberikan akses dasbor ke akun layanan, karena eskalasi hak istimewa yang dibuatnya.

Singkatnya, akses dasbor melalui proxy berfungsi dengan baik dengan akun layanan, tetapi tidak dengan token akun koneksi OpenID.

Masalah ini tetap menjadi masalah bagi kami juga. Jadi ini +1 saya

+1 di sini juga,

Hai tim,

Apakah Anda dapat memberikan detail lebih lanjut tentang cara kerjanya dan apa yang berbeda dari mesin Kubernetes asli. Saya ingin tahu apakah kami dapat memberikan dukungan untuk hal yang sama. Juga bertanya-tanya, apakah dasbor dapat dikonfigurasi untuk menggunakan Azure AD melalui layanan proxy?

Ada yang punya update tentang ini? Saya dapat mengakses jika saya menarik token atau menggunakan file konfigurasi kube setelah menjalankan "kubectl proxy", tetapi jika saya menjalankan jelajah az aks saya diminta untuk masuk melalui web (meskipun saya sudah melakukan login az) dengan kode perangkat , memasukkan kode membawa saya ke kesalahan pada baris cmd "Token Oauth: Kesalahan Tidak Diketahui". Saya telah mengatur cluster dengan Rbac (dengan registrasi aplikasi klien dan server dan mengatur izin sesuai (https://docs.microsoft.com/en-us/azure/aks/aad-integration).

Satu-satunya hal yang saya tidak yakin adalah bahwa saya telah menggunakan pendaftaran aplikasi untuk klien, server, dan kepala layanan sehingga total 3 pendaftaran aplikasi. Itu disediakan melalui terraform. Dokumen panduan hanya menyebutkan izin untuk pendaftaran aplikasi klien dan server.

Semoga seseorang bisa membantu

Masih menghadapi masalah yang sama. Tidak dapat mengakses dashboard, API atau kubectl menggunakan akun AD

Perintah di bawah ini berfungsi, ini membuat kredensial admin k8s ke /home/user/.kube/config
az aks get-credentials --resource-group xxx-dev-test01 --name xxxk8sdev --admin

Setelah menambahkan cluster role binding dengan pengguna atau grup AD, biasanya pengguna dapat login dengan di bawah ini
az aks get-credentials --resource-group xxx-dev-test01 --name xxxk8sdev

Ini akan meminta token perangkat dan pengguna dapat masuk. Tapi sekarang ini gagal secara konsisten.
Kubectl atau dashboard hanya dapat diakses melalui admin cluster. Jelas, kami tidak dapat memberikan kredibilitas admin klaster kepada semua pengguna.

Maaf, orang-orang mengalami masalah di sini.

Tim teknisi telah mengidentifikasi masalah dan sedang bekerja untuk mengatasinya. Tampaknya ini adalah perubahan dasbor Kubernetes yang mendasari daripada perilaku tertentu di AKS. @ palma21 dapat memberikan konteks tambahan pada garis waktu untuk resolusi.

Masalah @spbreed tampaknya berbeda karena dia menyebutkan tidak dapat diakses melalui kubectl juga (periksa apakah rahasia Anda belum kedaluwarsa dan buka tiket dukungan sehingga kami dapat memeriksa cluster Anda dan membantu).

Untuk sisanya yang mengalami masalah secara eksklusif dengan dasbor, versi dasbor yang lebih baru memerlukan https atau tanda login yang tidak aman atau mereka akan jatuh ke login Akun Layanan.

Untuk memaksa ini, Anda dapat mengedit penerapan dasbor Anda
misalnya.
kubectl edit deploy -n kube-system kubernetes-dashboard

Dan tambahkan ke spesifikasi penampung Anda.

containers:
- args:
  - --authentication-mode=token
  - --enable-insecure-login

Ke depannya, kami akan menerapkan autentikasi token, mengubah port 9090 menjadi 8443, skema menjadi HTTPS, dan menggunakan sertifikat yang ditandatangani sendiri. Ini akan segera keluar dan akan diumumkan di Catatan rilis kami.
https://github.com/Azure/aks/releases

Menghadapi masalah yang sama. Tidak dapat mengakses dashboard, API atau kubectl menggunakan akun AD.

Kesalahan saya: tidak dapat mengakses dasbor K8S menggunakan Akun AD.

Proses apa yang Anda ikuti untuk mengakses dasbor? Sudahkah Anda mencoba komentar saya di atas?

https://github.com/MicrosoftDocs/azure-docs/issues/23789#issuecomment -485010803

@ palma21 Saya baru saja mencoba saran Anda dan masih mendapatkan masalah yang sama dengan daftar kesalahan saat masuk ke dasbor mis

  • kubectl proxy
  • http: // localhost : 8001 / api / v1 / namespaces / kube-system / services / kubernetes-dashboard / proxy / #! / login

configmaps dilarang: Pengguna "clusterAdmin" tidak dapat mencantumkan configmaps di namespace "default"

Saya tidak memiliki pengikatan peran untuk akun layanan 'kubernetes-dashboard'. Saya telah mencoba dengan token akun admin cluster. Sepertinya saya tidak bisa login dengan akun AAD saya agar berfungsi sama sekali meskipun ini adalah admin cluster dan kami memiliki RBAC yang sesuai, apakah token yang dibuat dengan perintah di bawah ini valid untuk login token pembawa?

  • az akun dapatkan-akses-token --query accessToken -o tsv

cuplikan detail pod:

Wadah:
utama:
ID Penampung: buruh pelabuhan: // 610c6b258cde01196c03c918c3acca6c3c6ba531153ad1b7e0f034e032065319
Gambar: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
ID Gambar: docker- dapat ditarik: //k8s.gcr.io/kubernetes-dashboard-amd64@sha256 : 0ae6b69432e78069c5ce2bcde0fe409c5c4d6f0f4d9cd50a17974fea38898747
Porta: 9090 / TCP
Porta Host: 0 / TCP
Args:
--authentication-mode = token
--enable-insecure-login
Status: Berlari
Dimulai: Kam, 25 Apr 2019 12:04:43 +0100

Pesan itu menunjukkan bahwa peran clusterAdmin Anda tidak memiliki izin untuk membuat daftar peta konfigurasi di namespace itu. Bisakah Anda mencoba menambahkan itu ke peran Pengguna Anda dan melihat apakah itu menyelesaikannya?
Jika tidak, kirimkan peran ClusterAdmin Anda yaml dan penerapan dasbor yaml dan saya dapat melihatnya.

Baru saja mencoba lagi dengan akun layanan (bukan dasbor default) dan tampaknya berfungsi dengan baik. Namun, penggunaan token pengguna AAD dengan pengikatan peran admin kluster gagal untuk masuk. Haruskah penggunaan AAD dengan RBAC yang benar dapat masuk ke dasbor dengan token dan menerima tingkat hak istimewa di dasbor sebagaimana ditentukan dalam pengikatan RBAC mereka?

Ya seharusnya. Dapatkah Anda membuat daftar peta konfigurasi di NS default dengan pengguna yang Anda dapatkan tokennya di dasbor k8s? Jika Anda dapat melakukan tindakan itu dengan pengguna maka itu diharapkan, jika tidak, saya akan mengatakan periksa token mana yang Anda berikan ke Dashboard.

Untuk menghindari spamming thread ini yang tampaknya terselesaikan, silakan kirim saya email di jpalma [at] microsoft.com

Untuk memaksa ini, Anda dapat mengedit penerapan dasbor Anda
misalnya.
kubectl edit deploy -n kube-system kubernetes-dashboard

Dan tambahkan ke spesifikasi penampung Anda.

containers:
- args:
  - --authentication-mode=token
  - --enable-insecure-login

Ke depannya, kami akan menerapkan autentikasi token, mengubah port 9090 menjadi 8443, skema menjadi HTTPS, dan menggunakan sertifikat yang ditandatangani sendiri. Ini akan segera keluar dan akan diumumkan di Catatan rilis kami.
https://github.com/Azure/aks/releases

Kalian menjanjikan garis waktu, saat ini tidak ada solusi dan kami kembali menggunakan solusi tidak aman ini. Masalahnya sudah lama terbuka sementara pada saat yang sama ada hal-hal lain yang dihadiri . Bisakah Anda memberi kami garis waktu yang sebenarnya ??

@iainfoulds Bisakah Anda benar-benar memberikan waktu ??
mengutip:

@ palma21 dapat memberikan konteks tambahan pada garis waktu untuk resolusi.

@ palma21 Saat ini solusinya masih jauh dari ideal, karena beberapa alasan baris kode tidak berfungsi,
error: penerapan "kubernetes-dashboard" tidak valid

Ke depannya, kami akan menerapkan autentikasi token, mengubah port 9090 menjadi 8443, skema menjadi HTTPS
Kapan???

Jika manifes penerapan tidak valid, kemungkinan besar ada masalah sintaks atau indentasi. Saya baru saja melakukannya lagi dan berhasil.
Coba dengan inline
args: ["--authentication-mode=token", "--enable-insecure-login"]

Kami harus memiliki perubahan ini sekitar jangka waktu akhir Juni.

Inilah yang saya lakukan berdasarkan catatan @ palma21 :
aks-dashboard.sh

# As a workaround accessing the dashboard using a token without enforcing https secure communication (tunnel is exposed ver http), you can edit the dashboard deployment with adding the following argument
# It is an issue currently being discussed here https://github.com/MicrosoftDocs/azure-docs/issues/23789
# args: ["--authentication-mode=token", "--enable-insecure-login"] under spec: containers
# spec:
#   containers:
#   - name: *****
#     image: *****
#     args: ["--authentication-mode=token", "--enable-insecure-login"]
kubectl edit deploy -n kube-system kubernetes-dashboard

# Get AAD token for the signed in user (given that user has the approperiate access). Use (az login) if you are not signed in
SIGNED_USER_TOKEN=$(az account get-access-token --query accessToken -o tsv)
echo $SIGNED_USER_TOKEN

# establish a tunnel and login via token above
# If AAD enabled, you should see the AAD sign in experience with a link and a code to https://microsoft.com/devicelogin
az aks browse --resource-group $RG --name $CLUSTER_NAME

# You can also use kubectl proxy to establish the tunnel as well
# kubectl proxy
# Then you can navigate to sign in is located http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/login

# Note: you can also use the same process but with generated kubeconfig file for a Service Account that is bound to a specific namespace to login to the dashboad.

Saya mencoba ini:
kubectl edit deploy -n kube-system kubernetes-dashboard
dengan AKS terbaru yang diterapkan pada 2019-09-12.
Notepad dibuka diisi dengan file yaml, tetapi ketika saya menyimpan dan menutup saya menerima kesalahan:

error: deployments.extensions "kubernetes-dashboard" is invalid
error: Edit cancelled, no valid changes were saved.

Ada ide?

Ini sepertinya bug yang cukup besar. Seperti yang saya pahami, Anda tidak dapat menggunakan login AAD untuk mengakses dasbor Kubernetes.

Lebih buruk lagi, dokumentasinya salah, karena itu menyiratkan bahwa Anda dapat:

Saat mengatur otentikasi untuk dasbor Kubernetes, Anda disarankan untuk menggunakan token di atas akun layanan dasbor default. Token memungkinkan setiap pengguna menggunakan izin mereka sendiri. Menggunakan akun layanan dasbor default memungkinkan pengguna untuk melewati izin mereka sendiri dan menggunakan akun layanan sebagai gantinya.

Dari membaca utas ini, ini rusak. Dapatkah bug ini diperbaiki, atau setidaknya dokumentasi diperbarui untuk memperjelas bahwa saat ini tidak memungkinkan?

Tiket ini pertama kali dinaikkan pada 30 Januari, waktu yang lama untuk bug ini terbuka.

Kami harus memiliki perubahan ini sekitar jangka waktu akhir Juni.

@ palma21 Juni telah berlalu, apakah ada ETA untuk perbaikan ini untuk diterapkan?

Kami meluncurkannya, termasuk dokumen baru (yang Anda lihat di atas) tetapi harus memutarnya kembali karena perilaku browser baru dan bug.

Kami sedang mengupayakan perbaikan untuk mendapatkannya pada akhir bulan ini.

Ada solusi untuk mengaktifkan fungsionalitas ini sementara itu yang melibatkan
mengedit penerapan dengan
args: ["--authentication-mode = token", "--enable-insecure-login"]

Kesalahan Anda di atas tampaknya merupakan masalah sintaks atau editor, saya baru saja menguji ulang dan masih berfungsi.

Apakah ada pembaruan tentang bug ini?

Menghadapi masalah yang sama, apakah ada pembaruan tentang ini dan ETA yang akan memperbaikinya?

Astaga, sungguh mengecewakan untuk bertaruh untuk produk Microsoft yang menghabiskan beberapa bulan menggunakan solusi tumpukan penuh menggunakan AKS mereka untuk mengetahui ada bug seperti ini ....

Mengirimkan spam ke masalah ini juga - mengingat hal itu yang dikatakan oleh staf dukungan atasan saya melalui @ Microsoft 1 kepada saya.

Akan sangat menyukai solusi yang _not_ melibatkan mematikan SSL.

1: Menerima instruksi secara pribadi dan langsung dari _Support Escalation Engineer_, yang berasal dari: Layanan dan Dukungan Pelanggan / Dukungan Teknis Microsoft Azure / Tim Azure Containers - EMEA -

Saya menyukai transparansi di sini dan komunikasi yang baik dari MS. 🤦‍♂

@ palma21 Bisakah Anda berbagi jika Anda memiliki pembaruan tentang masalah ini? Terima kasih :)

Akan bagus untuk mendapatkan pembaruan tentang ini

Apakah kami memiliki perbaikan untuk ini atau penyewa cluster AKS yang diaktifkan RBAC saja perlu melalui peretasan saja?

apa nama item simpanan yang dapat kami lacak untuk melihat penyelesaian masalah ini?

Berita terbaru - bahwa saya sebagai orang pribadi yang melalui pekerjaan berbicara dengan beberapa ahli Microsoft - dapat berbagi adalah (dari Pakar Penasihat Arsitek Microsoft K8s yang tidak disebutkan namanya - itu bukan judulnya, ini adalah deskripsi dari judul tersebut) bahwa Plugin Dashboard secara inheren tidak aman dan tidak boleh digunakan.

Saya setuju dengan pernyataan itu, dan saya akan meminta semua calon orang yang datang ke sini menanyakan pertanyaan yang sama membaca / membangun kompetensi di K8s untuk memahami risiko / masalah keamanan yang diperkenalkan oleh plugin seperti itu.

(Untuk keuntungan memiliki UI Web dengan kenop dan dial alih-alih hanya menggunakan alat CLI yang bisa diterapkan dengan sempurna - di antaranya ada lebih banyak lagi yang ditambahkan ke K8 sebagai standar, seperti kustomize ).

Ini dapat dilakukan dengan https://github.com/pusher/oauth2_proxy

@pierluigenoci

Ini dapat dilakukan dengan https://github.com/pusher/oauth2_proxy

Hai
Bisakah Anda menautkan atau membagikan contoh yang bisa diterapkan yang menyertakan yaml untuk masuknya dasbor, values.yaml untuk oauth2_proxy, dan setelan apa pun yang berlaku untuk aplikasi Azure AD?
Saya telah mencoba membuat oauth2_proxy bekerja dengan Azure AD selama beberapa hari tetapi tidak dapat menemukan satu pun contoh lengkap yang bisa diterapkan yang akan menjelaskan cukup detail tentang konfigurasi ini, dan bereksperimen dengan berbagai bendera dan pengaturan hanya membuat saya sejauh ini, tetapi tidak cukup jauh.
Akan sangat menghargainya!

@edemen tips saya:

  • jangan gunakan dashboard AKS default, instal secara terpisah (v1.10.1) dengan helm
    Nilai untuk helm
    nginx.ingress.kubernetes.io/auth-url: "https://yourvalue/oauth2/auth" nginx.ingress.kubernetes.io/auth-signin: "https://yourvalue/oauth2/start?rd=$escaped_request_uri" nginx.ingress.kubernetes.io/configuration-snippet: | auth_request_set $token $upstream_http_authorization; proxy_set_header Authorization $token;
  • instal oauth2_proxy dengan helm https://github.com/helm/charts/blob/master/stable/oauth2-proxy
  • Nilai untuk helm
    extraArgs: provider: "azure" azure-tenant: "yourvalues" whitelist-domain: "yourvalues" cookie-domain: "yourvalues" set-authorization-header: "true"
    dan
    ingress: enabled: true path: /oauth2

Ini sudah cukup.

@pierluigenoci
Terima kasih untuk balasannya.
Saya telah berhasil membuat proxy Azure AD dan oauth2 berfungsi hari ini, tetapi saya menemukan bahwa banyak pengaturan yang berakhir dengan kesalahan 500 yang disebabkan oleh kesalahan 400 yang dikembalikan oleh login.live.com (detail lebih lanjut di https://github.com/oauth2- proxy / oauth2-proxy / issues / 458)
Pada dasarnya, jika saya menggunakan set-authorization-header: "true" , otentikasi dengan proxy oauth2 berhenti bekerja sama sekali dengan Azure. Mencoba mencari tahu mengapa, tapi sejauh ini tidak ada.
Untuk berjaga-jaga, saya memasang proxy oauth2 dengan helm install oauth2-proxy stable/oauth2-proxy -n oauth2-proxy --values oauth2-proxy-values.yaml

Sudahlah. Rupanya Dashboard v1.10.1 bahkan tidak berfungsi di Kubernetes 1.16 yang kita miliki.
Terima kasih

Saya tidak beruntung mendapatkan dasbor Kubernetes out-of-the-box yang bekerja dengan AKS, tetapi saya harus mengakui bahwa saya tidak menghabiskan banyak waktu untuk mengerjakannya. Solusi yang tampaknya berhasil (waktu akan menunjukkan masalah apa pun) adalah dengan menggunakan dasbor standar dengan kubectl proxy dan mengunggah pengguna lokal kubeconfig.

Ini adalah proses multi-langkah yang tidak semudah / sebaik URL sederhana, tetapi tampaknya menjadi cara terbaik untuk menggunakan dasbor yang berjalan di bawah konteks pengguna AD. Saya masih memperhatikan pendekatan yang lebih bersih yang tidak memerlukan banyak penyesuaian dasbor itu sendiri, namun menggunakan Azure AD.

@edemen tentu saja ini hanya bekerja untuk K8s <1.15. Untuk K8s 1.16 Anda harus menunggu hingga rilis resmi dasbor v2.0 baru, saya kira.

Dashboard v2 telah diluncurkan https://github.com/kubernetes/dashboard/releases/tag/v2.0.0 . Tetapi tampaknya memiliki dukungan parsial untuk k8s 1.16

@SayakMukhopadhyay hingga versi v2.0.0-rc3 didukung sepenuhnya. Saya menggunakan RC terbaru dengan versi 1.15 dan 1.16 dan bekerja dengan cukup baik. Saya tidak tahu operasi mana yang perlu Anda lakukan tetapi yang pasti 99,99% penggunaan normal tercakup.

Terima kasih atas masukannya!

Artikel tersebut baru-baru ini diperbarui dengan detail tentang masuk ke dasbor Kubernetes.

tolong-tutup

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

spottedmahn picture spottedmahn  ·  3Komentar

bityob picture bityob  ·  3Komentar

varma31 picture varma31  ·  3Komentar

mrdfuse picture mrdfuse  ·  3Komentar

ianpowell2017 picture ianpowell2017  ·  3Komentar