😀

REST API の Azure RBAC を Azure CLI で試してみた

に公開

Azure サブスクリプションのアクセス制御 (IAM) でユーザーやサービスプリンシパルにロールを割り当てます。これをアプリから実行する必要がありそうなので、事前検証として REST API の Azure RBAC を Azure CLI で試してみました。

セキュリティ管理者ロールをユーザーに割り当てる

bash
SubscriptionId=$(az account show \
  --query id \
  --output tsv)

echo $SubscriptionId

RoleId=$(az rest \
  --method get \
  --url https://management.azure.com/subscriptions/$SubscriptionId/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01 \
  --query "value[?properties.roleName=='Security Admin'].id" \
  --output tsv)

echo $RoleId

MyUpn=$(az account show \
  --query user.name \
  --output tsv)

echo $MyUpn

MyId=$(az ad user show \
  --id $MyUpn \
  --query id \
  --output tsv)

echo $MyId

az rest \
  --method put \
  --url https://management.azure.com/subscriptions/$SubscriptionId/providers/Microsoft.Authorization/roleAssignments/$(uuidgen)?api-version=2022-04-01 \
  --body '{
    "properties": {
      "roleDefinitionId": "'$RoleId'",
      "principalId": "'$MyId'",
      "principalType": "User"
    }
  }'

閲覧者ロールをサービスプリンシパルに割り当てる

bash
ReaderRoleId=$(az rest \
  --method get \
  --url https://management.azure.com/subscriptions/$SubscriptionId/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01 \
  --query "value[?properties.roleName=='Reader'].id" \
  --output tsv)

echo $ReaderRoleId

ServicePrincipalId=$(az ad sp list \
  --display-name sampleapp \
  --query [].id \
  --output tsv)

echo $ServicePrincipalId

az rest \
  --method put \
  --url https://management.azure.com/subscriptions/$SubscriptionId/providers/Microsoft.Authorization/roleAssignments/$(uuidgen)?api-version=2022-04-01 \
  --body '{
    "properties": {
      "roleDefinitionId": "'$ReaderRoleId'",
      "principalId": "'$ServicePrincipalId'",
      "principalType": "ServicePrincipal"
    }
  }'

参考

https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-rest

Discussion