🌟
【Terraform】IAMポリシー、IAMグループ、IAMユーザを作成
はじめに
TerraformでIAMポリシーとIAMグループ、IAMユーザを作成していきます。
ファイル構成
.
├── cert
│ └── master.public.gpg
├── iam_group.tf
├── iam_policy.tf
├── iam_user.tf
├── main.tf
└── terraform.tfvars
IAMポリシーの作成
以下の3つのポリシーを作成します。
- ビリングを全て拒否 :
aws-portal:*
- EC2の再起動を許可 :
ec2:RebootInstances
- パスワード変更を許可 :
iam:ChangePassword
iam_policy.tf
# ---------------------------------------------
# IAM Policy
# ---------------------------------------------
resource "aws_iam_policy" "billing_deny" {
name = "${var.project}-${var.environment}-billing-deny-iam-policy"
description = "Blling deny policy"
policy = data.aws_iam_policy_document.billing_deny.json
}
data "aws_iam_policy_document" "billing_deny" {
statement {
effect = "Deny"
actions = ["aws-portal:*"]
resources = ["*"]
}
}
resource "aws_iam_policy" "ec2_rebootable" {
name = "${var.project}-${var.environment}-ec2-rebootable-iam-policy"
description = "EC2 rebootable policy"
policy = data.aws_iam_policy_document.ec2_rebootable.json
}
data "aws_iam_policy_document" "ec2_rebootable" {
statement {
effect = "Allow"
actions = [
"ec2:RebootInstances"
]
resources = ["*"]
}
}
resource "aws_iam_policy" "iam_change_own_password" {
name = "${var.project}-${var.environment}-iam-change_own_password-iam-policy"
description = "IAM Change own password policy"
policy = data.aws_iam_policy_document.iam_change_own_password.json
}
data "aws_iam_policy_document" "iam_change_own_password" {
statement {
effect = "Allow"
actions = [
"iam:ChangePassword"
]
#自分自身のパスワードを変更する
resources = ["arn:aws:iam::*:user/$${aws:username}"]
}
}
IAMグループの作成
- 全リソース読み取り許可 : AWS管理ポリシー
ReadOnlyAccess
- ビリングの拒否 : 上記で作成したポリシー
- EC2再起動の許可 : 上記で作成したポリシー
- パスワード変更の許可 : 上記で作成したポリシー
iam_group.tf
# ---------------------------------------------
# IAM Group
# ---------------------------------------------
resource "aws_iam_group" "developers" {
name = "developers"
}
resource "aws_iam_group_policy_attachment" "developers_readonly_policy" {
group = aws_iam_group.developers.name
policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
resource "aws_iam_group_policy_attachment" "developers_billing_deny" {
group = aws_iam_group.developers.name
policy_arn = aws_iam_policy.billing_deny.arn
}
resource "aws_iam_group_policy_attachment" "developers_ec2_rebootable" {
group = aws_iam_group.developers.name
policy_arn = aws_iam_policy.ec2_rebootable.arn
}
resource "aws_iam_group_policy_attachment" "developers_iam_change_own_password" {
group = aws_iam_group.developers.name
policy_arn = aws_iam_policy.iam_change_own_password.arn
}
GPGを使った暗号/復号
- masterキーペアを作成
- RSA 2048bit
- パスワードなし
- 任意文字を暗号化
- 暗号化されたデータを復号
GPGのインストール
$ brew install gpg
鍵の作成
$ gpg --gen-key
鍵の確認
$ gpg --list-keys
ここで出てくるuid
を次で使用。
秘密鍵をエクスポート
$ gpg -o master.public.pgp --export 上記のuid
certに移動させておく。
IAMユーザーの作成
main.tf
variable "user_name" {
type = string
}
terraform.tfvars
user_name = "testname"
iam_user.tf
# ---------------------------------------------
# IAM User
# ---------------------------------------------
resource "aws_iam_user" "user" {
name = var.user_name
force_destroy = true
}
resource "aws_iam_user_group_membership" "developers" {
user = aws_iam_user.user.name
groups = [ aws_iam_group.developers.name ]
}
resource "aws_iam_user_login_profile" "login_profile" {
user = aws_iam_user.user.name
pgp_key = filebase64("先ほど作ったmasterキーのパス")
password_length = 20
password_reset_required = true
}
output "password" {
value = aws_iam_user_login_profile.login_profile.encrypted_password
}
- apply後にoutputsで暗号化されたパスワードが表示される
- password.txtなどに保存しておく
- 以下のコマンドでデクリプト
$ cat password.txt | base64 -d | gpg -r master --decrypt
- 表示されたパスワードを保存しておく
Discussion