{"id":1216,"date":"2026-10-12T10:49:07","date_gmt":"2026-10-12T10:49:07","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1216"},"modified":"2026-10-12T10:49:52","modified_gmt":"2026-10-12T10:49:52","slug":"azure-how-to-get-all-4-terraform-authentication-values-using-portal","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/azure-how-to-get-all-4-terraform-authentication-values-using-portal\/","title":{"rendered":"Azure: Authenticating to Azure using a Service Principal and a Client Secret"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Azure Portal: Get all 4 Terraform authentication values<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can do this entirely through the Azure Portal web interface. No terminal commands or Azure CLI are required. Follow these steps in order.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Create the Terraform application<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/Ia9syOORBglY4QfN8cW4d2eXbfrroYLyjtIE6iQDfiL67HnI_7NAjsAzDgruwPyfifp_6QIE8nNp9kTsp8JDHQrBNgRIrfZu0HEoRQXoxzUHUDMi6d6ICdwc4rUmlBAKGzqkxDrqhCy97DelvPNeKhJ52RsL3VzWb-v09-NxoXU?purpose=inline\" alt=\"Exchange Online Integration for Email-Outbound from SAP ABAP Platform | Microsoft Learn\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Open <a href=\"https:\/\/entra.microsoft.com\/\">Microsoft Entra admin center<\/a>.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select Entra ID \u2192 App registrations.<\/li>\n\n\n\n<li>Click New registration.<\/li>\n\n\n\n<li>Enter the name <code>terraform-deployer<\/code>.<\/li>\n\n\n\n<li>Select Accounts in this organizational directory only.<\/li>\n\n\n\n<li>Leave Redirect URI blank.<\/li>\n\n\n\n<li>Click Register.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If the application already exists, open it instead of creating another one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official guide: <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity-platform\/howto-create-service-principal-portal\">Register an application in Microsoft Entra ID<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=https:\/\/learn.microsoft.com&amp;sz=32\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft Learn<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Get <code>ARM_CLIENT_ID<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the newly created application&#8217;s Overview page:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Application (client) ID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the displayed GUID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is your <code>ARM_CLIENT_ID<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the actual ID displayed in your Azure Portal. Do not use the Object ID.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Get <code>ARM_TENANT_ID<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the same Overview page, find:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Directory (tenant) ID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the displayed GUID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is your <code>ARM_TENANT_ID<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also find it under Entra ID \u2192 Overview.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4 \u2014 Create and get <code>ARM_CLIENT_SECRET<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/ycFT_jgDLi2Pn22dMr-Kod9IWlSVRU70upwE2pgFUK1qvxB6reQJQ2VEHzqDjlotvYASvhhB3RTwW_v0jS6w2WxMlfOTgk8mA75c0815pNWaBwZfItZOKb6d-iYNKtTH3Vra7z1PyFiAUSQvkNHLqhQKN2I0xG4KbGzVZmIWiiQ?purpose=inline\" alt=\"Microsoft Teams configuration &nbsp;|&nbsp; Gemini Enterprise &nbsp;|&nbsp; Google Cloud Documentation\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.cloud.google.com\/gemini\/enterprise\/docs\/connectors\/ms-teams\/ms-teams-config\">docs.cloud.google.com<\/a><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open your <code>terraform-deployer<\/code> application.<\/li>\n\n\n\n<li>Select Certificates &amp; secrets.<\/li>\n\n\n\n<li>Open Client secrets.<\/li>\n\n\n\n<li>Click New client secret.<\/li>\n\n\n\n<li>Enter a description, such as <code>Terraform<\/code>.<\/li>\n\n\n\n<li>Choose an expiration period.<\/li>\n\n\n\n<li>Click Add.<\/li>\n\n\n\n<li>Immediately copy the Value column.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Important<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The client secret&#8217;s Value is your <code>ARM_CLIENT_SECRET<\/code>, not its Secret ID. Azure displays the value only once. If you leave the page without copying it, create a new secret.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft recommends certificates or federated credentials for production workloads rather than long-lived client secrets.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=https:\/\/learn.microsoft.com&amp;sz=32\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft Learn<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5 \u2014 Get <code>ARM_SUBSCRIPTION_ID<\/code><\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/images.openai.com\/static-rsc-4\/Jin0gC-xMwWBhCkhD2TwZ4iguNEnRiyhORm57NuRdLPZ8KR53RMISe2n6Gka-iLyL5EnavZ8debay4Wz59iZWzO-Z3_PlPCVBUTdMoaaEuosaZ8p95nmGqJxIKEFOrqFsZL8MEKFUduHTrKqgnei1_hJYLx7K0wj3u7Pn_naUb8?purpose=inline\" alt=\"How to find subscription ID from my azure account? - Microsoft Q&amp;A\"\/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <a href=\"https:\/\/portal.azure.com\/\">Azure Portal<\/a>.<\/li>\n\n\n\n<li>Search for Subscriptions.<\/li>\n\n\n\n<li>Select the subscription Terraform will manage.<\/li>\n\n\n\n<li>On the Overview page, copy Subscription ID.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This is your <code>ARM_SUBSCRIPTION_ID<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6 \u2014 Give the application permission to manage resources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Creating the application and secret does not automatically grant access to your Azure subscription.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Azure Portal, open Subscriptions.<\/li>\n\n\n\n<li>Select your subscription \u2192 Access control (IAM).<\/li>\n\n\n\n<li>Click Add \u2192 Add role assignment.<\/li>\n\n\n\n<li>Select Contributor.<\/li>\n\n\n\n<li>Click Next.<\/li>\n\n\n\n<li>Select User, group, or service principal as the member type.<\/li>\n\n\n\n<li>Click Select members and search for <code>terraform-deployer<\/code>.<\/li>\n\n\n\n<li>Select the application\/service principal and click Review + assign.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">You need permission to assign roles yourself. If Contributor is unavailable, an authorized subscription administrator may need to complete this step. Some Terraform configurations require additional permissions beyond Contributor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7 \u2014 Your four values are ready<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"885\" height=\"420\" src=\"https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/10\/image-1.png\" alt=\"\" class=\"wp-image-1217\" srcset=\"https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/10\/image-1.png 885w, https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/10\/image-1-300x142.png 300w, https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/10\/image-1-767x364.png 767w\" sizes=\"auto, (max-width: 885px) 100vw, 885px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ARM_CLIENT_ID<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">App registrations \u2192 your app \u2192 Overview \u2192 Application (client) ID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ARM_CLIENT_SECRET<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your app \u2192 Certificates &amp; secrets \u2192 Client secrets \u2192 Value copied when created<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ARM_TENANT_ID<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your app \u2192 Overview \u2192 Directory (tenant) ID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ARM_SUBSCRIPTION_ID<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Portal \u2192 Subscriptions \u2192 your subscription \u2192 Overview<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official Terraform reference: <a href=\"https:\/\/registry.terraform.io\/providers\/hashicorp\/azurerm\/latest\/docs\/guides\/service_principal_client_secret\">Authenticate the AzureRM Terraform provider using a service principal and client secret<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=https:\/\/registry.terraform.io&amp;sz=32\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Terraform Registry<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it: All four values are obtained through the Azure Portal. You only need to use Terminal afterward if you want to configure them as environment variables for Terraform.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Azure Portal: Get all 4 Terraform authentication values You can do this entirely through the Azure Portal web interface. No terminal commands or Azure CLI are required&#8230;. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1216","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1216"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1216\/revisions"}],"predecessor-version":[{"id":1219,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1216\/revisions\/1219"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}