前回↑SESをterraform化しましたが、SES用のSMTPユーザーをIAMで作成しないといけないので、初IAMをterraform化してみました。結構ドキュメントが相変わらずわかりにくいのでハマりましたが、わしのブログを見て参考にしていただければと思いますぞ✌️
■aws_iam_user/aws_iam_policy/aws_iam_user_policy_attachment
https://www.terraform.io/docs/providers/aws/r/iam_user.html
https://www.terraform.io/docs/providers/aws/d/iam_policy.html
https://www.terraform.io/docs/providers/aws/r/iam_user_policy_attachment.html
・構成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ tree . ├── aws_alb.tf ├── aws_backend.tf ├── aws_cloudfront.tf ├── aws_cloudwatch.tf ├── aws_ec2.tf ├── aws_iam.tf #これな ├── aws_rds.tf ├── aws_region.tf ├── aws_route53.tf ├── aws_s3.tf ├── aws_security-group.tf ├── aws_ses.tf ├── aws_variables.tf ├── aws_vpc.tf ├── files │ └── policy │ └── ses-policy.json #これな ├── terraform.tfvars.sample |
特殊なのはポリシーをAPI経由で渡せないので自力でポリシーをjsonで作成します。(ツライ)
■files/policy/ses-policy.json
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ses:SendEmail*", "ses:SendRawEmail*" ], "Effect": "Allow", "Resource": "*" } ] } |
SESのポリシーを作ります。下記のように同様の権限をつけましょう。
■aws_iam.tf
https://www.terraform.io/docs/configuration/interpolation.html#built-in-functions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
## SES resource "aws_iam_user" "smtp-user" { name = "smtp-user" } ## Policy resource "aws_iam_policy" "ses-policy" { name = "ses-policy" description = "ses policy" policy = "${file("files/policy/ses-policy.json")}" } resource "aws_iam_user_policy_attachment" "ses-attach" { user = "${aws_iam_user.smtp-user.name}" policy_arn = "${aws_iam_policy.ses-policy.arn}" } |
作成したjsonファイルはfile関数を使って指定してあげましょう。
その後にIAMユーザーとポリシーをアタッチするイメージ。
ここでterraform applyするとクレデンシャルどうなるの?と思いますが!!
手動でアクセスキーの作成をしましょう。
■まとめ
IAMは手動で管理すればいいと抵抗ありましたが、理解するとこれはコード化したほうが望ましいと感じました。
0件のコメント