如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?
Posted
技术标签:
【中文标题】如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?【英文标题】:How do I create an IAM policy to control access to Amazon EC2 resources based on the subnet name tag? 【发布时间】:2017-11-10 01:05:29 【问题描述】:我需要限制特定用户角色在任何 VPC 的公有子网中执行任何 EC2 实例操作。有没有办法通过利用子网标签来实现这一点?我知道如何使用 EC2 资源标签来控制对 EC2 资源的访问,如下面的代码 sn-p 所示,但在我的情况下,我需要基于 vpc 或子网标签。有没有类似 vpc:ResourceTag 条件的东西我可以利用?
"Effect" : "Allow",
"Action" : "ec2:*",
"Resource" : "*",
"Condition" :
"StringEquals" :
"ec2:ResourceTag/UserName" : "$aws:username"
【问题讨论】:
【参考方案1】:我不确定您所说的“子网标签”是什么意思,但您似乎无法使用 IAM 来根据子网类型(即公共与私有)进行限制。这是有道理的,因为您可以通过添加或删除路由轻松更改子网类型。
如果您需要阻止某些用户对某些 EC2 实例执行操作,请在 EC2 实例上使用标签,并根据标签使用允许或拒绝规则。来自blog 宣布这一点:
"Version": "2012-10-17",
"Statement": [
"Action": [
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances",
"ec2:TerminateInstances"
],
"Condition":
"StringEquals":
"ec2:ResourceTag/critical":"true"
,
"Resource": [
"arn:aws:ec2:your_region:your_account_ID:instance/*"
],
"Effect": "Deny"
]
为了更安全一点,请确保拒绝编辑或删除标签!
【讨论】:
我需要限制某些用户组在公有子网中创建 EC2 实例。目前,所有子网都有一个名称标签,用于指示子网是公有还是私有,如下所示:subnet-CIDR-REGION-Type (ex. 10.0.4.0-ap-southeast-2-Public) 您可以将 StringEquals 替换为 StringLike,将“critical”更改为您的标签名称,并使用以 public 结尾的值。如果您命名标签子网-CIDR-Region-type,而不是值,那么这将不起作用。【参考方案2】:@Chris 感谢您为我提供的提示:我使用了以下语句,但无法在我标记的公共子网中启动实例
"Version": "2012-10-17",
"Statement": [
"Condition":
"StringLike":
"ec2:ResourceTag/Name": "*public*"
,
"Action": [
"ec2:Run*",
"ec2:Terminate*",
"ec2:Cancel*",
"ec2:Create*",
"ec2:Delete*",
"ec2:Modify*",
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "arn:aws:ec2:ap-southeast-2:106625493890:subnet/*",
"Effect": "Deny",
"Sid": "DenyInstanceActionsForPublicSubnets"
,
【讨论】:
以上是关于如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?的主要内容,如果未能解决你的问题,请参考以下文章
AWS IAM-如何禁止用户通过控制台进行更改,但允许通过CLI更改API