簡體   English   中英

AWS 刪除 CloudFormation 堆棧的權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM