Phase 1 Sprint 0 Infra-3: (platform/tasks) GitHub Actions OIDC + plan/apply×platform/tasks = 4 IAM Role(Environment 分離)
概要
GitHub Actions の workflow から AWS へ OIDC trust relationship で IAM Role を assume(長寿命 access key を Secrets に置かない)。ADR-0004 の platform/tasks 2 stack 分離に合わせ、plan(read-only)/ apply(write)× platform / tasks = 4 role に分け、GitHub Environment で割り当てを分離する。
詳細仕様: infra/docs/adr/0004-platform-project-infra-separation.md §3.F / docs/architecture/infrastructure-plan.md §6.1。
stack / 配置(ADR-0004)
- OIDC Provider + 4 role はアカウント単位の共有資産。platform stack(
infra/shared/environments/dev/、key platform/dev/...)の iam_oidc module に置く(tasks 非依存)。
- state backend は key prefix で分離: platform-* role →
platform/*、tasks-* role → tasks/*。
実装内容
A. AWS 側(OIDC Provider + 4 IAM Role)
- IAM OIDC Provider:
https://token.actions.githubusercontent.com(アカウントに 1 つ)
- 4 role(trust policy で
repo:win2cot/tasks-webapi + GitHub Environment 条件に限定):
| role |
用途 |
state backend |
resource 権限 |
SSM |
platform-dev-plan |
PR plan(read-only) |
platform/* 読取 |
network/alb/ses 読取 |
/platform/dev/* 読取 |
platform-dev-apply |
apply(write) |
platform/* 読書 |
network/alb/ses CRUD |
/platform/dev/* 読書(publish) |
tasks-dev-plan |
PR plan(read-only) |
tasks/* 読取 |
tasks resource 読取 |
/platform/dev/* + /tasks/dev/* 読取 |
tasks-dev-apply |
apply(write) |
tasks/* 読書 |
tasks resource(SG/RDS/ECS/Route53/PS 等)CRUD |
/platform/dev/* 読取 + /tasks/dev/* 読書 |
use_lockfile のため state lock は s3:PutObject / GetObject / DeleteObject で完結(DynamoDB 権限不要)。
B. Terraform
infra/shared/modules/iam_oidc/ モジュール化(OIDC Provider + 4 role + policy)
infra/shared/environments/dev/main.tf から呼び出し
- 命名
platform-dev-* / tasks-dev-*
C. GH Actions workflow 雛形 + Environment
- GitHub Environment:
platform-dev / tasks-dev(apply role の assume を Environment 保護で限定)
.github/workflows/terraform-apply.yml(Sprint 0 ではコメント out 可、apply role 使用)
permissions: id-token: write / aws-actions/configure-aws-credentials@v4
受入条件
関連
備考
- task-type:
task-type:impl / 優先度: priority/p0 / area: area/infra + area/ci
- claude-automation: 適用(IAM 標準パターン)。ただし plan-in-CI の workflow(
terraform-plan.yml)は case B 人手 PR
スコープ追加(2026-06-04): plan-in-CI を内包(旧 Tier B)
plan role を作ったその場で terraform plan を通し OIDC 疎通まで動作確認するため、Terraform plan の PR CI を本 issue に統合。
追加実装
.github/workflows/terraform-plan.yml: PR 時に platform-plan / tasks-plan role を OIDC assume → 各 root で terraform init(remote backend)→ terraform plan -no-color -lock=false(read-only)
- plan 出力を sticky comment(platform / tasks 別 header)へ
- paths-filter は terraform ファイル限定(
infra/**/*.tf / infra/**/*.hcl / infra/**/*.tfvars / 当ワークフロー)(dorny/paths-filter)+ concurrency。infra/** 全体は doc-only(.md)で誤発火するため不可
- リソース投入(S0Infra-4 以降)前は空 plan("no changes")になるが、雛形と OIDC 疎通はここで確認
追加受入条件
関連: Terraform CI tracker #382(Tier A fmt/validate・IaC スキャンと同パイプライン)
Phase 1 Sprint 0 Infra-3: (platform/tasks) GitHub Actions OIDC + plan/apply×platform/tasks = 4 IAM Role(Environment 分離)
概要
GitHub Actions の workflow から AWS へ OIDC trust relationship で IAM Role を assume(長寿命 access key を Secrets に置かない)。ADR-0004 の platform/tasks 2 stack 分離に合わせ、plan(read-only)/ apply(write)× platform / tasks = 4 role に分け、GitHub Environment で割り当てを分離する。
詳細仕様:
infra/docs/adr/0004-platform-project-infra-separation.md§3.F /docs/architecture/infrastructure-plan.md§6.1。stack / 配置(ADR-0004)
infra/shared/environments/dev/、keyplatform/dev/...)のiam_oidcmodule に置く(tasks 非依存)。platform/*、tasks-* role →tasks/*。実装内容
A. AWS 側(OIDC Provider + 4 IAM Role)
https://token.actions.githubusercontent.com(アカウントに 1 つ)repo:win2cot/tasks-webapi+ GitHub Environment 条件に限定):platform-dev-planplatform/*読取/platform/dev/*読取platform-dev-applyplatform/*読書/platform/dev/*読書(publish)tasks-dev-plantasks/*読取/platform/dev/*+/tasks/dev/*読取tasks-dev-applytasks/*読書/platform/dev/*読取 +/tasks/dev/*読書use_lockfileのため state lock はs3:PutObject/GetObject/DeleteObjectで完結(DynamoDB 権限不要)。B. Terraform
infra/shared/modules/iam_oidc/モジュール化(OIDC Provider + 4 role + policy)infra/shared/environments/dev/main.tfから呼び出しplatform-dev-*/tasks-dev-*C. GH Actions workflow 雛形 + Environment
platform-dev/tasks-dev(apply role の assume を Environment 保護で限定).github/workflows/terraform-apply.yml(Sprint 0 ではコメント out 可、apply role 使用)permissions: id-token: write/aws-actions/configure-aws-credentials@v4受入条件
platform/*・tasks/*)で分離terraform plan(platform)差分なしaws sts get-caller-identity成功関連
Phase 1/ Iteration: Phase 1 Sprint 0備考
task-type:impl/ 優先度:priority/p0/ area:area/infra+area/citerraform-plan.yml)は case B 人手 PRスコープ追加(2026-06-04): plan-in-CI を内包(旧 Tier B)
plan role を作ったその場で
terraform planを通し OIDC 疎通まで動作確認するため、Terraform plan の PR CI を本 issue に統合。追加実装
.github/workflows/terraform-plan.yml: PR 時に platform-plan / tasks-plan role を OIDC assume → 各 root でterraform init(remote backend)→terraform plan -no-color -lock=false(read-only)infra/**/*.tf/infra/**/*.hcl/infra/**/*.tfvars/ 当ワークフロー)(dorny/paths-filter)+ concurrency。infra/**全体は doc-only(.md)で誤発火するため不可追加受入条件
関連: Terraform CI tracker #382(Tier A fmt/validate・IaC スキャンと同パイプライン)