[{"data":1,"prerenderedAt":1347},["ShallowReactive",2],{"docs-page-en-\u002Fdocs\u002Fazure-setup":3,"docs-navigation-en":1244,"docs-surround-en-\u002Fdocs\u002Fazure-setup":1342},{"id":4,"title":5,"body":6,"claimDependencies":1227,"description":12,"extension":1231,"locale":1232,"meta":1233,"missingMedia":1234,"navigation":272,"owner":1235,"path":1236,"reviewStatus":1237,"seo":1238,"staleLinks":1239,"stem":1240,"technicalRisk":1241,"translationKey":1242,"__hash__":1243},"docs_en\u002Fdocs\u002F3.azure-setup.md","Azure Setup Guide",{"type":7,"value":8,"toc":1206},"minimark",[9,13,18,21,55,59,66,83,87,92,162,166,169,174,177,182,305,310,336,340,343,377,381,384,388,391,416,476,479,490,494,497,502,552,557,578,581,585,588,593,625,630,634,803,807,909,913,916,921,978,983,1030,1033,1044,1048,1052,1066,1070,1078,1082,1090,1094,1097,1105,1109,1113,1118,1129,1134,1142,1147,1155,1160,1168,1172,1175,1199,1202],[10,11,12],"p",{},"This guide will walk you through connecting your Azure subscription to Jetscale securely using Azure App Registration with service principal authentication.",[14,15,17],"h2",{"id":16},"prerequisites","Prerequisites",[10,19,20],{},"Before starting, ensure you have:",[22,23,24,32,49],"ol",{},[25,26,27,31],"li",{},[28,29,30],"strong",{},"Azure Subscription Access","\nYou'll need Owner or User Access Administrator role on the subscription",[25,33,34,37],{},[28,35,36],{},"Azure Services Enabled",[38,39,40,43,46],"ul",{},[25,41,42],{},"Azure Cost Management",[25,44,45],{},"Azure Advisor",[25,47,48],{},"Azure Monitor",[25,50,51,54],{},[28,52,53],{},"Azure CLI or Portal Access","\nEither Azure Portal or Azure CLI installed for configuration",[14,56,58],{"id":57},"overview","Overview",[10,60,61,62,65],{},"Jetscale connects to your Azure subscription using an ",[28,63,64],{},"App Registration (Service Principal)"," with read-only RBAC permissions. This approach:",[38,67,68,71,74,77,80],{},[25,69,70],{},"Does not require user credentials",[25,72,73],{},"Provides secure, auditable access via Azure Active Directory",[25,75,76],{},"Supports certificate-based authentication (most secure) or client secrets",[25,78,79],{},"Can be revoked instantly through Azure IAM",[25,81,82],{},"Follows Microsoft security best practices",[14,84,86],{"id":85},"setup-process","Setup Process",[88,89,91],"h3",{"id":90},"step-1-create-an-app-registration","Step 1: Create an App Registration",[22,93,94,100,135],{},[25,95,96,99],{},[28,97,98],{},"Navigate to Microsoft Entra ID"," (formerly Azure Active Directory)\nAzure Portal → Microsoft Entra ID → App registrations",[25,101,102,105],{},[28,103,104],{},"Create New Registration",[38,106,107,110,120,126,132],{},[25,108,109],{},"Click \"New registration\"",[25,111,112,115,116],{},[28,113,114],{},"Name",": ",[117,118,119],"code",{},"jetscale-readonly-access",[25,121,122,125],{},[28,123,124],{},"Supported account types",": Single tenant",[25,127,128,131],{},[28,129,130],{},"Redirect URI",": Leave blank",[25,133,134],{},"Click \"Register\"",[25,136,137,140,143,144],{},[28,138,139],{},"Save Important Values",[141,142],"br",{},"After creation, note these IDs (you'll share them with Jetscale):",[38,145,146,151,156],{},[25,147,148],{},[28,149,150],{},"Application (client) ID",[25,152,153],{},[28,154,155],{},"Directory (tenant) ID",[25,157,158,161],{},[28,159,160],{},"Subscription ID"," (from Subscriptions page)",[88,163,165],{"id":164},"step-2-choose-authentication-method","Step 2: Choose Authentication Method",[10,167,168],{},"Jetscale supports two authentication methods. Choose the one that fits your security policy:",[170,171,173],"h4",{"id":172},"option-a-certificate-based-authentication-recommended","Option A: Certificate-Based Authentication (Recommended)",[10,175,176],{},"Certificate-based authentication is the most secure option and recommended for production environments.",[10,178,179],{},[28,180,181],{},"Generate a Certificate:",[183,184,189],"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Generate a self-signed certificate (valid for 2 years)\nopenssl req -x509 -newkey rsa:4096 -keyout jetscale-cert-key.pem \\\n  -out jetscale-cert-public.pem -days 730 -nodes \\\n  -subj \"\u002FCN=jetscale-read-access\u002FO=YourOrganization\u002FC=US\"\n\n# Extract public certificate for Azure Portal upload\nopenssl x509 -in jetscale-cert-public.pem -out jetscale-cert.cer -outform DER\n","bash","",[117,190,191,200,230,251,267,274,280],{"__ignoreMap":188},[192,193,196],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"sHwdD","# Generate a self-signed certificate (valid for 2 years)\n",[192,201,203,207,211,214,217,220,223,226],{"class":194,"line":202},2,[192,204,206],{"class":205},"sBMFI","openssl",[192,208,210],{"class":209},"sfazB"," req",[192,212,213],{"class":209}," -x509",[192,215,216],{"class":209}," -newkey",[192,218,219],{"class":209}," rsa:4096",[192,221,222],{"class":209}," -keyout",[192,224,225],{"class":209}," jetscale-cert-key.pem",[192,227,229],{"class":228},"sTEyZ"," \\\n",[192,231,233,236,239,242,246,249],{"class":194,"line":232},3,[192,234,235],{"class":209},"  -out",[192,237,238],{"class":209}," jetscale-cert-public.pem",[192,240,241],{"class":209}," -days",[192,243,245],{"class":244},"sbssI"," 730",[192,247,248],{"class":209}," -nodes",[192,250,229],{"class":228},[192,252,254,257,261,264],{"class":194,"line":253},4,[192,255,256],{"class":209},"  -subj",[192,258,260],{"class":259},"sMK4o"," \"",[192,262,263],{"class":209},"\u002FCN=jetscale-read-access\u002FO=YourOrganization\u002FC=US",[192,265,266],{"class":259},"\"\n",[192,268,270],{"class":194,"line":269},5,[192,271,273],{"emptyLinePlaceholder":272},true,"\n",[192,275,277],{"class":194,"line":276},6,[192,278,279],{"class":198},"# Extract public certificate for Azure Portal upload\n",[192,281,283,285,288,291,293,296,299,302],{"class":194,"line":282},7,[192,284,206],{"class":205},[192,286,287],{"class":209}," x509",[192,289,290],{"class":209}," -in",[192,292,238],{"class":209},[192,294,295],{"class":209}," -out",[192,297,298],{"class":209}," jetscale-cert.cer",[192,300,301],{"class":209}," -outform",[192,303,304],{"class":209}," DER\n",[10,306,307],{},[28,308,309],{},"Upload to App Registration:",[22,311,312,315,318,324,327,330],{},[25,313,314],{},"Navigate to your App Registration → Certificates & secrets → Certificates",[25,316,317],{},"Click \"Upload certificate\"",[25,319,320,321],{},"Select ",[117,322,323],{},"jetscale-cert.cer",[25,325,326],{},"Add description: \"Jetscale Access Certificate\"",[25,328,329],{},"Click \"Add\"",[25,331,332,335],{},[28,333,334],{},"Save the Thumbprint"," displayed",[170,337,339],{"id":338},"option-b-client-secret-authentication","Option B: Client Secret Authentication",[10,341,342],{},"If your organization prefers secrets over certificates:",[22,344,345,348,351,359,365,367],{},[25,346,347],{},"Navigate to App Registration → Certificates & secrets",[25,349,350],{},"Click \"New client secret\"",[25,352,353,115,356],{},[28,354,355],{},"Description",[117,357,358],{},"Jetscale Access",[25,360,361,364],{},[28,362,363],{},"Expires",": Choose duration (recommend 24 months or less per your security policy)",[25,366,329],{},[25,368,369,372,373,376],{},[28,370,371],{},"Important",": Copy the secret ",[28,374,375],{},"Value"," immediately. It's only shown once",[88,378,380],{"id":379},"step-3-assign-rbac-permissions","Step 3: Assign RBAC Permissions",[10,382,383],{},"Jetscale requires read-only access at the subscription level. You can choose between built-in roles or a custom role:",[170,385,387],{"id":386},"option-a-use-built-in-roles-simplest","Option A: Use Built-in Roles (Simplest)",[10,389,390],{},"Assign these three built-in roles to your App Registration:",[22,392,393,403,413],{},[25,394,395,396,399,400],{},"Navigate to ",[28,397,398],{},"Subscriptions"," → Select your subscription → ",[28,401,402],{},"Access control (IAM)",[25,404,405,406,409,410],{},"Click ",[28,407,408],{},"Add"," → ",[28,411,412],{},"Add role assignment",[25,414,415],{},"Assign each of the following roles:",[417,418,419,435],"table",{},[420,421,422],"thead",{},[423,424,425,429,432],"tr",{},[426,427,428],"th",{},"Role",[426,430,431],{},"Scope",[426,433,434],{},"Purpose",[436,437,438,452,464],"tbody",{},[423,439,440,446,449],{},[441,442,443],"td",{},[28,444,445],{},"Reader",[441,447,448],{},"Subscription",[441,450,451],{},"Read-only access to all resources",[423,453,454,459,461],{},[441,455,456],{},[28,457,458],{},"Cost Management Reader",[441,460,448],{},[441,462,463],{},"Access to cost and usage data",[423,465,466,471,473],{},[441,467,468],{},[28,469,470],{},"Monitoring Reader",[441,472,448],{},[441,474,475],{},"Access to Azure Monitor metrics",[10,477,478],{},"For each role:",[38,480,481,487],{},[25,482,483,484,486],{},"Search for your App Registration by name (",[117,485,119],{},")",[25,488,489],{},"Select it and click \"Save\"",[170,491,493],{"id":492},"option-b-create-custom-role-advanced","Option B: Create Custom Role (Advanced)",[10,495,496],{},"For granular control, create a custom role with specific permissions.",[10,498,499],{},[28,500,501],{},"What the Custom Role Includes:",[38,503,504,510,516,522,528,534,540,546],{},[25,505,506,509],{},[28,507,508],{},"Compute",": VM metadata, sizing information, performance metrics",[25,511,512,515],{},[28,513,514],{},"Cost Management",": Cost analysis, usage data, billing information",[25,517,518,521],{},[28,519,520],{},"Storage",": Storage account metadata and analytics",[25,523,524,527],{},[28,525,526],{},"Databases",": Azure SQL, MySQL, PostgreSQL, MariaDB, CosmosDB metadata",[25,529,530,533],{},[28,531,532],{},"Caching",": Redis and Redis Enterprise configuration",[25,535,536,539],{},[28,537,538],{},"Networking",": Virtual networks, load balancers, application gateways",[25,541,542,545],{},[28,543,544],{},"Monitoring",": Azure Monitor metrics and insights",[25,547,548,551],{},[28,549,550],{},"Advisor",": Azure Advisor recommendations",[10,553,554],{},[28,555,556],{},"Security Safeguards:",[38,558,559,562,572,575],{},[25,560,561],{},"All actions are read-only",[25,563,564,565,568,569,486],{},"Explicitly excludes storage account key access (",[117,566,567],{},"listkeys",", ",[117,570,571],{},"regeneratekey",[25,573,574],{},"No write, modify, or delete permissions",[25,576,577],{},"No access to actual data stored in databases or storage accounts",[10,579,580],{},"The Jetscale team will provide the complete custom role definition during onboarding.",[88,582,584],{"id":583},"step-4-securely-share-credentials","Step 4: Securely Share Credentials",[10,586,587],{},"Share the following information with Jetscale:",[10,589,590],{},[28,591,592],{},"Required Information:",[38,594,595,601,605,609,615],{},[25,596,597,600],{},[28,598,599],{},"Tenant ID"," (Directory ID)",[25,602,603],{},[28,604,160],{},[25,606,607],{},[28,608,150],{},[25,610,611,614],{},[28,612,613],{},"Authentication method chosen"," (certificate or secret)",[25,616,617,620,621,624],{},[28,618,619],{},"Certificate Thumbprint"," (if using certificates) OR ",[28,622,623],{},"Client Secret"," (if using secrets)",[10,626,627],{},[28,628,629],{},"Security Best Practices for Sharing:",[170,631,633],{"id":632},"for-certificate-based-authentication","For Certificate-Based Authentication",[22,635,636,759,797,800],{},[25,637,638,639],{},"Create a credentials metadata file (doesn't contain the private key):",[183,640,644],{"className":641,"code":642,"language":643,"meta":188,"style":188},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"tenant_id\": \"[YOUR_TENANT_ID]\",\n  \"subscription_id\": \"[YOUR_SUBSCRIPTION_ID]\",\n  \"client_id\": \"[YOUR_CLIENT_ID]\",\n  \"auth_method\": \"certificate\",\n  \"certificate_thumbprint\": \"[CERTIFICATE_THUMBPRINT]\"\n}\n","json",[117,645,646,651,676,696,716,736,754],{"__ignoreMap":188},[192,647,648],{"class":194,"line":195},[192,649,650],{"class":259},"{\n",[192,652,653,656,660,663,666,668,671,673],{"class":194,"line":202},[192,654,655],{"class":259},"  \"",[192,657,659],{"class":658},"spNyl","tenant_id",[192,661,662],{"class":259},"\"",[192,664,665],{"class":259},":",[192,667,260],{"class":259},[192,669,670],{"class":209},"[YOUR_TENANT_ID]",[192,672,662],{"class":259},[192,674,675],{"class":259},",\n",[192,677,678,680,683,685,687,689,692,694],{"class":194,"line":232},[192,679,655],{"class":259},[192,681,682],{"class":658},"subscription_id",[192,684,662],{"class":259},[192,686,665],{"class":259},[192,688,260],{"class":259},[192,690,691],{"class":209},"[YOUR_SUBSCRIPTION_ID]",[192,693,662],{"class":259},[192,695,675],{"class":259},[192,697,698,700,703,705,707,709,712,714],{"class":194,"line":253},[192,699,655],{"class":259},[192,701,702],{"class":658},"client_id",[192,704,662],{"class":259},[192,706,665],{"class":259},[192,708,260],{"class":259},[192,710,711],{"class":209},"[YOUR_CLIENT_ID]",[192,713,662],{"class":259},[192,715,675],{"class":259},[192,717,718,720,723,725,727,729,732,734],{"class":194,"line":269},[192,719,655],{"class":259},[192,721,722],{"class":658},"auth_method",[192,724,662],{"class":259},[192,726,665],{"class":259},[192,728,260],{"class":259},[192,730,731],{"class":209},"certificate",[192,733,662],{"class":259},[192,735,675],{"class":259},[192,737,738,740,743,745,747,749,752],{"class":194,"line":276},[192,739,655],{"class":259},[192,741,742],{"class":658},"certificate_thumbprint",[192,744,662],{"class":259},[192,746,665],{"class":259},[192,748,260],{"class":259},[192,750,751],{"class":209},"[CERTIFICATE_THUMBPRINT]",[192,753,266],{"class":259},[192,755,756],{"class":194,"line":282},[192,757,758],{"class":259},"}\n",[25,760,761,762],{},"Encrypt both the certificate and metadata file:",[183,763,765],{"className":185,"code":764,"language":187,"meta":188,"style":188},"gpg --symmetric --cipher-algo AES256 jetscale-cert-key.pem\ngpg --symmetric --cipher-algo AES256 jetscale-azure-creds.json\n",[117,766,767,784],{"__ignoreMap":188},[192,768,769,772,775,778,781],{"class":194,"line":195},[192,770,771],{"class":205},"gpg",[192,773,774],{"class":209}," --symmetric",[192,776,777],{"class":209}," --cipher-algo",[192,779,780],{"class":209}," AES256",[192,782,783],{"class":209}," jetscale-cert-key.pem\n",[192,785,786,788,790,792,794],{"class":194,"line":202},[192,787,771],{"class":205},[192,789,774],{"class":209},[192,791,777],{"class":209},[192,793,780],{"class":209},[192,795,796],{"class":209}," jetscale-azure-creds.json\n",[25,798,799],{},"Email the encrypted files to your Jetscale contact",[25,801,802],{},"Share the decryption password via a separate channel (e.g., Slack, phone)",[170,804,806],{"id":805},"for-secret-based-authentication","For Secret-Based Authentication",[22,808,809,903,906],{},[25,810,811,812],{},"Create an encrypted credentials file:",[183,813,815],{"className":185,"code":814,"language":187,"meta":188,"style":188},"# Create credentials file\ncat > jetscale-azure-creds.json \u003C\u003CEOF\n{\n  \"tenant_id\": \"[YOUR_TENANT_ID]\",\n  \"subscription_id\": \"[YOUR_SUBSCRIPTION_ID]\",\n  \"client_id\": \"[YOUR_CLIENT_ID]\",\n  \"auth_method\": \"secret\",\n  \"client_secret\": \"[YOUR_CLIENT_SECRET]\"\n}\nEOF\n\n# Encrypt with GPG\ngpg --symmetric --cipher-algo AES256 jetscale-azure-creds.json\n",[117,816,817,822,839,843,848,853,858,863,869,874,879,884,890],{"__ignoreMap":188},[192,818,819],{"class":194,"line":195},[192,820,821],{"class":198},"# Create credentials file\n",[192,823,824,827,830,833,836],{"class":194,"line":202},[192,825,826],{"class":205},"cat",[192,828,829],{"class":259}," >",[192,831,832],{"class":209}," jetscale-azure-creds.json",[192,834,835],{"class":259}," \u003C\u003C",[192,837,838],{"class":259},"EOF\n",[192,840,841],{"class":194,"line":232},[192,842,650],{"class":209},[192,844,845],{"class":194,"line":253},[192,846,847],{"class":209},"  \"tenant_id\": \"[YOUR_TENANT_ID]\",\n",[192,849,850],{"class":194,"line":269},[192,851,852],{"class":209},"  \"subscription_id\": \"[YOUR_SUBSCRIPTION_ID]\",\n",[192,854,855],{"class":194,"line":276},[192,856,857],{"class":209},"  \"client_id\": \"[YOUR_CLIENT_ID]\",\n",[192,859,860],{"class":194,"line":282},[192,861,862],{"class":209},"  \"auth_method\": \"secret\",\n",[192,864,866],{"class":194,"line":865},8,[192,867,868],{"class":209},"  \"client_secret\": \"[YOUR_CLIENT_SECRET]\"\n",[192,870,872],{"class":194,"line":871},9,[192,873,758],{"class":209},[192,875,877],{"class":194,"line":876},10,[192,878,838],{"class":259},[192,880,882],{"class":194,"line":881},11,[192,883,273],{"emptyLinePlaceholder":272},[192,885,887],{"class":194,"line":886},12,[192,888,889],{"class":198},"# Encrypt with GPG\n",[192,891,893,895,897,899,901],{"class":194,"line":892},13,[192,894,771],{"class":205},[192,896,774],{"class":209},[192,898,777],{"class":209},[192,900,780],{"class":209},[192,902,796],{"class":209},[25,904,905],{},"Email the encrypted file to your Jetscale contact",[25,907,908],{},"Share the decryption password via a separate channel",[14,910,912],{"id":911},"validation","Validation",[10,914,915],{},"You can test the credentials yourself before sharing:",[10,917,918],{},[28,919,920],{},"For Certificate Authentication:",[183,922,924],{"className":185,"code":923,"language":187,"meta":188,"style":188},"az login --service-principal \\\n  -u [CLIENT_ID] \\\n  --certificate jetscale-cert-key.pem \\\n  --tenant [TENANT_ID]\n\naz account show\n",[117,925,926,939,947,956,964,968],{"__ignoreMap":188},[192,927,928,931,934,937],{"class":194,"line":195},[192,929,930],{"class":205},"az",[192,932,933],{"class":209}," login",[192,935,936],{"class":209}," --service-principal",[192,938,229],{"class":228},[192,940,941,944],{"class":194,"line":202},[192,942,943],{"class":209},"  -u",[192,945,946],{"class":228}," [CLIENT_ID] \\\n",[192,948,949,952,954],{"class":194,"line":232},[192,950,951],{"class":205},"  --certificate",[192,953,225],{"class":209},[192,955,229],{"class":228},[192,957,958,961],{"class":194,"line":253},[192,959,960],{"class":209},"  --tenant",[192,962,963],{"class":228}," [TENANT_ID]\n",[192,965,966],{"class":194,"line":269},[192,967,273],{"emptyLinePlaceholder":272},[192,969,970,972,975],{"class":194,"line":276},[192,971,930],{"class":205},[192,973,974],{"class":209}," account",[192,976,977],{"class":209}," show\n",[10,979,980],{},[28,981,982],{},"For Secret Authentication:",[183,984,986],{"className":185,"code":985,"language":187,"meta":188,"style":188},"az login --service-principal \\\n  -u [CLIENT_ID] \\\n  -p [CLIENT_SECRET] \\\n  --tenant [TENANT_ID]\n\naz account show\n",[117,987,988,998,1004,1012,1018,1022],{"__ignoreMap":188},[192,989,990,992,994,996],{"class":194,"line":195},[192,991,930],{"class":205},[192,993,933],{"class":209},[192,995,936],{"class":209},[192,997,229],{"class":228},[192,999,1000,1002],{"class":194,"line":202},[192,1001,943],{"class":209},[192,1003,946],{"class":228},[192,1005,1006,1009],{"class":194,"line":232},[192,1007,1008],{"class":205},"  -p",[192,1010,1011],{"class":228}," [CLIENT_SECRET] \\\n",[192,1013,1014,1016],{"class":194,"line":253},[192,1015,960],{"class":205},[192,1017,963],{"class":228},[192,1019,1020],{"class":194,"line":269},[192,1021,273],{"emptyLinePlaceholder":272},[192,1023,1024,1026,1028],{"class":194,"line":276},[192,1025,930],{"class":205},[192,1027,974],{"class":209},[192,1029,977],{"class":209},[10,1031,1032],{},"The Jetscale team will also validate access during onboarding by:",[22,1034,1035,1038,1041],{},[25,1036,1037],{},"Authenticating with provided credentials",[25,1039,1040],{},"Running read-only queries against key Azure services",[25,1042,1043],{},"Confirming data access for cost analysis",[14,1045,1047],{"id":1046},"security-best-practices","Security Best Practices",[88,1049,1051],{"id":1050},"regular-credential-rotation","Regular Credential Rotation",[38,1053,1054,1060],{},[25,1055,1056,1059],{},[28,1057,1058],{},"Certificates",": Rotate before 2-year expiration",[25,1061,1062,1065],{},[28,1063,1064],{},"Secrets",": Rotate every 12-24 months per your security policy",[88,1067,1069],{"id":1068},"activity-monitoring","Activity Monitoring",[38,1071,1072,1075],{},[25,1073,1074],{},"Review Azure Activity Logs for service principal activity",[25,1076,1077],{},"Set up alerts for unusual API patterns",[88,1079,1081],{"id":1080},"least-privilege","Least Privilege",[38,1083,1084,1087],{},[25,1085,1086],{},"Start with built-in roles; move to custom roles if needed",[25,1088,1089],{},"Regularly review assigned permissions",[88,1091,1093],{"id":1092},"conditional-access-optional","Conditional Access (Optional)",[10,1095,1096],{},"Consider adding conditional access policies:",[38,1098,1099,1102],{},[25,1100,1101],{},"IP restrictions for service principal",[25,1103,1104],{},"Time-based access policies",[14,1106,1108],{"id":1107},"troubleshooting","Troubleshooting",[88,1110,1112],{"id":1111},"common-issues","Common Issues",[10,1114,1115],{},[28,1116,1117],{},"\"Authentication failed\" errors:",[38,1119,1120,1123,1126],{},[25,1121,1122],{},"Verify Tenant ID and Client ID are correct",[25,1124,1125],{},"Confirm certificate thumbprint matches (if using certificates)",[25,1127,1128],{},"Check that secret hasn't expired (if using secrets)",[10,1130,1131],{},[28,1132,1133],{},"\"Insufficient permissions\" errors:",[38,1135,1136,1139],{},[25,1137,1138],{},"Ensure all three built-in roles are assigned (Reader, Cost Management Reader, Monitoring Reader)",[25,1140,1141],{},"Verify role assignments are at the subscription level, not resource group level",[10,1143,1144],{},[28,1145,1146],{},"Missing cost data:",[38,1148,1149,1152],{},[25,1150,1151],{},"Cost data can take 24-48 hours to appear in Cost Management",[25,1153,1154],{},"Ensure Cost Management is enabled for your subscription",[10,1156,1157],{},[28,1158,1159],{},"Multi-subscription access:",[38,1161,1162,1165],{},[25,1163,1164],{},"Jetscale can analyze multiple subscriptions",[25,1166,1167],{},"Assign the same App Registration to additional subscriptions with the same RBAC roles",[14,1169,1171],{"id":1170},"support","Support",[10,1173,1174],{},"Need help with Azure setup?",[38,1176,1177,1187,1193],{},[25,1178,1179,115,1182],{},[28,1180,1181],{},"Email",[1183,1184,1186],"a",{"href":1185},"mailto:support@jetscale.ai","support@jetscale.ai",[25,1188,1189,1192],{},[28,1190,1191],{},"Setup Calls",": Available for hands-on guidance",[25,1194,1195,1198],{},[28,1196,1197],{},"Documentation",": Detailed permission requirements provided during onboarding",[10,1200,1201],{},"All permission issues will be resolved during the validation process. We're here to help!",[1203,1204,1205],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":188,"searchDepth":202,"depth":202,"links":1207},[1208,1209,1210,1216,1217,1223,1226],{"id":16,"depth":202,"text":17},{"id":57,"depth":202,"text":58},{"id":85,"depth":202,"text":86,"children":1211},[1212,1213,1214,1215],{"id":90,"depth":232,"text":91},{"id":164,"depth":232,"text":165},{"id":379,"depth":232,"text":380},{"id":583,"depth":232,"text":584},{"id":911,"depth":202,"text":912},{"id":1046,"depth":202,"text":1047,"children":1218},[1219,1220,1221,1222],{"id":1050,"depth":232,"text":1051},{"id":1068,"depth":232,"text":1069},{"id":1080,"depth":232,"text":1081},{"id":1092,"depth":232,"text":1093},{"id":1107,"depth":202,"text":1108,"children":1224},[1225],{"id":1111,"depth":232,"text":1112},{"id":1170,"depth":202,"text":1171},[1228,1229,1230],"cloud-access-model","product-capabilities","security-model","md","en",{},[],"Cloud Platform","\u002Fdocs\u002Fazure-setup","legacy-import",{"title":5,"description":12},[],"docs\u002F3.azure-setup","high","azure-setup","rtiibIuojvaqP2TGQ-3cvxIZByeB72OTzGhi426gPIM",[1245],{"title":1246,"path":1247,"stem":1248,"children":1249,"page":-1},"Docs","\u002Fdocs","docs",[1250,1253,1257,1261,1262,1266,1288,1292,1330,1334,1338],{"title":1251,"path":1247,"stem":1252},"Jetscale Documentation","docs\u002Findex",{"title":1254,"path":1255,"stem":1256},"Getting Started with Jetscale","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",{"title":1258,"path":1259,"stem":1260},"AWS Setup Guide","\u002Fdocs\u002Faws-setup","docs\u002F2.aws-setup",{"title":5,"path":1236,"stem":1240},{"title":1263,"path":1264,"stem":1265},"How Jetscale Works","\u002Fdocs\u002Fhow-it-works","docs\u002F4.how-it-works",{"title":1267,"path":1268,"stem":1269,"children":1270,"page":-1},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations\u002Findex",[1271,1272,1276,1280,1284],{"title":1267,"path":1268,"stem":1269},{"title":1273,"path":1274,"stem":1275},"GitHub Integration","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F4.integrations\u002F1.github",{"title":1277,"path":1278,"stem":1279},"Jira Integration","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F4.integrations\u002F2.jira",{"title":1281,"path":1282,"stem":1283},"Slack Integration","\u002Fdocs\u002Fintegrations\u002Fslack","docs\u002F4.integrations\u002F3.slack",{"title":1285,"path":1286,"stem":1287},"Bitbucket Integration","\u002Fdocs\u002Fintegrations\u002Fbitbucket","docs\u002F4.integrations\u002F4.bitbucket",{"title":1289,"path":1290,"stem":1291},"AI-Powered Analysis","\u002Fdocs\u002Fai-analysis","docs\u002F5.ai-analysis",{"title":1293,"path":1294,"stem":1295,"children":1296,"page":-1},"Supported Services","\u002Fdocs\u002Fservices","docs\u002F5.services\u002Findex",[1297,1298,1302,1306,1310,1314,1318,1322,1326],{"title":1293,"path":1294,"stem":1295},{"title":1299,"path":1300,"stem":1301},"EBS Optimization","\u002Fdocs\u002Fservices\u002Febs","docs\u002F5.services\u002F1.ebs",{"title":1303,"path":1304,"stem":1305},"EC2 Optimization","\u002Fdocs\u002Fservices\u002Fec2","docs\u002F5.services\u002F2.ec2",{"title":1307,"path":1308,"stem":1309},"EKS Optimization","\u002Fdocs\u002Fservices\u002Feks","docs\u002F5.services\u002F3.eks",{"title":1311,"path":1312,"stem":1313},"ElastiCache Optimization","\u002Fdocs\u002Fservices\u002Felasticache","docs\u002F5.services\u002F4.elasticache",{"title":1315,"path":1316,"stem":1317},"RDS Optimization","\u002Fdocs\u002Fservices\u002Frds","docs\u002F5.services\u002F5.rds",{"title":1319,"path":1320,"stem":1321},"S3 Optimization","\u002Fdocs\u002Fservices\u002Fs3","docs\u002F5.services\u002F6.s3",{"title":1323,"path":1324,"stem":1325},"Azure SQL Optimization","\u002Fdocs\u002Fservices\u002Fazure-sql","docs\u002F5.services\u002F7.azure-sql",{"title":1327,"path":1328,"stem":1329},"Azure VM Optimization","\u002Fdocs\u002Fservices\u002Fazure-vm","docs\u002F5.services\u002F8.azure-vm",{"title":1331,"path":1332,"stem":1333},"Recommendation Workflow","\u002Fdocs\u002Frecommendation-workflow","docs\u002F6.recommendation-workflow",{"title":1335,"path":1336,"stem":1337},"API Reference","\u002Fdocs\u002Fapi-reference","docs\u002F7.api-reference",{"title":1339,"path":1340,"stem":1341},"FAQ","\u002Fdocs\u002Ffaq","docs\u002F8.faq",[1343,1345],{"title":1258,"path":1259,"stem":1260,"description":1344,"children":-1},"This guide will walk you through connecting your AWS account to Jetscale securely using IAM role-based access.",{"title":1263,"path":1264,"stem":1265,"description":1346,"children":-1},"Transform cloud costs into savings with AI-powered optimization",1788204003288]