问题描述
在创建Azure DevOps与Azure之间的服务连接时,对于创建的服务主体在Azure AD中的生命周期有些困惑。他按照以下步骤进行操作:
1. 选择了Azure资源管理器
2. 选择了推荐的选项
3. 填写了相关信息
他现在拥有一个有效的服务连接,可以从DevOps部署到Azure。唯一需要的是具有足够权限的用户。甚至可以在Azure中看到服务主体,并显示客户端密钥将在两年后过期:
他有以下疑问:
1. 当客户端密钥过期时,服务连接是否会停止工作?还是Azure DevOps会自动延长过期日期?
2. 在哪里能找到关于这方面的信息?他无法在文档中找到相关内容,因此只能自行解释“服务主体”概念。如果用于创建主体的用户被禁用或删除,服务主体是否会继续存在?
3. 如果问题2的解释正确,那么主体何时被删除?当主体的范围被删除时?还是当服务主体本身被删除时?
解决方案
请注意以下操作可能涉及版本差异,请确保在进行操作前做好备份。
客户端密钥过期与服务连接
- 当客户端密钥过期并且服务连接出现错误时,你需要刷新连接。在连接的编辑对话框中,不需要进行任何更改,只需保存即可。具体操作请参考:Azure devops service connection expired and cannot edit/renew。
- 如果你删除了与用于Azure DevOps连接的服务主体相关联的所有密钥,连接仍然可能继续工作。这取决于你是通过自动方式还是手动方式创建连接的。
- 通过自动方式创建的连接不依赖于密钥,因此即使删除密钥,连接可能仍然保持有效。
- 通过手动方式创建的连接,如果删除了所有密钥,连接可能会停止工作。
服务主体的存在与删除
- 服务主体是独立于创建它的用户而存在的,所以即使创建它的用户被删除,服务主体仍然会存在。
- 为了最佳实践,建议给服务主体设置多个所有者。如果唯一的服务主体所有者被删除,你需要具备更高的权限来管理所有服务主体。
服务主体的删除时机
- 服务主体本身不会自动过期,只有为其生成的密钥会过期。要手动删除服务主体对象,你需要执行删除操作。
请注意,服务主体在Azure AD的”应用程序注册”中存在。另外需要注意的是,默认情况下,创建服务主体时,它会被授予对其所属订阅的完全读写访问权限。你可以在创建时使用参数选项来禁用这一默认行为。
示例脚本:手动控制连接顺序
如果你想要手动控制容器的启动顺序,你可以使用类似以下的脚本:
#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b
在这个示例中,我们使用docker run
命令启动容器A,并将其命名为container_a
。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo
命令来测试)。一旦容器A就绪,我们再使用docker run
命令启动容器B,并将其命名为container_b
。
希望这些解决方案能够帮助你理解Azure DevOps服务连接中服务主体的生命周期和管理方法。