1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#27.AWS Systems ManagerのQuick Setup機能ではまった話

Posted at

はじめに

こんにちは、nayaaaaです!
今回は、TerraformでEC2にSSM接続を許可するためのIAMカスタムロールを作成していたところ、AWS Systems ManagerのQuick Setup機能が原因でハマったポイントがあったので記事にまとめました。

事象

今回、TerraformでIAMロールの設定を行いました。
TerraformでIAMロールの設定を行う際に必要な工程は以下の通りになると思います。

  • IAMポリシー作成
  • IAMロールの作成
  • インスタンスプロファイルの作成
  • IAMロール、IAMポリシー、インスタンスプロファイルの紐付け

実際にやってみる

  • IAM設定ファイル
# IAMポリシー
resource "aws_iam_policy" "ec2-ssm-policy" {
  name  = "ec2-ssm-policy"

policy = jsonencode({
  Version = "2012-10-17",
  Statement = [
    {
      Effect = "Allow",
      Action = [
        "ssm:UpdateInstanceInformation",
        "ssm:GetDocument",
        "ssm:DescribeDocument"
      ],
      Resource = "*"
    },
    {
      Effect = "Allow",
      Action = [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      Resource = "*"
    },
    {
      Effect = "Allow",
      Action = [
        "ec2messages:AcknowledgeMessage",
        "ec2messages:DeleteMessage",
        "ec2messages:GetEndpoint",
        "ec2messages:GetMessages",
        "ec2messages:SendReply"
      ],
      Resource = "*"
    }
  ]
})
  tags = {
    tag-key = "ec2-ssm-policy"
  }
}

# IAMロール
resource "aws_iam_role" "ec2-ssm-role" {
  name = "ec2-ssm-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Action = "sts:AssumeRole",
        Effect = "Allow",
        Sid    = "",
        Principal = {
        Service = "ec2.amazonaws.com"
        }
      }
    ]
  })

  tags = {
    tag-key = "ec2-ssm-role"
  }
}

# IAMポリシーのアタッチ
resource "aws_iam_policy_attachment" "ec2-ssm-role-attachment" {
  name       = "ec2-ssm-role-attachment"
  policy_arn = aws_iam_policy.ec2-ssm-policy.arn
  roles      = [aws_iam_role.ec2-ssm-role.name]
}

# インスタンスプロファイル
resource "aws_iam_instance_profile" "ec2-ssm-profile" {
  name = "ec2-ssm-profile"
  role = aws_iam_role.ec2-ssm-role.name
}

実行後、コンソールを確認してみたのですが、画像の通りになぜかカスタムポリシー以外のAmazonSSMManagedInstanceCoreポリシーも付与されておりました。

image - 2025-04-26T224446.986.png

原因を調べてみると、AWS Systems ManagerのQuick Setupという機能が裏で動作しており、それが原因で、AmazonSSMManagedInstanceCoreも設定されていました。本来はこれでも問題なく接続はできるのですが、カスタムポリシーだけを付与したいという目的だとあまり綺麗ではないですし、必要のないポリシーを設定すべきではないと思うので、Quick Setupから設定を消します。

image - 2025-04-25T132114.592.png

削除後、再度Trraformを実行してみます。

image - 2025-04-26T224944.693.png

そうすると、AmazonSSMManagedInstanceCoreは付与されずに、カスタムポリシーのみ付与されています。

※確認のため、再度Quick Setupを手動で設定してみたところ、今回の原因と思われるチェックボックスがあったのでチェックを入れて確認してみました。

image - 2025-04-26T225450.574.png

すると、やはり設定していないポリシーが付与されていました。

image - 2025-04-26T225147.765.png

※念のためチェック無しも試してみたのですが、その際はカスタムポリシーのみの付与だったので、どうやら「インスタンスプロファイルのオプション」のチェックが原因だったようです。

まとめ

AWSを使っていて改めて感じたのは、裏側で設定される処理が意外と多いということです。
特に、IaCを用いて設定を管理する場合には、このように自分の知らない設定が付与されてしまうこともあるので注意が必要だと強く感じました。
今回は普段あまり意識しない機能について学ぶきっかけにもなり、とても良い学びになったと感じています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?