SSM Quick Setup の Patch Manager が削除できなくなったので IAM ロールを復元してみた
はじめに
テクニカルサポートの 片方 です。
SSM の Quick Setup は、Patch Manager を含む各種設定を手軽に展開できて便利ですよね。
本機能を利用する際に内部では CloudFormation StackSets や IAM ロールが利用されており、構成を把握していない場合、意図しない挙動に遭遇することがあります。
今回、検証環境で Quick Setup を使って構成した Patch Manager を削除しようとしたところ、削除処理が失敗し、コンソールからも API からも削除できない状態となる事象を確認しました。
調査したところ、Quick Setup が内部で使用している Patch Policy 用の IAM ロールおよび管理ポリシーを事前に削除していたことが原因でした。
Quick Setup は CloudFormation StackSets を使って構成を管理しているため、作成時だけでなく削除時にも実行ロールと管理ロールが必要になるようです。
本記事では、
- Quick Setup(Patch Manager)が削除できなくなった事象の概要
- 削除に必要な IAM ロール/ポリシーの構成
- 削除できない状態から、IAM ロールを復元して削除できるようになるまでの手順
について、実際に検証した内容をもとに整理していきます。
同じように 「Quick Setup で作った Patch Manager が削除できない」 や 「IAM ロールを整理したら Quick Setup の操作に失敗するようになった」 といった状況で困っている方の参考になれば幸いです。
事象の詳細(エラーメッセージ)
Quick Setup で構成した Patch Manager を削除しようとしたところ、削除処理が失敗しました。
コンソール上では削除処理が失敗した状態となります。また、再試行しても同様に失敗する状態です。
-
後述する AWS-QuickSetup-PatchPolicy-LocalAdministrationRole のみ又は、両方削除されている場合

-
AWS-QuickSetup-PatchPolicy-LocalExecutionRole のみ削除されている場合

Quick Setup の内部構成(IAM ロールの関係)
Quick Setup(Patch Manager)は、内部的には CloudFormation StackSets を利用して構成されています。
削除時の実行フローを簡略化すると、以下のようになります。
Quick Setup
→ CloudFormation StackSet
→ AWS-QuickSetup-PatchPolicy-LocalAdministrationRole
→ sts:AssumeRole
→ AWS-QuickSetup-PatchPolicy-LocalExecutionRole
→ SSM / Patch / CloudFormation リソース操作
なお、それぞれのロールの役割は以下のとおりです。
-
AWS-QuickSetup-PatchPolicy-LocalAdministrationRole
CloudFormation(StackSet)から引き受けられる管理ロール
実行ロール(LocalExecutionRole)を AssumeRole する権限のみを持つ -
AWS-QuickSetup-PatchPolicy-LocalExecutionRole
Patch Manager の構成・削除を実際に行う実行ロール
AWSQuickSetupPatchPolicyDeploymentRolePolicy がアタッチされている
これらの IAM ロールを削除していた環境では、削除処理時に CloudFormation がロールを引き受けられず、削除に失敗することを確認しました。
Quick Setup はロールが削除されていても自動で再作成は行わないため、手動での復元が必要となります。
復元した IAM ロールの具体例
今回は、削除に必要な最小構成として、Patch Policy 用の管理ロール・実行ロールを以下の内容で復元しました。
AWS-QuickSetup-PatchPolicy-LocalAdministrationRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "cloudformation.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
},
"StringLike": {
"aws:SourceArn": "arn:aws:cloudformation:*:123456789012:stackset/AWS-QuickSetup-*"
}
}
}
]
}
インラインポリシー(AssumeExecutionRolePermissions)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::123456789012:role/AWS-QuickSetup-PatchPolicy-LocalExecutionRole"
}
]
}
※ 適宜修正してください。

AWS-QuickSetup-PatchPolicy-LocalExecutionRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/AWS-QuickSetup-PatchPolicy-LocalAdministrationRole"
},
"Action": "sts:AssumeRole"
}
]
}
※ 適宜修正してください。
アタッチする管理ポリシー
- AWS 管理ポリシー
- AWSQuickSetupPatchPolicyDeploymentRolePolicy

この構成で IAM ロールを復元したところ、以下のように Quick Setup の Patch Manager を問題なく削除できることを確認できました。


