メンテナンスウィンドウ実行時エラー 「Unable to assume the provided role.」or「The specified service role is invalid.」を回避するには

2023.07.25

困っていること

パッチ自動化のため AWS Systems Manager の一機能であるメンテナンスウィンドウを利用して、Run Command のコマンド実行を実施したいと考えています。
メンテナンスウィンドウから起動させようとしたのですが、タスク呼び出しで「Unable to assume the provided role.」 or 「The specified service role is invalid.」のエラーで想定される挙動となりません。
回避方法を教えてください。

どう対応すればいいの?

前提として、メンテナンスウィンドウの Run Command タスクにアタッチしている IAM サービスロールに、実行に必要な IAM ポリシーが付与されている場合、
ポリシーの信頼関係が不足していることが原因として考えられます。

例)

  • Run Command タスクに使用する IAM サービスロールでは EC2 の権限のみ記載
  • SNS 通知に使用する IAM ロール(オプション)では SNS の権限のみの記載

回避方法

アクセス許可を委任するロールの権限が不足していたことが原因であると考えられます。 対象となるポリシーの信頼関係について、以下の権限などを適宜追加して事象が解消されるかお試しください。

例)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com",
                    "ec2.amazonaws.com",
                    "sns.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

参考資料