Carpe Diem

備忘録

あるIAMパーミッションがどのロール・ユーザに含まれるか調べる方法

概要

GoogleCloudのIAMにおいて、ユーザやサービスアカウントの権限の棚卸しをする際に、とあるIAMパーミッションがどのロール・ユーザ(メンバー)に含まれるか調べる方法です。

事前に以下を知っておくとイメージが付きやすいです。

christina04.hatenablog.com

手順

ロールやユーザ(メンバー)の関係図は次のようになっています。

続きを読む

Bazel + CEL でgo_default_libraryが必要になる問題の対処方法

背景

Bazelで依存関係を管理している環境で、celライブラリを導入したところ次のようなエラーが発生しました。

'@com_github_google_cel_go//cel:cel': target 'cel' not declared in package 'cel' defined by /external/com_github_google_cel_go/cel/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//common/overloads:overloads': target 'overloads' not declared in package 'common/overloads' defined by /external/com_github_google_cel_go/common/overloads/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//common/types:types': target 'types' not declared in package 'common/types' defined by /external/com_github_google_cel_go/common/types/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//common/types/ref:ref': target 'ref' not declared in package 'common/types/ref' defined by /external/com_github_google_cel_go/common/types/ref/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//common/types/traits:traits': target 'traits' not declared in package 'common/types/traits' defined by /external/com_github_google_cel_go/common/types/traits/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//ext:ext': target 'ext' not declared in package 'ext' defined by /external/com_github_google_cel_go/ext/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/celext:celext'
'@com_github_google_cel_go//cel:cel': target 'cel' not declared in package 'cel' defined by /external/com_github_google_cel_go/cel/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/expression:expression'
'@com_github_google_cel_go//interpreter:interpreter': target 'interpreter' not declared in package 'interpreter' defined by /external/com_github_google_cel_go/interpreter/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/expression:expression'
'@com_github_google_cel_go//cel:cel': target 'cel' not declared in package 'cel' defined by /external/com_github_google_cel_go/cel/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/constraints:constraints'
'@com_github_google_cel_go//cel:cel': target 'cel' not declared in package 'cel' defined by /external/com_github_google_cel_go/cel/BUILD.bazel and referenced by '@com_github_bufbuild_protovalidate_go//internal/evaluator:evaluator'

これはcel-goに依存していた場合のBazelのターゲットの記述が本来は

go_library(
    ...
    deps = [
        ...
        "@com_github_google_cel_go//cel:go_default_library",
        ...
    ],
)

であるべきが、gazelleを使ったところ

go_library(
    ...
    deps = [
        ...
        "@com_github_google_cel_go//cel",
        ...
    ],
)

となってターゲットの記述が不適切になってしまったせいです。

今回はこの回避策方法について説明します。

続きを読む

Goのテストで一部のフィールドを対象外にしたい

背景

Goのテストを書いていると大半のフィールドは検査したいけれど

  • 自動生成しているUUIDのようにランダムになる部分
  • UpdatedAt, CreatedAtのように時刻のずれが影響する部分

を対象外としたいケースが出てきます。

単純に考えると以下のような方法が浮かびますが、それぞれ欠点があります。

  • 1つ1つのフィールドを書き出すとフィールドが追加されたときに漏れることがある
  • gomock.Any()にするとそれ以外のフィールドのテストができなくなる

そういった部分をどう除外するかを説明します。

環境

  • go v1.22.6
  • go-cmp v0.6.0
  • gomock v1.6.0
続きを読む

JWSをローカルでデコードする方法

概要

JWS(JWT系アクセストークンやAppleのレシートなど)の中身をサクッと見たいけれど、Web上のサービスを使うとログに残ったりして情報漏洩のリスクがあるのでローカルでデコードしたい場合の手順です。

環境

ダミーデータ

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

というダミーのJWSがあるとします。

中身は以下です。

{
  "alg": "HS256",
  "typ": "JWT"
}

payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

signature

SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

続きを読む

Bazelで他パッケージのテストファイルを参照したい

背景

Bazelでは次のようなディレクトリ構成で、

.
├── package_a
│   ├── a.go
│   ├── a_test.go
│   └── test.yaml
└── package_b
    ├── b.go
    └── b_test.go

パッケージAのファイルtest.yamlをパッケージBのテストで参照したい時に、

go_test(
    name = "b_test",
    srcs = ["b_test.go"],
    deps = ["//path/to/package_a:package_a_lib"],
    data = ["//path/to/package_a"],
)

としても、直接は参照できないです。

今回はその解決方法です。

環境

  • Bazel v7.2.0
続きを読む

PlantUMLのaltとoptの区別

背景

たまにPlantUMLでシーケンス図を書くと、altとoptの区別がごっちゃになることがあるのでメモします。

違い

仕様上の違い

alt

else if および else を設定できる。

opt

else if および else が設定できない。

続きを読む

Obsidianでチェックボックスを一覧化したい

背景

僕は通常Todoistでタスク管理をしていますが、小さな作業はThino(旧Memos)経由でデイリーログにチェックボックスとして追加します。
例えば「後で読む」みたいなやつです。

しかしながらその日中に終わらなかったタスクは忘れ去られてしまいがちです。

なので複数のノートをまたいでチェックボックスを一覧化する方法を模索しました。

環境

  • Obsidian v1.5.12
  • Checklist v2.2.13
  • Cardboard v0.7.9
  • Dataview v0.5.66

方法

a. Checklistプラグインを使う

Checklistというプラグイン#todoというタグを付けると、そのファイルの中にあるチェックボックスを次のように一覧化してくれます。

続きを読む