amazon-web-services - AWS CodeBuild 作为非 root 用户
问题描述
有没有办法在AWS CodeBuildroot
上删除用户?如果我们是 root(Bitbake 健全性检查),我们正在构建一个在 CodeBuild 上失败的 Yocto 项目。
我们绝望的方法也不起作用:
...
build:
commands:
- chmod -R 777 $(pwd)/ && chown -R builder $(pwd)/ && su -c "$(pwd)/make.sh" -s /bin/bash builder
...
失败:
bash: /codebuild/output/src624711770/src/.../make.sh: Permission denied
知道我们如何以非 root 用户运行它吗?
解决方案
我在 AWS CodeBuild 中成功使用了非 root 用户。
想出一个实用的解决方案不仅仅需要了解一些 CodeBuild 选项。
每个人都应该很容易发现run-as
选项。
下一个问题是“哪个用户?”;您不能只将任何单词作为用户名。
为了找出可用的用户,下一个线索是CodeBuild部分提供的 Docker 映像。在那里,您会找到每个图像定义的链接。对我来说,这个链接将我带到GitHub 上的这个页面。
查看 的源代码后Dockerfile
,我们会知道有一个名为codebuild-user
available 的用户。我们可以在构建规范中使用它codebuild-user
。run-as
然后我们将面临很多其他问题,因为标准映像仅安装每种语言的运行时root
。这是一般解释所能做到的。
对我来说,我想使用 Ruby 运行时,所以我唯一关心的是 Ruby 运行时。如果您将 CodeBuild 用于其他用途,那么您现在就靠自己了。
为了将 Ruby 运行时用作codebuild-user
,我们必须从 root 用户公开它们。为此,我.rbenv
使用以下命令更改 CodeBuild 映像使用的所需权限和所有者。
chmod +x ~
chown -R codebuild-user:codebuild-user ~/.rbenv
(bundler
Ruby的依赖管理工具)还是要访问主目录,这个是不可写的。我们必须设置一个环境变量以使其使用其他可写位置作为主目录。环境变量是BUNDLE_USER_HOME
.
把所有东西放在一起;我的构建规范看起来像:
version: 0.2
env:
variables:
RAILS_ENV: test
BUNDLE_USER_HOME: /tmp/bundle-user
BUNDLE_SILENCE_ROOT_WARNING: true
run-as: codebuild-user
phases:
install:
runtime-versions:
ruby: 2.x
run-as: root
commands:
- chmod +x ~
- chown -R codebuild-user:codebuild-user ~/.rbenv
- bundle config set path 'vendor/bundle'
- bundle install
build:
commands:
- bundle exec rails spec
cache:
paths:
- vendor/bundle/**/*
我的观点是:
- 这确实是可能的。
- 展示我是如何为我的用例做的。
推荐阅读
- azure - Azure 中默认不加载默认招摇索引页面
- ios - 如何将选定的 tableview 行存储在数组中?
- javascript - 基于文件扩展名的 Javascript 显示图像
- kubernetes - 一组微服务的常用 helm 图表模板
- iframe - iframe 中的“window.onload”会监视哪个加载?
- python-3.x - 使用 Python 自动化托管在 Citrix Workspace 上的 Putty
- angular - 如何使 matmenutrigger 仅适用于右键单击事件而不适用于 Angular 中的正常单击?
- javascript - 如何知道从服务器发送到特定客户端是成功还是失败?#socketio
- c++ - 如何使它成为相对路径?
- python-3.x - 如何从 txt 文件中提取具有两个条件的行,一个单词和一个数字?