我想限制用户访问权限,以便用户仅从已标记的亚马逊机器映像(AMI)启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
解决方法
要限制访问权限,以便用户仅从已标记的 AMI 启动 EC2 实例,请执行以下操作之一:
- 从现有实例创建 AMI。
- 使用现有的 AMI,然后向 AMI 添加标签。
然后,创建自定义 AWS Identity and Access Management(AWS IAM)策略。IAM 政策使用标签条件限制用户的权限,使用户只能启动使用已标记 AMI 的实例。
在以下示例 IAM 策略中,使用了这些 Sid(语句 ID)值:
- ReadOnlyAccess 允许用户使用 **Describe\ *** 查看您账户中的 EC2 资源,其中包括以 Describe 开头的所有 EC2 操作。ReadOnlyAccess 还允许用户获取实例的控制台输出和控制台屏幕截图。Amazon CloudWatch 针对 DescribeAlarms 和 GetMetricStatistics 的权限允许在 Amazon EC2 控制台中显示有关实例的运行状况信息。IAM 针对 ListInstanceProfiles 的权限允许在 IAM 角色列表中显示现有的实例配置文件。启动实例时,配置实例详细信息页面上会显示 IAM 角色列表。但是,ListInstanceProfiles API 不允许用户将 IAM 角色附加到实例。
- ActionsRequiredtoRunInstancesInVPC 会向用户授予执行 RunInstances API 的权限。您可以使用 us-east-1 AWS 区域中的任何实例、密钥对、安全组、卷、网络接口或子网。资源级权限指定每种资源的 ARN。
- LaunchingEC2withAMIsAndTags 允许用户使用 AMI 启动实例。在 us-east-1 区域中,AMI 必须具有 Environment 标签,其值设置为 Prod。us-east-1 区域内的任何 AMI 的资源级权限均设置为 ARN。该条件与 EC2:ResourceTag/Environment 标签密钥和 Prod 密钥值的值相匹配。
针对 RunInstances API 操作所需的资源,以下 IAM 策略使用支持的资源级权限。
注意:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadOnlyAccess",
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:GetConsole*",
"cloudwatch:DescribeAlarms",
"cloudwatch:GetMetricStatistics",
"iam:ListInstanceProfiles"
],
"Resource": "*"
},
{
"Sid": "ActionsRequiredtoRunInstancesInVPC",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1:AccountId:instance/*",
"arn:aws:ec2:us-east-1:AccountId:key-pair/*",
"arn:aws:ec2:us-east-1:AccountId:security-group/*",
"arn:aws:ec2:us-east-1:AccountId:volume/*",
"arn:aws:ec2:us-east-1:AccountId:network-interface/*",
"arn:aws:ec2:us-east-1:AccountId:subnet/*"
]
},
{
"Sid": "LaunchingEC2withAMIsAndTags",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1::image/ami-*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Environment": "Prod"
}
}
}
]
}