こんにちは。よっしーです(^^)
今日は、Terrafromを利用したECS環境の構築におけるIAMについてご紹介します。
前提
構築するECS環境は下記のサイトをベースにしています。
また、この記事は下記の記事の続きとなっています。
背景
この記事では、ECS環境におけるIAMの構築についてご紹介しています。
構築イメージ図
この記事で構築しようとしているECSの構成図は下記のとおりです。
ファイル作成
ECS環境の構築で作成するファイルは下記のとおりです。
21_learn_terraform-aws-ecs
├── main.tf
├── output.tf
├── variables.tf
├── ecs
│ ├── ecs.tf
│ ├── output.tf
│ └── variables.tf
├── iam
│ ├── iam.tf
│ ├── output.tf
│ └── variables.tf
├── lb
│ ├── lb.tf
│ ├── output.tf
│ └── variables.tf
├── sg
│ ├── output.tf
│ ├── sg.tf
│ └── variables.tf
└── vpc
├── output.tf
├── variables.tf
└── vpc.tf
今回は、下記のファイル内容をご紹介します。
- iam/iam.tf
- iam/output.tf
- iam/variables.tf
iam/iam.tf
下記の内容で新規作成します。
resource "aws_iam_role" "learn_ecs_task_execution_role" {
name = var.tag_name
assume_role_policy = <<-EOS
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOS
}
resource "aws_iam_policy" "learn_ecs_task_execution_role_policy" {
name = var.tag_name
policy = <<-EOS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:CreateLogGroup"
],
"Resource": "*"
}
]
}
EOS
}
resource "aws_iam_role_policy_attachment" "learn_ecs_task_execution_role_policy" {
role = aws_iam_role.learn_ecs_task_execution_role.name
policy_arn = aws_iam_policy.learn_ecs_task_execution_role_policy.arn
}
iam/output.tf
下記の内容で新規作成します。
output "execution_role_arn" {
value = "${aws_iam_role.learn_ecs_task_execution_role.arn}"
}
iam/variables.tf
下記の内容で新規作成します。
variable "region" {}
variable "az_a" {}
variable "az_c" {}
variable "name_prefix" {}
variable "tag_name" {}
variable "tag_group" {}
解説
iam/iam.tf
AWS Identity and Access Management (IAM) リソースを使用してECSタスク実行ロールを定義するためのものです。ECSタスク実行ロールは、ECSタスクの実行中に使用されるIAMロールで、タスクが必要な権限を付与します。以下がコード内の各リソースの説明です。
aws_iam_role
リソース(learn_ecs_task_execution_role): このリソースは、ECSタスク実行ロールを定義しています。name
にはvar.tag_name
で指定された名前が使用されます。assume_role_policy
で、このロールがecs-tasks.amazonaws.com
サービスによってアサマブル(信頼)されることを示すポリシーが定義されています。これにより、ECSタスクはこのロールを使用して必要なアクションを実行できるようになります。aws_iam_policy
リソース(learn_ecs_task_execution_role_policy): このリソースは、ECSタスク実行ロールに付与されるポリシーを定義しています。name
にはvar.tag_name
で指定された名前が使用されます。ここで定義されているポリシーは、ECR(Elastic Container Registry)へのアクセスやCloudWatch Logsへのログ出力など、タスク実行に必要な権限を指定しています。aws_iam_role_policy_attachment
リソース(learn_ecs_task_execution_role_policy): このリソースは、先に定義したIAMロールとIAMポリシーを関連付けるためのものです。role
にはaws_iam_role.learn_ecs_task_execution_role.name
で指定されたロール名、policy_arn
にはaws_iam_policy.learn_ecs_task_execution_role_policy.arn
で指定されたポリシーARNが使用されます。これにより、ロールにポリシーがアタッチされ、必要な権限が付与されます。
このコードは、ECSタスクが必要とする権限を持つIAMロールとそのポリシーを定義し、ECSタスクの実行に必要な権限を設定します。IAMロールとポリシーの適切な設定は、セキュリティとリソースアクセスの制御を確保するために重要です。
iam/output.tf
このコードは、Terraformの output
ブロックを使用して、IAMロールのARNを出力するためのものです。output
ブロックを使用すると、Terraformの適用後に生成されるリソースの情報を表示できます。以下にコード内の output
ブロックの説明を行います。
ここで定義されている output
ブロックは、名前が execution_role_arn
であり、その値として aws_iam_role.learn_ecs_task_execution_role.arn
を指定しています。これにより、Terraformの適用後にコマンドライン上で terraform apply
を実行すると、IAMロールのARNが表示されます。
これは、適用後の情報を確認したり、他のリソースで参照する際に便利です。例えば、この出力を他のTerraformモジュールに渡すことで、そのモジュール内でこのIAMロールを使用することができます。また、デプロイしたリソースにアクセスするために他のシステムやスクリプトなどで使用することもできます。
iam/variables.tf
提供された変数の宣言は、Terraformコード内で使用される値を格納するためのものです。これらの変数は、環境やコンフィグレーションに合わせて設定されることを想定しています。以下が各変数の説明です。
region
: AWSのリージョンを指定するための変数です。例えば、”us-west-1″や”eu-central-1″などが入ることが想定されます。az_a
およびaz_c
: Availability Zone(AZ)を指定するための変数です。AWSのリージョン内でリソースを配置する際、AZは冗長性や可用性を考慮して選択されます。これらの変数には、AZの識別子(例: “us-west-1a”、”eu-central-1c”)が入ることが想定されます。name_prefix
: リソースに付けるプレフィックス(接頭辞)を指定するための変数です。例えば、”prod-” や “dev-” などが入ることが想定されます。tag_name
およびtag_group
: リソースに付けるタグの値を指定するための変数です。AWSリソースにはタグを付けて、リソースの識別や管理を容易にすることができます。これらの変数には、適切なタグの値が入ることが想定されます。tag_group
: こちらもリソースに付けるタグの値を指定するための変数です。おそらくtag_group
とtag_name
の違いに関連しているかもしれませんが、コード内での具体的な使用方法によって異なる意味を持つかもしれません。
これらの変数は、Terraformコード内で ${var.変数名}
の形式で参照され、実行時に変数の値が提供されます。このような変数の使用は、コードの再利用性や構成の一元管理を容易にするために重要です。
おわりに
今日は、Terrafromを利用したECR環境の構築するために必要なファイルの一部をご紹介しました。残りのファイルも明日以降、ご紹介していきます。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント