🔏
【GitHub Actions】OpenID Connectを使用してAWSの認証を行う構成をTerraformで用意する
はじめに
前回は手動で試したので今回は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でした。
ハッシュ値らしいですね
2023年7月1日追記:fingerprint変更
以下GitHubブログの記事を参考にfingerprintを変更
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"
}
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
動作確認
このようにs3バケット一覧が確認出来ます。
参考
Discussion
2023年7月1日追記:GitHubブログの記事を参考にfingerprintを変更
追加内容