はじめに
Terraformの勉強を始めたので備忘録を兼ねて行ったことを投稿しようと思います。
これは前回の投稿の続きです。
前回の投稿ではTerraformでEC2の作成を行いました。
今回は作成したEC2にロールを付与してセッションマネージャー経由で接続できるようにしてみます。
TerraformでIAMの定義を行う
信頼ポリシーを定義
まず、信頼ポリシーを定義して何のリソースに何ができるかを定義します。
今回はセッションマネージャー経由でEC2に接続したいので、
AssumeRoleを許可して対象はEC2になるようにします。
data "aws_iam_policy_document" "instance-assume-role-policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ec2.amazonaws.com"]
}
}
}
※data
は外部リソースの情報を取得してTerraform上での利用を可能に
IAMロールを定義
assume_role_policy
に定義した信頼ポリシーの情報を参照します。
resource "aws_iam_role" "test" {
name = "test_role"
assume_role_policy = data.aws_iam_policy_document.instance-assume-role-policy.json
}
IAMポリシーを定義
dataを使ってAWSのAmazonSSMManagedInstanceCore
を参照しARNを取得してロールに紐付けます。
先ほど定義したロールにアタッチされるようにします。
data "aws_iam_policy" "ssm_core" {
name = "AmazonSSMManagedInstanceCore"
}
resource "aws_iam_role_policy_attachment" "test" {
role = aws_iam_role.test.name
policy_arn = data.aws_iam_policy.ssm_core.arn
}
インスタンスプロファイルを定義
IAMロールをEC2に設定するにはインスタンスプロファイルを定義する必要があります。
resource "aws_iam_instance_profile" "test" {
name = "test_role"
role = aws_iam_role.test.name
}
EC2に定義したロールを設定
前回作成したec2.tf
に定義したインスタンスプロファイル追加します。
resource "aws_instance" "test" {
ami = "ami-0404778e217f54308"
instance_type = "t3.micro"
# 以下を追加
iam_instance_profile = aws_iam_instance_profile.test.name
tags = {
Name = "tf_test"
}
}
TerraformでIAMロールを付与してEC2を作成
Terraformのplan
apply
を実行
前回と同様、terraform の plan
apply
を実行して、AWS上にリソースを作成します。
terraform plan
terraform apply
セッションマネージャーで作成したEC2に接続する
AWS マネジメントコンソールを開いて、AWS Systems ManagerのSession Managerを開きます。
セッションの開始
を押すと作成されたインスタンスが表示され、EC2に接続することができます。
作成したリソースの削除
前回と同様、terraform の destroy
を実行して、AWS上のリソースを削除します。
terraform destroy
さいごに
今回は作成したEC2にセッションマネジャー経由でアクセスできるようにIAMの定義を行いました。
次回はブラウザでhttp接続するための設定をTerraformで行いたいと思います。