我在 Google Cloud 上创建了一个 Apt 存储库,用于托管 Debian 软件包。目标是使用访问令牌/私钥或类似的东西从互联网进行私人访问。访问存储库的机器是与 Google Cloud 无关的标准机器,它们没有 gcloud 和 gcloud 凭据。访问存储库的选项有哪些?或者,如果这不起作用(不以手动方式执行),如何在 Google Cloud 上托管私有 Apt 存储库?
答案1
通过使用访问令牌或私钥限制访问,您可以通过几种不同的方法获得对 Google Cloud 上 Apt 存储库的私人访问权限,而无需在设备上使用 gcloud 凭据。
取决于您的需求和要求。考虑您的安全需求、预算和所需的控制级别等因素,并采取以下任何一种方法:
使用带有签名 URL 的云存储:您的 Debian 软件包应上传到云存储桶。授予某个服务帐户对该存储桶的读取权限并创建签名 URL包含存储桶中对象的到期日期。将这些经过验证的 URL 发送到需要存储库访问的机器。
将 Artifactory 存储库与 IAM 身份验证结合使用:使用托管服务 Google Artifact Registry 存储包和容器镜像。确保您的 Debian 包存储在私有存储库中。要提供对特定服务帐户的访问权限,请配置访问控制使用 IAM 策略。机器可以使用这些凭证来访问存储库。
使用云函数: 创建一个云功能它可作为存储在云存储桶中的软件包的安全入口点。该函数可以使用令牌和证书来管理身份验证。如果身份验证完成,该函数将为请求的软件包提供临时下载 URL。
编辑1:
虽然它是管理私有包的不错选择,但Artifact 注册表不直接与 Debian 系统上的标准 apt 工具集成。对于您的私有存储库,您仍然可以使用 Artifact Registry,而在客户端计算机上,您可以使用特定工具来访问包。
根据官方 GCP 文件管理 Debian 软件包:
“Artifact Registry 支持您使用 Apt 管理的 Debian 软件包”。对于您的 Debian 软件包,您必须首先在 Artifact Registry 中建立一个私有存储库。
将所需的 IAM 权限分配给将用于身份验证的服务账户(例如,roles/artifact registry.reader)。
在客户端计算机上安装与 Artifact Registry 兼容的 Docker 工具或类似工具。请参阅此官方 GCP 文档使用 Docker 推送和拉取容器镜像了解更多信息。
编辑2
没错,上一个答案使用 docker 进行身份验证,但这并不直接相关。对于这个问题,我将为您提供一种相关方法,即利用私有 Artifact Registry 存储库和 Curl 作为工具进行 IAM 身份验证。
设置 IAM 身份验证:
转到 Google Cloud Console > IAM Admin-Service Accounts。单击它并创建一个新的服务帐户,以便您可以访问存储库。
分配角色,如工件注册表等。然后由读者读取服务帐户。这将授予您对自己的工件注册表存储库的读取权限。
您需要下载此服务帐户的 JSON Key 文件,因为它包含身份验证凭据。
接下来,对上一步中获得的 JSON 密钥文件的内容进行 base64 编码。您可以使用 base64 或任何其他您熟悉的工具进行此编码。授权标头需要此编码文本。
编码的 _key = $(base64 密钥 _file.json)
现在,需要为 curl 命令添加一个额外的权限标头,即授权:bearer<encoded_key>
添加授权标头以及编码密钥后,可以使用 curl 从您的 Artifact 注册表存储库下载包。
按照上述步骤,您只需使用 curl 和服务帐户凭据即可从机器上的私有 Artifact 注册表存储库下载软件包,而无需 gcloud 或 docker。
参考此文档JFrog 提供了有关使用 cURL 和访问令牌的更多信息