【问题标题】:JSON Policy Shut Down Multiple EC2 Instances?JSON 策略关闭多个 EC2 实例?
【发布时间】:2021-03-04 05:50:12
【问题描述】:

我正在修改 IAM 策略中的 json 以关闭多个 EC2 实例。我可以使用以下 json 关闭一个 EC2 实例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:us-west-1:11111111111:instance/i-00000000000000"
        }
    ]
}

我无法弄清楚如何关闭多个实例。我想我可以输入多个实例 ID,但 AWS json 策略似乎不允许我做任何事情。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-iam aws-policies


    【解决方案1】:

    在这里使用基于标签的IAM policies 是一个不错的选择,而不是手动添加实例ID。

    此文档中还有一些其他选项:Controlling access during AWS requests

    {
        "Version": "2012-10-17",
        "Statement": {
            "Effect": "Allow",
            "Action": ["ec2:StartInstances","ec2:StopInstances"]
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": [
                        "preprod",
                        "production"
                    ]
                },
                "ForAllValues:StringEquals": {"aws:TagKeys": "environment"}
            }
        }
    }
    

    【讨论】:

    • 所以这意味着我必须更改我的 lambda 然后正确吗?我有一个触发我的 lambda 的 CloudWatch 警报。像这样: const AWS = require('aws-sdk'); exports.handler = (event, context, callback) => { const ec2 = new AWS.EC2({ region: event.instanceRegion }); ec2.stopInstances({ InstanceIds: [event.instanceId] }).promise() .then(() => callback(null, Successfully stopped ${event.instanceId})) .catch(err => callback(err)); };
    • @maisonfinder 基于标签过滤实例并允许通过策略对其进行操作是两件不同的事情。因此,您的 lambda 角色必须具有上述策略(或基于标签有点类似),并且如果您获得的事件具有实例 ID,那么您只需使用事件中的实例 ID 调用 stop api。我认为不需要修改 lambda。
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多