補足:CloudFormation StackSet のテンプレートについて
Quick Setup では、Patch Policy 用の IAM ロールを CloudFormation StackSet AWS-QuickSetup-PatchPolicy-LocalDeploymentRolesStack を使って作成しています。
今回復元した IAM ロールは、この StackSet で定義されている構成を参考にしています。
ロールの信頼ポリシーや管理ポリシーの定義を確認したい場合は、以下のテンプレートをご確認ください。
AWS-QuickSetup-PatchPolicy-LocalDeploymentRolesStack
{
"Parameters": {
"QSConfigurationType": {
"Type": "String",
"Description": "(Required) QuickSetup Configuration type",
"Default": ""
},
"OptInRegions": {
"Type": "CommaDelimitedList",
"Default": "",
"Description": "Comma-separated list of opt-in regions"
},
"LocalAdministrationRoleName": {
"Type": "String",
"Description": "(Required) Local Administration role name"
},
"LocalExecutionRoleName": {
"Type": "String",
"Description": "(Required) Local Execution role name"
},
"UseAWSManagedPolicy": {
"Type": "String",
"Default": "true",
"AllowedValues": [
"true",
"false"
],
"Description": "(Optional) Whether to use local account policy or AWS managed one"
}
},
"Conditions": {
"ShouldUseAWSManagedPolicy": {
"Fn::Equals": [
{
"Ref": "UseAWSManagedPolicy"
},
"true"
]
},
"IsSSMType": {
"Fn::Equals": [
{
"Ref": "QSConfigurationType"
},
"SSM"
]
}
},
"Resources": {
"LocalAdministrationRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"RoleName": {
"Ref": "LocalAdministrationRoleName"
},
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"cloudformation.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
],
"Condition": {
"StringEquals": {
"aws:SourceAccount": {
"Ref": "AWS::AccountId"
}
},
"StringLike": {
"aws:SourceArn": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":cloudformation:*:",
{
"Ref": "AWS::AccountId"
},
":stackset/AWS-QuickSetup-*"
]
]
}
}
}
}
]
},
"Policies": [
{
"PolicyName": "AssumeExecutionRolePermissions",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":iam::",
{
"Ref": "AWS::AccountId"
},
":role/",
{
"Ref": "LocalExecutionRoleName"
}
]
]
}
}
]
}
}
]
}
},
"LocalExecutionRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"RoleName": {
"Ref": "LocalExecutionRoleName"
},
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": {
"Fn::GetAtt": "LocalAdministrationRole.Arn"
}
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"ManagedPolicyArns": {
"Fn::If": [
"IsSSMType",
{
"Fn::If": [
"ShouldUseAWSManagedPolicy",
[
{
"Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/AWSQuickSetupSSMDeploymentRolePolicy"
},
{
"Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/AWSQuickSetupSSMDeploymentS3BucketRolePolicy"
}
],
[
{
"Fn::Sub": "arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/AWSQuickSetupSSMDeploymentRolePolicy"
},
{
"Fn::Sub": "arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/AWSQuickSetupSSMDeploymentS3BucketRolePolicy"
}
]
]
},
{
"Fn::If": [
"ShouldUseAWSManagedPolicy",
[
{
"Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/AWSQuickSetup${QSConfigurationType}DeploymentRolePolicy"
}
],
[
{
"Fn::Sub": "arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/AWSQuickSetup${QSConfigurationType}DeploymentRolePolicy"
}
]
]
}
]
}
}
}
},
"Outputs": {
"LocalAdministrationRoleARN": {
"Description": "ARN of LocalAdministrationRole",
"Value": {
"Fn::GetAtt": "LocalAdministrationRole.Arn"
}
},
"LocalExecutionRoleARN": {
"Description": "ARN of LocalExecutionRole",
"Value": {
"Fn::GetAtt": "LocalExecutionRole.Arn"
}
}
}
}
まとめ
Quick Setup は便利な反面、内部では CloudFormation StackSets と IAM ロールに依存した構成となっています。
Quick Setup で作成されたリソースを削除する際は、関連する IAM ロールやポリシーを削除しないように注意が必要です。
本ブログが誰かの参考になれば幸いです。
スタックを起動した後、CloudFormation コンソール、API、AWS CLI を使用して、スタック内のリソースを更新します。スタックのリソースを CloudFormation 以外の方法で変更しないでください。変更するとスタックのテンプレートとスタックリソースの現在の状態の間で不一致が起こり、スタックの更新または削除でエラーが発生する場合があります。これをドリフトと呼びます。CloudFormation テンプレート外でリソースが変更され、その後にスタックを更新すると、リソースに直接行われた変更は破棄され、リソース設定はテンプレートの設定に戻ります。
参考資料
- Quick Setup パッチポリシーを使用して組織内のインスタンスのためにパッチ適用を設定する - AWS Systems Manager
- AWSQuickSetupPatchPolicyDeploymentRolePolicy - AWS 管理ポリシー
- CloudFormation ベストプラクティス - AWS CloudFormation
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






