概要
の続きです。
IAM周りの作成を行います。参考サイトでは「OpenID Connect ID Provider」と「IAM ロール」の部分です。
この記事はそのメモやまとめです。
すでに設定済みの項目がいくつかある。
試行錯誤しながらやったので、手順として不要かもしれない。あくまでメモ用。
完成した資材
# IAMポリシーを定義
data "aws_iam_policy_document" "s3_policy_for_github_actions" {
statement {
effect = "Allow"
actions = ["s3:ListBucket", "s3:PutObject"]
resources = ["arn:aws:s3:::hogehoge", "arn:aws:s3:::hogehoge/*"]
}
}
resource "aws_iam_policy" "s3_policy_for_github_actions" {
name = "S3AccessPolicy"
Path = "/"
policy = data.aws_iam_policy_document.s3_policy_for_github_actions.json
}
# assumerole用のIAMロールを定義
data "aws_iam_policy_document" "github_assume_role" {
statement {
actions = ["sts:AssumeRoleWithWebIdentity"]
effect = "Allow"
principals {
type = "Federated"
identifiers = arn:aws:iam::xxxx
}
}
condition {
test = "StringLike"
variable = "token.actions.githubusercontent.com:sub"
values = "repo:my-repo/hogehoge:*"
}
}
resource "aws_iam_role" "github_assume_role" {
name = "github_assume_role"
assume_role_policy = data.aws_iam_policy_document.assume_role.json
}
# IAMロールにIAMポリシーをアタッチする
resource "aws_iam_role_policy_attachment" "test-attach" {
role = aws_iam_role.github_assume_role.name
policy_arn = aws_iam_policy.s3_policy_for_github_actions.arn
}
上記をapplyしてリソースを作成。
これで、CloudFront + S3 構成の静的コンテンツ配信するガワを作成し、GitHub Actions から AWS へアクセスすための認証(OpenID Connect provider)、権限(IAM ロール)の用意が完了しました。
ハマったところとか
- dataでjsonで記載する中身を書き、それをresourceで読み込むという流れを理解するまでに時間がかかった。
- 意外とiam系のterraformについて言及しているブログなどがなかったので作成するだけでかなり大変だった。
次にやること
- GitHub Actionsの設定
- HUGOでHPをいい感じに編集する
- テスト記事の投稿