以非 root 用户身份使用 AWS CodeBuild

2024-05-10

有没有办法掉root用户开启AWS 代码构建? 我们正在构建一个 Yocto 项目,如果我们是 root(Bitbake 健全性检查),该项目将在 CodeBuild 上失败。

我们绝望的做法也不起作用:

...

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 中使用非根用户。
要提出实用的解决方案,需要的不仅仅是了解一些 CodeBuild 选项。

每个人都应该发现run-as option 很容易 https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html.
下一个问题是“哪个用户?”;您不能只输入任何单词作为用户名。

为了找出哪些用户可用,下一条线索位于CodeBuild 提供的 Docker 镜像 https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html部分。在那里,您将找到每个图像定义的链接。 对我来说,该链接引导我到GitHub 上的此页面 https://github.com/aws/aws-codebuild-docker-images/tree/master/ubuntu/standard/4.0
检查了源代码后Dockerfile,我们就会知道有一个名为codebuild-user可用的。我们可以用这个codebuild-user为了我们的run-as在构建规范中。

然后我们将面临很多其他问题,因为标准映像仅安装每种语言的运行时root仅有的。 这是一般性的解释所能达到的程度。

对于我来说,我想使用 Ruby 运行时,所以我唯一关心的是 Ruby 运行时。 如果您将 CodeBuild 用于其他用途,那么您现在就得靠自己了。

为了利用 Ruby 运行时codebuild-user,我们必须从 root 用户公开它们。为此,我更改了所需的权限和所有者.rbenv由 CodeBuild 映像通过以下命令使用。

chmod +x ~
chown -R codebuild-user:codebuild-user ~/.rbenv

 
The 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/**/*

我的观点是:

  • 这确实是可能的。
  • 展示我是如何针对我的用例做到这一点的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以非 root 用户身份使用 AWS CodeBuild 的相关文章

  • 无法编译cuda_ndarray.cu:libcublas.so.7.5:无法打开共享对象文件

    我正在尝试在 aws 实例中导入 theano 库以使用 GPU 我已经使用 boto 编写了一个 python 脚本来自动执行 aws 设置 该脚本本质上会从我的本地计算机对实例执行 ssh 然后启动一个 bash 脚本 其中我执行 py
  • 如何生成涉及多个指标的AWS CloudWatch警报

    需要为API网关和Lambda函数生成CloudWatch警报 对于 API 网关 CloudWatch 如果给定时间段 例如 5 分钟 5XX 错误计数占总请求计数的 10 则应生成警报 同样 如果最大延迟占总请求数的 6 gt 4 秒
  • 如何使提供程序假设_角色块有条件

    我有一个provider我想给的块assume role属性 但前提是它没有在我的本地计算机上运行 我定义了一个变量islocal在所有环境中 tfvars文件 只有本地文件具有该值true 这是provider block provide
  • AWS AppSync 授权

    我计划使用 AWS Appsync 迁移 lambda 函数中的 graphQL 终端节点 该函数由 API 网关的 POST 触发 我研究 AppSync 主要是因为订阅 我无法使用 Lambda 函数创建订阅 我的身份验证机制基于 Au
  • AWS Fargate - 卷

    我的 docker compose 文件有问题 这是我的 docker 撰写文件 version 3 services nginx proxy image xxxxx dkr ecr xxxxx amazonaws com xxxx lat
  • 如何在没有终端节点令牌的情况下确认 Amazon SNS 的订阅?

    在我的 JAVA 应用程序中 我使用 Amazon SNS 向客户发送电子邮件 一旦我将一位客户 电子邮件 ID 订阅到我的 SNS 主题 它要求客户确认订阅以接收电子邮件 有什么方法可以在您的应用程序本身中确认订阅 无需客户的帮助 不 这
  • 自动提取S3中的.gz文件

    我正在尝试找到一种解决方案 以便在 ALB 日志文件自动从 ALB 上传到 S3 时提取 gz 格式的 ALB 日志文件 我的桶结构是这样的 log bucket alb 1 AWSLogs account number elasticlo
  • kubernetes + coreos 集群 - 替换证书

    我有一个 coreos kubernetes 集群 我是按照这篇文章开始的 AWS 上的 kubernetes coreos 集群 https coreos com kubernetes docs latest kubernetes on
  • AWS Cognito / 从子节点获取用户信息

    我有一个使用 AWS Cognito AWSMobileClient 的工作 iOS 应用程序 用户可以使用 AWSAuthUI 登录和登录 注销 接下来我想做的是 拥有另一个用户的子 例如 7y873ff7 u9h4k 我想从其他用户那里
  • 如何在API网关前面添加CloudFront

    API 网关 APIG 虽然它使用 CloudFront CF 但不支持 CDN 边缘缓存 当我将 CF 发行版配置为使用 APIG 作为自定义源时 我收到权限被拒绝错误 如何配置 CF 来解决此问题 在 API Gateway APIG
  • 使用端口 80 的 AWS Elastic Beanstalk 上的 WebSocket 问题

    我正在将一个 node js 应用程序从 Heroku 迁移到在端口 80 上使用 WebSocket 的 AWS Elastic Beanstalk WebSocket 在 AWS Elastic Beanstalk 上返回 301 错误
  • Terraform:如何附加服务器计数并将服务器分配给多个可用区?

    main tf resource aws instance service ami lookup var aws winamis var awsregion count var count key name var key name ins
  • 如何让AWS Lambda停止执行?

    我有一个AWSLambda 函数执行操作Kinesis Firehose 该函数使用退避机制 此时我认为这是浪费我的计算时间 但无论如何 在我的代码中的某个时刻 我希望执行失败 我应该使用什么命令来停止执行 附注 我发现有这样的命令 con
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • 使用 python 写入 aws lambda 中的 /tmp 目录

    Goal 我正在尝试将 zip 文件写入 python aws lambda 中的 tmp 文件夹 因此我可以在压缩之前提取操作 并将其放入 s3 存储桶中 Problem 操作系统 Errno30 只读文件系统 这段代码在我的计算机上进行
  • 避免在 AWS Lambda 上使用 netcore2.0 和 Serilog 进行两次日志记录

    将我的 netcore 项目升级到 2 0 后 当我的应用程序在使用 Serilog 框架的 AWS Lambda 上运行时 我会看到双日志 请参阅下面我的设置 public void ConfigureServices IServiceC
  • 允许 Amazon VPC A 访问 VPC B 上的新私有子网吗?

    我有一个现有的 VPC vpcA 并且最近设置了一个新的 VPC vpcB 同时具有私有子网 privateSubnet 和公共子网 publicSubnet 我想允许来自以下位置的连接vpcA to vpcB vpcB设置了堡垒服务器以允
  • 为什么此 HTTP 请求在 AWS Lambda 上不起作用?

    我正在开始使用 AWS Lambda 并尝试从我的处理程序函数请求外部服务 根据这个答案 https stackoverflow com a 27932216 473467 HTTP 请求应该可以正常工作 而且我还没有找到任何其他说明的文档
  • Nginx 配置文件在 Elastic Beanstalk 部署期间被覆盖?

    我需要将 p3p 标头添加到标准 Nodejs 和 Nginx Elastic Beanstalk 上的静态资源位置 我创建了一个ebextension脚本如上所解释这个问题 https stackoverflow com question
  • 使用随机目录结构重命名传入的 S3 文件

    我有一个可以将文件发送到 s3 存储桶的应用程序 不幸的是 我无法更改它在 s3 中发送到的路径 因此我必须找到一种方法来获取该文件 mys3bucket apps region 020 07 14T22 24 34Z details cs

随机推荐