[英]AWS Permissions to delete a CloudFormation stack
我有一個 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}
總之:要使您的調用刪除堆棧調用工作,您需要修改堆棧中所有資源(ASG、EC2、IAM + Cloudformation)的策略,在您的情況下是您的 ec2 實例角色。
錯誤解釋:
只是要刪除堆棧,您需要以下權限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudformation:DeleteStack",
"Resource": "arn:aws:cloudformation:eu-central-1:1234567890:stack/case-test3-stack/53a723c0-f413-11ea-8958"
}
]
}
我有一個 CloudFormation 堆棧,其中包括 EC2 實例、IAM 角色和一個自動縮放組。
因此,所有內容都在一個堆棧中,當您嘗試刪除堆棧時,Cloudformation 從上到下按順序執行,除非有一些依賴子句添加到堆棧中所有內容的定義中以進行刪除。
您不能使用delete-stack有選擇地刪除資源
加上調用刪除的實例只有 cloudformation 堆棧的刪除權限,但您的 cloudformation 堆棧也有 ASG 和其他資源。所以它失敗了。
就像我創建了這個堆棧
$ cat minimal-cfn.yml
Resources:
Bucket:
Type: 'AWS::S3::Bucket'
BucketName:
Type: AWS::SSM::Parameter
Properties:
Description: !Sub 'S3 Bucket from stack ${AWS::StackName}'
Name: '/s3bucket/main/bucket-name'
Type: String
Value: !Ref Bucket
而且我的角色只有上面策略中提到的刪除堆棧的權限,現在我嘗試刪除堆棧並收到錯誤
$ aws cloudformation delete-stack --stack-name adsadasdasdas
User: arn:aws:sts::1234567890:assumed-role/testrole1/s3-access-example is
not authorized to perform: ssm:DeleteParameter on resource: arn:aws:ssm:eu-central-1:1234567890:parameter/s3bucket/main/bucket-name
(Service: AmazonSSM; Status Code: 400; Error Code: AccessDeniedException; Request ID: 785ba9ad-e1b4-4d4b-aef4-5bea51481a87; Proxy: null)
因為角色沒有刪除棧內資源的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.