🔏

【GitHub Actions】OpenID Connectを使用してAWSの認証を行う構成をTerraformで用意する

2023/06/30に公開
1

はじめに

前回は手動で試したので今回はTerraformでコード化し、使い回せるようにします。

前回と手動で用意したリソースをTerraformで用意し、ワークフローからs3のバケットを一覧取得するまでを目標とします。

Terraform化

aws_iam_openid_connect_provider

IDプロバイダ設定としてGitHubActionsを登録します。

resourceの場合

resource "aws_iam_openid_connect_provider" "githubactions" {
  url = "https://token.actions.githubusercontent.com"
  client_id_list = ["sts.amazonaws.com"]
  thumbprint_list = [
    "6938fd4d98bab03faadb97b34396831e3780aea1",
    "1c58a3a8518e8759bf075b76b750d4f2df264fcd"
  ]
}

cloudformationでのサンプルが以下に記載されているのでパクリましょう参考にします。
fingerprintについてもここに記載されているものでOKでした。
https://github.com/aws-actions/configure-aws-credentials/tree/v1.6.0#sample-iam-role-cloudformation-template

ハッシュ値らしいですね

2023年7月1日追記:fingerprint変更

以下GitHubブログの記事を参考にfingerprintを変更
https://github.blog/changelog/2023-06-27-github-actions-update-on-oidc-integration-with-aws/

hcl
resource "aws_iam_openid_connect_provider" "githubactions" {
  url = "https://token.actions.githubusercontent.com"
  client_id_list = ["sts.amazonaws.com"]
-  thumbprint_list = ["a031c46782e6e6c662c2c87c76da9aa62ccabd8e"]  
+  thumbprint_list = [
+    "6938fd4d98bab03faadb97b34396831e3780aea1",
+    "1c58a3a8518e8759bf075b76b750d4f2df264fcd"
+  ]
}

dataの場合

既にIDプロバイダとしてGitHubActionsを登録している場合はdataで参照します

data "aws_iam_openid_connect_provider" "githubactions" {
  url = "https://token.actions.githubusercontent.com"
}

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_openid_connect_provider

IAMロール

resource "aws_iam_role" "githubactions" {
  name = "githubactions"
  path = "/"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect = "Allow"
      Action = "sts:AssumeRoleWithWebIdentity"
      Principal = {
        Federated = data.aws_iam_openid_connect_provider.githubactions.arn
      }
      Condition = {
        StringLike = {
          "token.actions.githubusercontent.com:sub" = [
            "repo:<account>/<repo>:*"
          ]
        }
      }
    }]
  })
  managed_policy_arns = ["arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"]
}

空コミット

secretsに今回作成したロールのArnを入れたら準備OKです。
コードは変わってないので、空コミットでワークフローを動かします。

$ git commit --allow-empty -m "empty commit"
$ git push -u origin main

https://qiita.com/subun33/items/8041a0e74147249d400e

動作確認

このようにs3バケット一覧が確認出来ます。

参考

https://zenn.dev/nameless_gyoza/articles/github-actions-aws-oidc-by-terraform
https://qiita.com/minamijoyo/items/eac99e4b1ca0926c4310
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_openid_connect_provider.html

Discussion