Я использую GitHub Actions для развертывания через Bicep:
- name: Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy Bicep file
uses: azure/arm-deploy@v1
with:
scope: subscription
subscriptionId: ${{ secrets.AZURE_CREDENTIALS_subscriptionId }}
region: ${{ env.DEPLOY_REGION }}
template: ${{ env.BICEP_ENTRY_FILE }}
parameters: parameters.${{ inputs.selectedEnvironment }}.json
Я использовал доступ участника для своего AZURE_CREDENTIALS
на основе вывода следующей команды:
az ad sp create-for-rbac --n infra-bicep --role contributor --scopes /subscriptions/my-subscription-guid --sdk-auth
Я использую Azure Keyvault с RBAC. Этот Bicep работал нормально, пока я не попытался предоставить веб-приложению Azure доступ на чтение хранилища ключей к хранилищу ключей как таковому:
var kvSecretsUser = '4633458b-17de-408a-b874-0445c86b69e6'
var kvSecretsUserRole = subscriptionResourceId('Microsoft.Authorization/roleDefinitions', kvSecretsUser)
resource kx_webapp_roleAssignments 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: 'kv-webapp-roleAssignments'
scope: kv
properties: {
principalId: webappPrincipleId
principalType: 'ServicePrincipal'
roleDefinitionId: kvSecretsUserRole
}
}
Затем я столкнулся со следующей ошибкой:
'Authorization failed for template resource 'kv-webapp-roleAssignments'
of type 'Microsoft.Authorization/roleAssignments'.
The client 'guid-value' with object id 'guid-value' does not have permission to perform action
'Microsoft.Authorization/roleAssignments/write' at scope
'/subscriptions/***/resourceGroups/rg-x/providers/Microsoft.KeyVault/vaults/
kv-x/providers/Microsoft.Authorization/roleAssignments/kv-webapp-roleAssignments'.'
Каковы общие минимальные необходимые разрешения и какими должны быть мои az ad sp create-for-rbac
утверждения, и есть ли какие-либо другие шаги, которые мне нужно сделать, чтобы назначить разрешения роли?
Чтобы назначать роли RBAC, вам необходимо иметь доступ пользователя Роль администратора или владельца, которая включает следующие разрешения:
Microsoft.Authorization/roleAssignments/write
С ролью участника вы не можете назначать роли RBAC ресурсам Azure. Чтобы убедиться в этом, вы можете проверить этот MS Doc.
Я попытался воспроизвести то же самое в своей среде и получил следующие результаты:
Я использовал ту же команду и создал один субъект-службу с ролью участника, как показано ниже:
az ad sp create-for-rbac --n infra-bicep --role contributor --scopes /subscriptions/my-subscription-guid --sdk-auth
Ответ:
Я сгенерировал один токен доступа через Postman со следующими параметрами:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
grant_type:client_credentials
client_id: <clientID from above response>
client_secret: <clientSecret from above response>
scope: https://management.azure.com/.default
Ответ:
Когда я использовал этот токен для назначения роли пользователя Key Vault Secrets с помощью приведенного ниже вызова API, я получил ту же ошибку, что и ниже:
PUT https://management.azure.com/subscriptions/d689e7fb-47d7-4fc3-b0db-xxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxxxxx?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/subscriptions/d689e7fb-47d7-4fc3-b0db-xxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6",
"principalId": "456c2d5f-12e7-4448-88ba-xxxxxxxxx",
"principalType": "ServicePrincipal"
}
}
Ответ:
Чтобы устранить эту ошибку, создайте субъект-службу с ролью администратора доступа пользователей или владельца.
В моем случае я создал субъект-службу с ролью владельца, как показано ниже:
az ad sp create-for-rbac --n infra-bicep-owner --role owner --scopes /subscriptions/my-subscription-guid --sdk-auth
Ответ:
Теперь я снова сгенерировал токен доступа через Postman, заменив значения clientId
и clientSecret
, как показано ниже:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
grant_type:client_credentials
client_id: <clientID from above response>
client_secret: <clientSecret from above response>
scope: https://management.azure.com/.default
Ответ:
Когда я использовал этот токен для назначения роли пользователя Key Vault Secrets с помощью приведенного ниже вызова API, я успешно получил ответ, как показано ниже:
PUT https://management.azure.com/subscriptions/d689e7fb-47d7-4fc3-b0db-xxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxxxxx?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/subscriptions/d689e7fb-47d7-4fc3-b0db-xxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6",
"principalId": "456c2d5f-12e7-4448-88ba-xxxxxxxxx",
"principalType": "ServicePrincipal"
}
}
Ответ:
Учитывая принцип наименьших привилегий, вам нужно создать пользовательскую роль RBAC вместо назначения роли Owner
.
Чтобы создать пользовательскую роль RBAC, выполните следующие действия:
Перейдите на портал Azure -> Подписки -> Ваша подписка -> Контроль доступа (IAM) -> Добавить -> Добавить пользовательскую роль.
Заполните детали именем и описанием, обязательно выберите роль участника после выбора Clone a role
, как показано ниже:
Теперь удалите ниже разрешение из NotAction Microsoft.Authorization/roleAssignments/write
Теперь добавьте разрешение Microsoft.Authorization/roleAssignments/write
в действие:
Теперь нажмите «Создать», как показано ниже:
Вы можете создать субъект-службу с вышеуказанной настраиваемой ролью, используя эту команду:
az ad sp create-for-rbac --n infra_bicep_custom_role --role 'Custom Contributor' --scopes /subscriptions/my-subscription-guid --sdk-auth
Ответ:
В этом случае вы можете создать собственную роль RBAC, добавив разрешение Microsoft.Authorization/roleAssignments/write
вместе с разрешениями участника.
Я сделал это. Я создал пользовательскую роль на уровне подписки, начал с contributer
добавил Microsoft.Authorization/roleAssignments/write
, затем мне нужно удалить Microsoft.Authorization/*/write
и Microsoft.Authorization/*/read
NoAction
, которые пришли из contributor
. Вы хотите обновить свой ответ с помощью этих действий, чтобы я мог отметить его? Это поможет будущим поколениям.
Удаление двух разрешений No Action BUT добавление Microsoft.Authorization/roleAssignments/write . Я думаю, вы только что удалили два, не добавив это разрешение. Только последнее замечание, команда RBAC должна быть az ad sp create-for-rbac --n infra-bicep-owner --role **[Your Custom Roles]** --scopes /subscriptions/my-subscription-guid --sdk-auth
Спасибо, что нашли время, чтобы воспроизвести. Тем не менее, в нем отсутствует важная часть моего вопроса, которая минимальна, и я считаю, что владелец слишком много для него, поскольку он не следует принципу наименьших привилегий. Могу ли я «добавить» администратора доступа пользователей к роли участника?