とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

TerraformでAWS OIDCを設定する

GitHub ActionsとAWSをOIDCで接続する記事は以前に書きました。

devops-blog.virtualtech.jp

この時は手で設定していたのですが、今回はTerraformを使って設定してみます。

今回つかうファイルの説明

コードはこちら

github.com

リポジトリの中身はこんな感じ

.
├── .github
│   └── workflows
│       └── actions.yaml
├── .terraform.lock.hcl
├── .tool-versions
├── README.md
├── main.tf
├── outputs.tf
└── versions.tf

3 directories, 7 files

確認用のActionsです。

├── .github
│   └── workflows
│       └── actions.yaml

パブリックリポジトリなので、こちらからどういう動作をしているのかが確認できます。

Workflow runs · VirtualTech-DevOps/terraform-aws-oidc · GitHub

動作してる画面はこちら


Terraformのモジュールなどのバージョンが書かれたファイルです。

├── .terraform.lock.hcl

今回使うコマンドラインツールのリストです。

├── .tool-versions

これらのツールを使います。

asdfを使うと.tool-versionsと同じディレクトリでasdf installとすることでツールのインストールができます。
asdfの使い方はこちらをご覧ください。

devops-blog.virtualtech.jp


Terraformのコードです。

├── main.tf
├── outputs.tf
└── versions.tf

特に難しいことはしてなくて、main.tfでIDプロバイダーとロールの作成、outputs.tfで作成されたロールのArnを出力します。versions.tfではTerraformとAWSプロバイダーのバージョンを固定しています。

このコードを実行することで、AWSにIDプロバイダーと、GitHubOIDC-のプレフィックでロールが作成されます。 このロールをGitHub Actions側から指定することで、GitHub ActionsとAWS間でOIDCを使用した接続ができるようになります。

Terraformを実行

Terraformを実行すると、AWSにリソースが作成されます。AWS CLIで対象のAWSが操作対象に設定されているか必ず確認してください。


リポジトリのルートに移動して以下のコマンドを実行します。

terraform init

これでコードの中で使用しているプロバイダーやモジュールがダウンロードされ、コードの実行環境が準備されます。


実行計画を作成します。

terraform plan

このコマンドで、コードからどういうリソースが作成されるかを見ることができます。バグのあるコードや構文エラーなどがあれば、この段階で発見することができるので、必ず結果を見るようにします。


リソースを作成します。

terraform apply

作成されたロールを確認します。

terraform output -raw role

ここまででエラーが出ていなければリソースの作成は成功です。

GitHub Actionsに設定してみる

っと言っても設定は難しくありません。
GitHub Actionsで使用する変数を設定していきます。


IAMロールの値を変数に設定します。

terraform output -raw role | gh variable set assume_role

AWSリージョンの値を変数に設定します。

terraform output -raw region | gh variable set aws_region

ここまで設定できれば何か適当なファイルをコミットしプッシュすることでGitHub Actionsが動きOIDC接続できていることが確認できます。