【发布时间】:2019-08-06 17:04:25
【问题描述】:
我正在设置由于不活动而需要终止 AWS 实例(即一段时间以来 Web 服务器访问日志中没有任何新内容)。这些实例是测试实例,由 CI/CD 软件自动创建。
我希望这些实例能够识别自己被遗弃并终止自己。我想为它们中的每一个分配一个通用的 iam-role,它只允许实例终止自身而不是对等实例。
到目前为止,我一直在这里:
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-wheretouse
- https://www.reddit.com/r/aws/comments/4gglxk/iam_policy_to_allow_ec2_instance_to_only_query/
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam_mfa-selfmanage.html
发现策略中有 2 个变量可用:
ec2-instance-id
ec2:SourceInstanceARN
我想出了一些我的角色政策的变体,但它们都不起作用:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "*",
"Condition": {
"ArnEquals": {
"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/${ec2-instance-id}"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "arn:aws:ec2:*:*:instance/${ec2-instance-id}"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "${ec2:SourceInstanceARN}"
}
]
}
是否真的可以实现所需的行为,即只允许实例对其自身执行特定操作(例如终止)?
更新:
我确实知道我可以使用标签,这就是我同时正在做的事情,但这意味着所有带标签的实例都可以终止它们的对等实例。这个限制有点太松了,我真的想把它限制在它的实例上
AWS IAM: Allow EC2 instance to stop itself
IAM policy to allow EC2 instance API access only to modify itself
【问题讨论】:
-
如果终止自身是您唯一关心的问题,请启动实例并将
InstanceInitiatedShutdownBehavior设置为Terminate,然后让机器上的代码以root 身份运行/sbin/poweroff。当 EC2 基础设施看到实例尝试自行关闭时,实例将被终止,就像您发送 API 请求来终止它一样。 -
@Michael-sqlbot 好主意!也可以运行
sudo shutdown now -h
标签: amazon-web-services amazon-ec2 amazon-iam