问题描述
在使用Terraform、Service Principals和Service Connections时,希望能够自动将其范围限定在自己的订阅所有权下,只使用MS Graph API。用户之前可以通过旧的AAD Graph API来编程创建服务主体或在运行时更改其权限,但现在无法实现了。用户尝试以编程方式创建服务主体时,会遇到类似于以下错误的问题:
Error: authorization.RoleAssignmentsClient#Create: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailed" Message="The client '3520c717-e1cc-4d0b-b021-2f93a1b05d80' with object id '3520c717-e1cc-4d0b-b021-2f93a1b05d80' does not have authorization to perform action 'Microsoft.Authorization/roleAssignments/write'
用户每次在DevOps中创建服务主体或服务连接时,都将其范围限定在自己的订阅下,但仍然会收到没有权限创建或修改的错误。用户拥有订阅所有权,应该具有权限。
用户想知道需要做什么、需要应用什么角色,或者如何重新构建以编程方式创建服务主体、MSIs和服务连接,以便它们再次适用于用户完全控制的订阅。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的描述,您需要确保您的服务主体、MSIs和服务连接的范围限定在您自己的订阅下,并且您具有完全控制权。以下是一些可能的解决方案:
1. 确保您的订阅所有权:确保您在Azure订阅中具有Owner角色。如果您不确定,请联系您的Azure订阅管理员进行确认。
2. 使用正确的权限:在创建服务主体、MSIs和服务连接时,确保您使用的是具有足够权限的凭据。您可能需要使用具有Owner或Contributor角色的凭据来执行这些操作。
3. 检查访问权限:确保您的凭据具有访问和管理所需资源的权限。您可以通过在Azure门户中导航到相应的资源,然后选择“访问控制(IAM)”来检查和管理访问权限。
4. 检查MS Graph API权限:确保您的凭据具有执行所需操作的MS Graph API权限。您可以在Azure门户中的“应用注册”部分查看和管理应用程序的API权限。
5. 使用正确的订阅ID:在创建服务主体、MSIs和服务连接时,确保您使用的是正确的订阅ID。您可以在Azure门户中的订阅部分找到订阅ID。
6. 检查Azure AD租户:确保您的Azure AD租户与您的订阅和资源所在的租户相匹配。如果您的订阅和资源属于不同的租户,您可能需要与租户管理员合作来确保正确的访问权限。
请注意,上述解决方案是基于一般情况的推测,具体解决方案可能因您的环境和要求而有所不同。如果您仍然遇到问题,请参考Microsoft文档或联系Azure支持团队以获取进一步的帮助和指导。
方案2
如果您无法解决问题,您可以尝试使用其他工具或方法来管理服务主体、MSIs和服务连接的范围。以下是一些可能的解决方案:
1. 使用Azure CLI:您可以使用Azure CLI来创建和管理服务主体、MSIs和服务连接。通过使用正确的命令和参数,您可以确保这些资源的范围限定在您自己的订阅下。您可以在Azure CLI文档中找到有关如何使用Azure CLI的详细信息。
2. 使用Azure PowerShell:类似于Azure CLI,您可以使用Azure PowerShell来创建和管理服务主体、MSIs和服务连接。通过使用适当的命令和参数,您可以确保这些资源的范围限定在您自己的订阅下。您可以在Azure PowerShell文档中找到有关如何使用Azure PowerShell的详细信息。
3. 使用其他自动化工具:如果您使用的是其他自动化工具(如Ansible或Puppet),您可以尝试使用这些工具来创建和管理服务主体、MSIs和服务连接。确保您使用的是正确的命令和配置,以确保这些资源的范围限定在您自己的订阅下。
请注意,上述解决方案是基于一般情况的推测,具体解决方案可能因您的环境和要求而有所不同。如果您仍然遇到问题,请参考Microsoft文档或联系Azure支持团队以获取进一步的帮助和指导。