【发布时间】:2021-01-19 02:10:37
【问题描述】:
我有一个 CloudFormation 堆栈,其中包括 EC2 实例、IAM 角色和一个自动缩放组。这是在目标 ALB 中执行负载测试的瞬态堆栈。一旦测试完成(时间有限),就会发送结果,并且应该删除此堆栈。
现在我使用我的凭据从我的计算机创建堆栈,尽管我的最终目的是在 CodePipeline 步骤中自动执行此操作。
我试图让堆栈使用 CLI 调用他自己的删除:
aws cloudformation delete-stack --stack-name ${AWS::StackName} --region ${AWS::Region}
运行此命令的 EC2 实例(此堆栈的一部分)具有此角色:
WorkerNodeRole:
Type: AWS::IAM::Role
Properties:
RoleName: LoadTestNodeRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
- cloudformation.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: LoadTestNodeRolePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Resource: '*'
Action: iam:PassRole
- Effect: Allow
Resource: !Sub arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AWS::StackName}/*
Action:
- cloudformation:DeleteStack
我希望这足以删除堆栈,但它抱怨删除堆栈中单个元素的权限。例如:
API: autoscaling:DescribeAutoScalingGroup User: arn:aws:sts::(account):assumed-role/LoadtestNodeRole/(instance) is not authorized to perform: autoscaling:DescribeAutoScalingGroups
如何授予角色权限以在特定堆栈上执行 cloudformation:DeleteStack 以删除包含的所有内容?
例如,由于上述原因,此堆栈无法自行删除:
Description: Autodelete test
Resources:
WorkerNodeRole:
Type: AWS::IAM::Role
Properties:
RoleName: NodeRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
- cloudformation.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: NodeRolePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Resource: '*'
Action: iam:PassRole
- Effect: Allow
Resource: !Sub arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AWS::StackName}/*
Action:
- cloudformation:DeleteStack
WorkerNodeInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- !Ref WorkerNodeRole
MasterNode:
Type: AWS::EC2::Instance
Properties:
IamInstanceProfile: !Ref WorkerNodeInstanceProfile
ImageId: ami-0be2609ba883822ec
InstanceType: t2.small
UserData:
Fn::Base64:
!Sub
|
#!/bin/bash
aws cloudformation delete-stack --stack-name ${AWS::StackName} --region ${AWS::Region}
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam