{"id":6422,"date":"2024-05-05T12:58:20","date_gmt":"2024-05-05T03:58:20","guid":{"rendered":"https:\/\/engineer-chanpu.blog\/?p=6422"},"modified":"2024-05-06T13:13:46","modified_gmt":"2024-05-06T04:13:46","slug":"storage-account-azcopy-%ec%9d%b8%ec%a6%9d-%eb%b0%a9%ec%8b%9d-%eb%b0%8f-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%95%8c%ec%95%84-%eb%b3%b4%ea%b8%b0-2","status":"publish","type":"post","link":"https:\/\/engineer-chanpu.blog\/?p=6422","title":{"rendered":"Storage Account: AzCopy \uc778\uc99d \ubc29\uc2dd \ubc0f \uc0ac\uc6a9\ubc95 \uc54c\uc544 \ubcf4\uae30 #2"},"content":{"rendered":"\n<p><em>Tip. \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c \uc900\ube44 \uc791\uc5c5\uc740 \uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0 \uae30\uc7ac\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/em><\/p>\n\n\n\n<p><a href=\"https:\/\/engineer-chanpu.blog\/azure\/storage-account-azcopy-%ec%9d%b8%ec%a6%9d-%eb%b0%a9%ec%8b%9d-%eb%b0%8f-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%95%8c%ec%95%84-%eb%b3%b4%ea%b8%b0\/\">Storage Account: AzCopy \uc778\uc99d \ubc29\uc2dd \ubc0f \uc0ac\uc6a9\ubc95 \uc54c\uc544 \ubcf4\uae30 #1<\/a><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Agenda<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>AzCopy \uc778\uc99d \ubc29\uc2dd \uc54c\uc544 \ubcf4\uae30\n<ul class=\"wp-block-list\">\n<li><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Microsoft Entra ID \uc778\uc99d \ubc29\uc2dd<\/mark>\n<ul class=\"wp-block-list\">\n<li>Authorize a user identity # Skip<\/li>\n\n\n\n<li>Authorize a managed identity # Skip<\/li>\n\n\n\n<li>Authorize by using a system-wide managed identity # Skip<\/li>\n\n\n\n<li>Authorize by using a user-assigned managed identity # Skip<\/li>\n\n\n\n<li><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Authorize a service principal<\/mark><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Storage Account SAS Token \uc778\uc99d \ubc29\uc2dd # Skip<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Authorize a service principal<\/h2>\n\n\n\n<p>\uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0\uc11c \ubd84\ub7c9 \ubb38\uc81c\ub85c \ub2e4\ub8e8\uc9c0 \ubabb\ud588\ub358 \uc11c\ube44\uc2a4 \uc8fc\uccb4 (Service Principal) \uc778\uc99d \ubc29\uc2dd\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf8\ub2e4.<\/p>\n\n\n\n<p>\uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc774\uc6a9\ud55c \uc778\uc99d \ubc29\uc2dd\uc740 Azure Entra ID (=\uc774\uc804 Azure Active Directory) \ub0b4\uc5d0\uc11c \uc571 \ub610\ub294 \uc11c\ube44\uc2a4\uac00 \uc0ac\uc6a9\uc790\uc758 \uc0c1\ud638 \uc791\uc6a9 \uc5c6\uc774 Azure \ub9ac\uc18c\uc2a4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub3c4\ub85d Key, Secret \ub610\ub294 \uc778\uc99d\uc11c\ub97c \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc704\uc758 \uc778\uc99d \ubc29\uc2dd\uc740 \uc790\ub3d9\ud654\uc640 \ud1b5\ud569\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ub418\uba70, <code>SMI (System Managed Identity)<\/code>\uc640 \uac19\uc774 \uc0ac\uc6a9\uc790\uc758 \uac1c\uc785 \uc5c6\uc774\ub3c4 Azuer \ub9ac\uc18c\uc2a4\ub97c \uad00\ub9ac\ud558\uace0 \uc870\uc791\ud560 \uc218 \uc788\ub3c4\ub85d \uc9c0\uc6d0\ud55c\ub2e4.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc778\uc99d\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"857\" height=\"188\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-60.png\" alt=\"\" class=\"wp-image-6423\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-60.png 857w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-60-300x66.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-60-768x168.png 768w\" sizes=\"auto, (max-width: 857px) 100vw, 857px\" \/><figcaption class=\"wp-element-caption\">Microsoft \uc8fc\uc758 \uc0ac\ud56d<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Microsoft \ubb38\uc11c\uc5d0\uc11c \uc5b8\uae09\ub41c \uacbd\uace0\ub294 \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud560 \ub54c \ubc29\uc0dd\ud560 \uc218 \uc788\ub294 \ubcf4\uc548 \ubb38\uc81c\uc5d0 \ub300\ud574\uc11c \uc8fc\uc758\ud558\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0dd\uc131\ud558\uace0, \uc774 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ub418\ub294 \uc778\uc99d \uc815\ubcf4 (Credential) \ub294 \uc548\uc804\ud558\uac8c \uad00\ub9ac\ub418\uc5b4\uc57c \ud55c\ub2e4. Managed ID\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uacbd\uc6b0\ub77c\uba74 \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83\uc774 \ubcf4\uc548\uc801\uc778 \uce21\uba74\uc5d0\uc11c\ub294 \ud6a8\uc728\uc801\uc774\ub2e4. \ud558\uc9c0\ub9cc, \uc5b4\uca54 \uc218 \uc5c6\uc774 \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc778\uc99d \uc815\ubcf4\ub97c \uad00\ub9ac \ud560 \ud544\uc694\uac00 \uc788\ub294 \uacbd\uc6b0\uac00 \uc874\uc7ac\ud55c\ub2e4.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Azure \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc\uc758 \ud1b5\ud569: Azure \ub9ac\uc18c\uc2a4\uc5d0 \uc790\ub3d9 \uc778\uc99d\uc744 \uc81c\uacf5\ud558\ub294 Managed ID \ub294 \ubaa8\ub4e0 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc61b\ub0a0 \uc11c\ube44\uc2a4\ub098 \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc\uc758 \ud1b5\ud569\uc5d0\uc11c\ub294 Managed ID\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0\uac00 \uc788\ub2e4. \uc774\ub7ec\ud55c \uacbd\uc6b0 \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc778\uc99d\uc744 \uc218\ud589\ud574\uc57c \ud55c\ub2e4.<br><br>ex) Azure \uc678\ubd80\uc5d0\uc11c \ud638\uc2a4\ud305\ub418\ub294 \uc571\uc774 Azure \uc11c\ube44\uc2a4\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uac70\ub098 \uac80\uc0c9\uc774 \ud544\uc694\ud55c \uacbd\uc6b0.<br><\/li>\n\n\n\n<li>\uc790\ub3d9\ud654 \uc694\uad6c \uc0ac\ud56d:  CI\/CD \ud30c\uc774\ud504 \ub77c\uc778\uacfc \uac19\uc740 \uc790\ub3d9\ud654\ub41c \ud658\uacbd\uc5d0\uc11c\ub294 \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec Azure \ub9ac\uc18c\uc2a4\uc5d0 \ud504\ub85c\uadf8\ub798\ubc0d \ubc29\uc2dd\uc73c\ub85c \uc811\uadfc\ud560 \ud544\uc694\uac00 \uc788\ub2e4. \uc774\ub7ec\ud55c \uacbd\uc6b0, \uc2a4\ud06c\ub9bd\ud2b8\ub098 \uc571 \ucf54\ub4dc \ub0b4\uc5d0\uc11c Azure \ub9ac\uc18c\uc2a4\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0ac\uc6a9\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"907\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-61-1024x907.png\" alt=\"\" class=\"wp-image-6424\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-61-1024x907.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-61-300x266.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-61-768x680.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-61.png 1152w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(1) SPN \uc778\uc99d \ub2e4\uc774\uc5b4\uadf8\ub7a8<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Commands<\/h3>\n\n\n\n<p>\uc2dc\ud589\ucc29\uc624\ub97c \uac70\uce58\uba74\uc11c, \uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc0dd\uc131 \ubc0f RBAC \uc5ed\ud560 \ud560\ub2f9 \ud14c\uc2a4\ud2b8\uc5d0 \uc0ac\uc6a9\ud55c \uba85\ub839\uc5b4 \ucd5c\uc885\ubcf8\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Variables\n$TENANT_ID=(az account show | convertfrom-json).tenantId\n$RESOURCE_GROUP_NAME=&quot;YourResourceGroupName&quot;\n$RESOURCE_GROUP_SCOPE=(az group show -n $RESOURCE_GROUP_NAME | convertfrom-json).id\n$STORAGE_ACCOUNT_NAME=&quot;YourStorageAccountName&quot;\n$STORAGE_ACCOUNT_INFO=az storage account show -g $RESOURCE_GROUP_NAME -n $STORAGE_ACCOUNT_NAME | ConvertFrom-Json\n$STORAGE_ACCOUNT_SCOPE=$STORAGE_ACCOUNT_INFO.id\n$STORAGE_ACCOUNT_BLOB_ENDPOINT=$STORAGE_ACCOUNT_INFO.primaryEndpoints.blob\n$BLOB_DATA_ROLE=&quot;Storage Blob Data Contributor&quot;\n$SPN_NAME=&quot;YourServicePrincipalName&quot;\n$SPN_ROLE=&quot;Contributor&quot;\n\n# Create a service principal and set environment variables\n$SPN_INFO=az ad sp create-for-rbac `\n--name $SPN_NAME `\n--role $SPN_ROLE `\n--scopes $RESOURCE_GROUP_SCOPE | convertfrom-json\n\n# Set environment variables and assign roles after creating the service principal\n$env:AZCOPY_SPA_CLIENT_SECRET=$SPN_INFO.password\n$SPN_ID=$SPN_INFO.appId\n\n# Create a role assignment for the service principal to access the storage account\naz role assignment create `\n--assignee $SPN_ID `\n--role $BLOB_DATA_ROLE `\n--scope $STORAGE_ACCOUNT_SCOPE\n\n# Optional: Login to Azure CLI using the service principal\naz login --service-principal `\n-u $SPN_ID `\n-p $env:AZCOPY_SPA_CLIENT_SECRET `\n--tenant $TENANT_ID\n\n# Login to AzCopy using the service principal\nazcopy login --service-principal `\n--application-id $SPN_ID `\n--tenant-id $TENANT_ID\n\n# Run AzCopy List\nazcopy list $STORAGE_ACCOUNT_BLOB_ENDPOINT\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\"># Variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><span style=\"color: #D4D4D4\">=(az account show | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><span style=\"color: #D4D4D4\">).tenantId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourResourceGroupName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_SCOPE<\/span><span style=\"color: #D4D4D4\">=(az group show -n <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><span style=\"color: #D4D4D4\">).id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourStorageAccountName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #D4D4D4\">=az storage account show -g <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\"> -n <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_NAME<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">ConvertFrom-Json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_SCOPE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #DCDCAA\">.id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_BLOB_ENDPOINT<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #DCDCAA\">.primaryEndpoints.blob<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$BLOB_DATA_ROLE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;Storage Blob Data Contributor&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourServicePrincipalName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_ROLE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;Contributor&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Create a service principal and set environment variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #D4D4D4\">=az ad sp create-for-rbac `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--name <\/span><span style=\"color: #9CDCFE\">$SPN_NAME<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--role <\/span><span style=\"color: #9CDCFE\">$SPN_ROLE<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--scopes <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_SCOPE<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Set environment variables and assign roles after creating the service principal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$env:AZCOPY_SPA_CLIENT_SECRET<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #DCDCAA\">.password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #DCDCAA\">.appId<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Create a role assignment for the service principal to access the storage account<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">az role assignment create `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--assignee <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--role <\/span><span style=\"color: #9CDCFE\">$BLOB_DATA_ROLE<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--scope <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_SCOPE<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Optional: Login to Azure CLI using the service principal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">az login --service-principal `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-u <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-p <\/span><span style=\"color: #9CDCFE\">$env:AZCOPY_SPA_CLIENT_SECRET<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--tenant <\/span><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Login to AzCopy using the service principal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">azcopy login --service-principal `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--application-id <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--tenant-id <\/span><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Run AzCopy List<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">azcopy list <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_BLOB_ENDPOINT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\uc11c\ube44\uc2a4 \uc8fc\uccb4 \ub9cc\ub4e4\uae30<\/h3>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/cli\/azure\/azure-cli-sp-tutorial-1?tabs=bash\">Create an Azure service principal with Azure CLI<\/a> <\/p>\n\n\n\n<p>\uc544\ub798\uc758 \uba85\ub839\uc5b4\ub85c \ud14c\uc2a4\ud2b8\uc6a9 SPN\uc744 \uc791\uc131\ud558\uace0 \ub9ac\uc18c\uc2a4 \uadf8\ub8f9 \ubc94\uc704\ub97c \uc9c0\uc815\ud558\uc5ec Contributor \uc5ed\ud560\uc744 \ud560\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Variables\n$TENANT_ID=(az account show | convertfrom-json).tenantId\n$RESOURCE_GROUP_NAME=&quot;YourResourceGroupName&quot;\n$RESOURCE_GROUP_SCOPE=(az group show -n $RESOURCE_GROUP_NAME | convertfrom-json).id\n$STORAGE_ACCOUNT_NAME=&quot;YourStorageAccountName&quot;\n$STORAGE_ACCOUNT_INFO=az storage account show -g $RESOURCE_GROUP_NAME -n $STORAGE_ACCOUNT_NAME | ConvertFrom-Json\n$STORAGE_ACCOUNT_SCOPE=$STORAGE_ACCOUNT_INFO.id\n$STORAGE_ACCOUNT_BLOB_ENDPOINT=$STORAGE_ACCOUNT_INFO.primaryEndpoints.blob\n$BLOB_DATA_ROLE=&quot;Storage Blob Data Contributor&quot;\n$SPN_NAME=&quot;YourServicePrincipalName&quot;\n$SPN_ROLE=&quot;Contributor&quot;\n\n# Create a service principal and set environment variables\n$SPN_INFO=az ad sp create-for-rbac `\n--name $SPN_NAME `\n--role $SPN_ROLE `\n--scopes $RESOURCE_GROUP_SCOPE | convertfrom-json\n\n# Set environment variables and assign roles after creating the service principal\n$env:AZCOPY_SPA_CLIENT_SECRET=$SPN_INFO.password\n$SPN_ID=$SPN_INFO.appId\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\"># Variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><span style=\"color: #D4D4D4\">=(az account show | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><span style=\"color: #D4D4D4\">).tenantId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourResourceGroupName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_SCOPE<\/span><span style=\"color: #D4D4D4\">=(az group show -n <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><span style=\"color: #D4D4D4\">).id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourStorageAccountName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #D4D4D4\">=az storage account show -g <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_NAME<\/span><span style=\"color: #D4D4D4\"> -n <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_NAME<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">ConvertFrom-Json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_SCOPE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #DCDCAA\">.id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_BLOB_ENDPOINT<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_INFO<\/span><span style=\"color: #DCDCAA\">.primaryEndpoints.blob<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$BLOB_DATA_ROLE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;Storage Blob Data Contributor&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_NAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;YourServicePrincipalName&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_ROLE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">&quot;Contributor&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Create a service principal and set environment variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #D4D4D4\">=az ad sp create-for-rbac `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--name <\/span><span style=\"color: #9CDCFE\">$SPN_NAME<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--role <\/span><span style=\"color: #9CDCFE\">$SPN_ROLE<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--scopes <\/span><span style=\"color: #9CDCFE\">$RESOURCE_GROUP_SCOPE<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #DCDCAA\">convertfrom-json<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Set environment variables and assign roles after creating the service principal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$env:AZCOPY_SPA_CLIENT_SECRET<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #DCDCAA\">.password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">$SPN_INFO<\/span><span style=\"color: #DCDCAA\">.appId<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\uc11c\ube44\uc2a4 \uc8fc\uccb4\ub97c \uc0dd\uc131\ud558\uba74 <code>password<\/code> \uac12\uc774 \ud45c\uc2dc\ub41c\ub2e4. \ud55c \ubc88 \uc0dd\uc131\ub41c \uc2dc\ud06c\ub9bf \uac12\uc740 \uc774\ud6c4 \uc7ac\ud655\uc778\uc774 \ubd88\uac00\ub2a5 \ud558\ubbc0\ub85c, \uc548\uc804\ud558\uac8c \ubcf4\uad00\ud558\uc5ec \uad00\ub9ac\ud560 \ud544\uc694\uac00 \uc788\ub2e4. \ub9cc\uc57d \uc2dc\ud06c\ub9bf \uac12\uc744 \ubd84\uc2e4\ud55c \uacbd\uc6b0 \uc0c8\ub85c\uc6b4 \uc2dc\ud06c\ub9bf\uc744 \uc0dd\uc131\ud558\uc5ec \uac01 \uc571 \ubc0f \uc11c\ube44\uc2a4\uc5d0 \uc7ac\uc124\uc815 \ud574\uc57c\ud558\ubbc0\ub85c \uc8fc\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<p>Tip. \uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc0dd\uc131 \uba85\ub839\uc5b4\ub97c \ub2e4\uc2dc \uc2e4\ud589\ud560 \uacbd\uc6b0, \uc2dc\ud06c\ub9bf \uac12\uc774 \ubcc0\uacbd\ub418\ubbc0\ub85c \uc8fc\uc758\ud55c\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"358\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63-1024x358.png\" alt=\"\" class=\"wp-image-6426\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63-1024x358.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63-300x105.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63-768x268.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63-1536x536.png 1536w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-63.png 1916w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(2) SPN \ube44\ubc00 \uc815\ubcf4<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"515\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64-1024x515.png\" alt=\"\" class=\"wp-image-6427\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64-1024x515.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64-300x150.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64-768x386.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64-1536x773.png 1536w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-64.png 1700w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(3)  Azure Portal SPN \ube44\ubc00 \uc815\ubcf4 \ud655\uc778<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65-1024x415.png\" alt=\"\" class=\"wp-image-6428\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65-1024x415.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65-300x122.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65-768x312.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65-1536x623.png 1536w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-65.png 2004w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(4) Azure Portal SPN \uc5ed\ud560 \ud560\ub2f9 \ud655\uc778<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Tip. \uc11c\ube44\uc2a4 \uc8fc\uccb4\ub85c <code>az login<\/code> \uc774 \uac00\ub2a5\ud558\ub2e4.<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Azure CLI Login with service-principal (Optional)\naz login --service-principal `\n-u $SPN_ID `\n-p $env:AZCOPY_SPA_CLIENT_SECRET `\n--tenant $TENANT_ID\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\"># Azure CLI Login with service-principal (Optional)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">az login --service-principal `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-u <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-p <\/span><span style=\"color: #9CDCFE\">$env:AZCOPY_SPA_CLIENT_SECRET<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--tenant <\/span><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-67-1024x634.png\" alt=\"\" class=\"wp-image-6430\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-67-1024x634.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-67-300x186.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-67-768x475.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-67.png 1330w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(1) \uc11c\ube44\uc2a4 \uc8fc\uccb4\uc5d0 \uc5ed\ud560 \ud560\ub2f9 \ubc94\uc704 \uc548\uc5d0\uc11c \uc870\uc791\uc774 \uac00\ub2a5\ud574 \uc9c4\ub2e4.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">AzCopy \uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc778\uc99d \uc0ac\uc6a9\ubc95<\/h3>\n\n\n\n<p>Storage Account \ub9ac\uc18c\uc2a4\ub97c \uc870\uc791\ud558\uae30 \uc704\ud574\uc11c, \uc11c\ube44\uc2a4 \uc8fc\uccb4\uc5d0 <code>Storage Blob Data Contributor<\/code>\uad8c\ud55c\uc744 \ud560\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Create a role assignment for the service principal to access the storage account\naz role assignment create `\n--assignee $SPN_ID `\n--role $BLOB_DATA_ROLE `\n--scope $STORAGE_ACCOUNT_SCOPE\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\"># Create a role assignment for the service principal to access the storage account<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">az role assignment create `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--assignee <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--role <\/span><span style=\"color: #9CDCFE\">$BLOB_DATA_ROLE<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--scope <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_SCOPE<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc778\uc99d\uc744 \uc0ac\uc6a9\ud558\uc5ec, <code>azcopy login<\/code> \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Log out of the current AzCopy session to clear any existing login information.\nazcopy logout\n\n# AzCopy Login with service-principal\nazcopy login --service-principal `\n--application-id $SPN_ID `\n--tenant-id $TENANT_ID\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\"># Log out of the current AzCopy session to clear any existing login information.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">azcopy logout<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># AzCopy Login with service-principal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">azcopy login --service-principal `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--application-id <\/span><span style=\"color: #9CDCFE\">$SPN_ID<\/span><span style=\"color: #D4D4D4\"> `<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--tenant-id <\/span><span style=\"color: #9CDCFE\">$TENANT_ID<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"148\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68-1024x148.png\" alt=\"\" class=\"wp-image-6431\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68-1024x148.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68-300x43.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68-768x111.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68-1536x222.png 1536w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-68.png 1710w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(1) \uc11c\ube44\uc2a4 \uc8fc\uccb4 \uc778\uc99d \uc131\uacf5 \ud655\uc778<\/figcaption><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code>azcopy list<\/code> \ub97c \uc2e4\ud589\ud558\uc5ec Storage Account \ucc38\uc870\uac00 \uac00\ub2a5\ud55c\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"azcopy list $STORAGE_ACCOUNT_BLOB_ENDPOINT\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">azcopy list <\/span><span style=\"color: #9CDCFE\">$STORAGE_ACCOUNT_BLOB_ENDPOINT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"100\" src=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-69-1024x100.png\" alt=\"\" class=\"wp-image-6432\" srcset=\"https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-69-1024x100.png 1024w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-69-300x29.png 300w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-69-768x75.png 768w, https:\/\/engineer-chanpu.blog\/wp-content\/uploads\/2024\/05\/image-69.png 1262w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">(2) azcopy.txt \ucc38\uc870 \ud655\uc778<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Tip. \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c \uc900\ube44 \uc791\uc5c5\uc740 \uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0 \uae30\uc7ac\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. Storage Account: AzCopy \uc778\uc99d \ubc29\uc2dd \ubc0f \uc0ac\uc6a9\ubc95 \uc54c\uc544 \ubcf4\uae30 #1 Agenda Authorize a service principal \uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0\uc11c \ubd84\ub7c9 \ubb38\uc81c\ub85c \ub2e4\ub8e8\uc9c0 \ubabb\ud588\ub358 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":6433,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[205,107,200,33],"tags":[197,123,178],"class_list":["post-6422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-access-security","category-azure","category-data-storage-solutions","category-tech-notes","tag-auth","tag-azure","tag-storage-accounts"],"_links":{"self":[{"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/posts\/6422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6422"}],"version-history":[{"count":5,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/posts\/6422\/revisions"}],"predecessor-version":[{"id":6438,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/posts\/6422\/revisions\/6438"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=\/wp\/v2\/media\/6433"}],"wp:attachment":[{"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/engineer-chanpu.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}