継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Terraform で IAM Identity Center のCustomer Managed Policies を定義する

タダです.

IAM Identity Center(旧 AWS SSO)で Customer Managed Policies を Terraform で定義して使うようにする機会があったのでこの記事に備忘録でまとめます.

Customer Managed Policies とは

Customer Managed Policies とは SSO のメンバーアカウントで作成した IAM ポリシーを SSO のアクセス許可セットに設定することができる,というものです.つまり,Customer Managed Policies 登場以前は IAM Identity Center の管理 AWS アカウントで事前定義されたアクセス許可セット(ex. AdministratorAccess,PowerUserAccess etc)やカスタムポリシーはインラインポリシーで定義する必要があったのが,メンバーアカウントで作成した IAM ポリシーを使うことができるようになりました.管理上,IAM Identity Center にてアカウントやアクセス許可セットを管理する AWS アカウントとメンバーアカウントは別れていたり,アクセス許可セットの権限調整も煩雑になることもあったと思います.Customer Managed Policies を使えば,(※メンバーアカウントの管理チームが IAM ポリシー制御をちゃんとやる必要はありますが)メンバーアカウントの権限変更がすぐに反映されるので運用上アクセス許可セットの管理が楽になるなと個人的には思います.

aws.amazon.com

Terraform で Customer Managed Policies で扱う

順番としては1,2の順番に設定してきます.

  1. メンバーアカウントで Customer Managed Policies の IAM ポリシーを作る
  2. IAM Identity Center の管理アカウントで Customer Managed Policies を Permission Set に紐付ける

1. メンバーアカウントで Customer Managed Policies の IAM ポリシーを作る

まずは IAM ポリシーを作っていきます.S3 の読み取りと書き込みの権限をセットしたポリシーでこれを適用します.

data "aws_iam_policy_document" "test_customer_managed_policy" {
  statement {
    actions = [
      "s3:List*",
      "s3:Get*",
      "s3:Put*",
    ]
    resources = [
      "arn:aws:s3:::hoge*",
    ]
  }
}
resource "aws_iam_policy" "test_customer_managed_policy" {
  name   = "test-customer-managed-policy"
  policy = data.aws_iam_policy_document.test_customer_managed_policy.json
}

2. IAM Identity Center の管理アカウントで Customer Managed Policies を Permission Set に紐付ける

次に作ったポリシーを紐づけていきます.最低限のコードになりますが,以下の内容で Customer Managed Policies を紐づけます.

resource "aws_ssoadmin_permission_set" "test_permission_set" {
  name             = "hoge"
  instance_arn     = tolist(data.aws_ssoadmin_instances.hoge.arns)[0]
  session_duration = "PT1H"
}
resource "aws_ssoadmin_customer_managed_policy_attachment" "test_customer_managed_policy" {
  instance_arn       = tolist(data.aws_ssoadmin_instances.hoge.arns)[0]
  permission_set_arn = aws_ssoadmin_permission_set.test_permission_set.arn
  customer_managed_policy_reference {
    name = "test-customer-managed-policy(作成した IAM ポリシー名)"
    path = "/"
  }
}
resource "aws_ssoadmin_account_assignment" "test_account_assignment" {
  instance_arn       = tolist(data.aws_ssoadmin_instances.hoge.arns)[0]
  permission_set_arn = aws_ssoadmin_permission_set.test_permission_set.arn
  principal_id       = var.principal_id
  principal_type     = "GROUP"
  target_id          = var.aws_account_id
  target_type        = "AWS_ACCOUNT"
}

以上で作業は完了です.

まとめ

Terraform で IAM Identity Center の Customer Managed Policies を定義する機会があったので備忘録でまとめました.