Pikeを使用した最低限のIAMポリシーの作成

スポンサーリンク
Pikeを使用した最低限のIAMポリシーの作成 ノウハウ
Pikeを使用した最低限のIAMポリシーの作成
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、先日作成したTerraformの実行用IAMユーザーへのポリシーの作成についてご紹介します。

スポンサーリンク

背景

Terraformを使用してAWSリソースを作成、変更、削除する場合、TerraformはAWS APIを呼び出して、必要なリソースを作成または変更します。このため、Terraformを実行するIAMユーザーには、必要なリソースを作成、変更、削除するための十分な権限が必要です。

ポリシーは、IAMユーザーが必要なリソースにアクセスできるようにするために使用されます。IAMユーザーに対して適切なポリシーが割り当てられていない場合、TerraformはAWS APIに対して十分な権限を持っていないため、必要なリソースを作成、変更、削除することができません。

そのため、Terraformを実行するIAMユーザーには、Terraformが必要とするすべてのリソースに対して必要なアクセス権を持つポリシーを割り当てることが重要です。ただし、必要な最小限の権限のみを付与するようにポリシーを作成し、IAMユーザーにはそれ以上の権限を与えないことが推奨されます。

上記の理由から、Pikeというオープンソースを使用して、最小限のポリシーを付与します。

Pikeのインストール

Pikeの公式サイトは下記になります。

このサイトのインストール手順に従い、下記の手順でインストールしました。

% brew tap jameswoolfenden/homebrew-tap

% brew install jameswoolfenden/tap/pike

% Pike --version
pike version v0.2.74

main.tfの用意

下記のmain.tfファイルを用意します。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_instance" "app_server" {
  ami           = "ami-04310c38b29b29953"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

ポリシーの抽出

main.tfファイルがあるディレクトリで下記のコマンドを実行します。

pike scan .

上記のコマンド実行の結果として、下記の結果が得られます。

resource "aws_iam_policy" "terraform_pike" {
  name_prefix = "terraform_pike"
  path        = "/"
  description = "Pike Autogenerated policy from IAC"

  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:DeleteTags",
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceCreditSpecifications",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeInstances",
                "ec2:DescribeTags",
                "ec2:DescribeVolumes",
                "ec2:ModifyInstanceAttribute",
                "ec2:RunInstances",
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
})
}

ポリシーの適用

下記のコマンドでポリシーの作成ができる想定でしたが、エラーで作成できませんでした。

pike make .

なので、上記のポリシーをAWSコンソールマネジメントから適用すると最低限のポリシー適用ができると思います。

なお、エラー内容は下記になります。もし、わかる方がいれば教えて下さい。

% pike make .                                   
11:59PM DBG terraform init at /Users/xxx/github/Musica/02_learn-terraform-docker-container
11:59PM DBG modules not found at .
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x104a379d4]

goroutine 1 [running]:
main.main.func1(0x104da73c0)
        /home/runner/work/pike/pike/main.go:51 +0x34
github.com/urfave/cli/v2.(*Command).Run(0x140001726e0, 0x140003ea980, {0x140003ea9c0, 0x4, 0x4})
        /home/runner/go/pkg/mod/github.com/urfave/cli/v2@v2.25.1/command.go:274 +0x78c
github.com/urfave/cli/v2.(*Command).Run(0x140001734a0, 0x140003ea800, {0x14000114050, 0x5, 0x5})
        /home/runner/go/pkg/mod/github.com/urfave/cli/v2@v2.25.1/command.go:267 +0x9ac
github.com/urfave/cli/v2.(*App).RunContext(0x1400045a000, {0x104e97e30?, 0x1400012e008}, {0x14000114050, 0x5, 0x5})
        /home/runner/go/pkg/mod/github.com/urfave/cli/v2@v2.25.1/app.go:332 +0x604
github.com/urfave/cli/v2.(*App).Run(...)
        /home/runner/go/pkg/mod/github.com/urfave/cli/v2@v2.25.1/app.go:309
main.main()
        /home/runner/work/pike/pike/main.go:302 +0x2f60

と書いていて、気付きましたが、下記のコマンドを実施して、AWSのプロファイル設定をすれば、実行できました。

export AWS_PROFILE=terraform
% pike make .                 
12:21AM DBG terraform init at /Users/xxx/github/Musica/02_learn-terraform-docker-container
12:21AM DBG modules not found at .
12:21AM DBG aws role create/updated arn:aws:iam::xxx:role/terraform_pike_20230509151755154200000002
12:21AM DBG arn:aws:iam::xxx:role/terraform_pike_20230509151755154200000002

作成したterraform_pike_20230509151755154200000002ポリシーをTerraformの実行用IAMユーザーに適用すれば、最小限のポリシー設定の完成です。

未確認ですが、ポリシー作成にterraformのIAMユーザーを使用しているので、ポリシー作成の際にポリシー作成の権限が必要かもしれません。このときは、AdministratorAccessをつけていました。

おわりに

今日は、Terraformの実行用IAMユーザーのポリシー作成についてご紹介しました。次回は、Terraformを使用してAWSリソースの作成をしたいと思います。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました