AWS CloudFormation スタックを作成、更新、または削除する際に生じる「ロール [role_arn] が無効であるか、または引き受けることができません」というエラーを解決したいと考えています。
簡単な説明
このエラーは、AWS CloudFormation がお客様のためにスタック内のリソースを呼び出すために使用される AWS Identity and Access Management (IAM) サービスロールに問題がある場合に表示されます。
このエラーは、以下の事項を実行しようとする場合に発生することがあります。
- AWS コマンドラインインターフェイス (AWS CLI) または API 呼び出しを使用してスタックを作成します。
- AWS CloudFormation が変更セットを作成するときにスタックを更新します。
- スタックを削除します。
- IAM ロールを更新または削除します。更新された IAM ロールの信頼ポリシーを変更した場合、AWS CloudFormation はそのロールを引き受けることができません。
このエラーを解決するには、AWS CloudFormation によって使用される IAM サービス ロールが存在するかどうかを確認します。次に
- IAM ロールが存在しない場合は、同じ名前で新しい IAM ロールを作成します。
- IAM ロールが存在する場合は、ロールの信頼ポリシーにより、AWS CloudFormation が IAM ロールを引き受けることが許可されていることを確認します。
または、現在の IAM ロールをオーバーライドして、現在のスタック操作に使用されているサービス ロールをオーバーライドできます。--role-arnパラメータ。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
解決方法
IAM ロールが存在することを確認する
1. IAM コンソールを開きます。
2. ナビゲーションペインで [Roles] を選択します。
3. [Role name] (ロール名) 列で、受信したエラーメッセージに記載されている IAM ロールを選択します。
4. 役割が存在する場合は、ロール信頼ポリシーにより、AWS CloudFormation が IAM ロールを引き受けることが許可されていることを確認しますセクション
- または -
の手順を完了します。AWS CloudFormation で使用されている現在の IAM ロールをオーバーライドする。
役割が存在しない場合は、新しい IAM ロールを作成し、必要なアクセス許可があることを確認します。
新しい IAM ロールを作成し、必要な権限があることを確認します
1. 新しい IAM ロールを作成するエラーで言及されているロールと同じ名前
2. 新しい IAM ロールに、AWS CloudFormation がスタック内のリソースに対して作成、更新、または削除オペレーションを実行するために必要なアクセス許可があることを確認します。
3. ロールが作成されたら、スタックを再度作成、更新、または削除できます。
注: 新しいロールに必要な IAM アクセス許可がない場合、スタックオペレーションが失敗する可能性があります。たとえば、IAM ロールに ec2:TerminateInstances アクションのアクセス許可がない Amazon Elastic Compute Cloud (Amazon EC2) インスタンスリソースを削除しようとすると、削除オペレーションは失敗します。
ロールの信頼ポリシーによって AWS CloudFormation が IAM ロールを引き受けることを許可されていることを確認する
1. IAM コンソールを開きます。
2. ナビゲーションペインで [Roles] を選択します。
3. [Role name] (ロール名) 列で、受信したエラーメッセージに記載されている IAM ロールを選択します。
4. [Trust relationships] タブを選択します。
5. 信頼関係に cloudformation.amazonaws.com が信頼できるエンティティとして表示されていることを確認します。
cloudformation.amazonaws.com が信頼できるエンティティとしてリストされていない場合は、[Edit trust relationship] (信頼関係の編集) を選択します。
6. ポリシードキュメントエディタで、以下の AWS CloudFormation サービスロールの信頼ポリシーを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "cloudformation.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
7. [Update Trust Policy] (信頼ポリシーの更新) を選択します。
更新された信頼ポリシーにより、AWS CloudFormation が IAM ロールを引き受けることができるようになりました。
8. ロールが作成されたら、スタックを再度作成、更新、または削除できます。
AWS CloudFormation で使用される現在の IAM ロールを上書きする
1. スタックを更新するには、次のコマンドを実行します。
aws cloudformation update-stack --stack-name my-stack --template-body file://my-stack-template.json --role-arn arn:aws:iam::123456789123:role/cloudformation-role
注: my-stack、my-stack-template.json、123456789123 をお客様の値に置き換えてください。
2. スタックを削除するには、次のコマンドを実行します。
aws cloudformation delete-stack --stack-name my-stack --role-arn arn:aws:iam::123456789123:role/cloudformation-role
注: my-stack と 123456789123 をお客様の値に置き換えてください。
関連情報
AWS CloudFormation サービスロール
AWS のサービスにアクセス許可を委任するロールの作成