用于控制访问 Amazon EC2 API 的示例策略
您可以使用 IAM 策略向用户授予使用 Amazon EC2 所需的权限。有关分步说明,请参阅《IAM 用户指南》中的创建 IAM 策略。
以下示例显示了您可用于向用户授予使用 Amazon EC2 的权限的策略语句。这些策略设计用于采用 AWS CLI 或 AWS SDK 发出的请求。在以下示例中,将每个 user input placeholder
替换为您自己的信息。
有关用于 Amazon EC2 控制台的策略示例,请参阅 用于控制对 Amazon EC2 控制台的访问的示例策略。
示例:只读访问权限
以下策略为用户授予使用名称以 Describe
开头的所有 Amazon EC2 API 操作的权限。Resource
元素使用通配符表示用户可以通过这些 API 操作指定所有资源。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。有关哪些 ARN 可用于哪些 Amazon EC2 API 操作的更多信息,请参阅 Amazon EC2 的操作、资源和条件键。
用户无权对资源执行任何操作 (除非其他语句为用户授予执行此操作的权限),因为在默认情况下会对用户拒绝使用 API 操作的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
}
]
}
示例:限制对特定区域的访问权限
以下策略拒绝用户使用所有 Amazon EC2 API 操作的权限,除非区域为欧洲(法兰克福)。该区域使用全局条件键 aws:RequestedRegion
,所有 Amazon EC2 API 操作均支持此条件键。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": "eu-central-1"
}
}
}
]
}
或者,您也可以使用条件键 ec2:Region
,此条件键是 Amazon EC2 特定的,所有 Amazon EC2 API 操作均支持它。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"ec2:Region": "eu-central-1"
}
}
}
]
}
使用实例
示例:描述、启动、停止和终止所有实例
以下策略为用户授予使用 Action
元素中指定的 API 操作的权限。Resource
元素使用 * 通配符表示用户可以通过这些 API 操作指定所有资源。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。有关哪些 ARN 可用于哪些 Amazon EC2 API 操作的更多信息,请参阅 Amazon EC2 的操作、资源和条件键。
用户无权使用任何其他 API 操作 (除非其他语句允许用户执行此操作),因为用户在默认情况下没有使用 API 操作的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeImages",
"ec2:DescribeKeyPairs",
"ec2:DescribeSecurityGroups",
"ec2:DescribeAvailabilityZones",
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": "*"
}
]
}
示例:描述所有实例,以及仅停止、启动和终止特定实例
以下策略允许用户描述所有实例,但只能启动和停止实例 i-1234567890abcdef0 和 i-0598c7d356eba48d7,且只能终止在 美国东部(弗吉尼亚北部)地区 (us-east-1
) 中具有“purpose=test
”资源标签的实例。
第一条语句为 Resource
元素使用 * 通配符以指示用户可以在操作中指定所有资源;在本例中,用户可以列出所有实例。在 API 操作不支持资源级权限的情况下 (在此情况下,为 ec2:DescribeInstances
),也需要 * 通配符。有关哪些 ARN 可用于哪些 Amazon EC2 API 操作的更多信息,请参阅 Amazon EC2 的操作、资源和条件键。
第二条语句为 StopInstances
和 StartInstances
操作使用资源级权限。特定实例在 Resource
元素中通过其 ARN 进行指示。
第三条语句允许用户终止在美国东部(弗吉尼亚北部)区域(us-east-1
)中属于指定 AWS 账户的所有实例(但仅在实例具有 "purpose=test"
标签的情况下)。当策略语句生效时,Condition
元素具备资格。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1:account-id
:instance/",
"arn:aws:ec2:us-east-1:account-id
:instance/"
]
},
{
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "arn:aws:ec2:us-east-1:account-id
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/purpose": "test"
}
}
}
]
}
启动实例 (RunInstances)
RunInstances API 操作可启动一个或多个按需实例或一个或多个 Spot 实例。RunInstances
需要 AMI 并创建实例。用户可以在请求中指定键对和安全组。启动到 VPC 中需要子网,会创建网络接口。从 Amazon EBS-backed AMI 启动将创建卷。因此,用户必须具有使用这些 Amazon EC2 资源的权限。您可以创建要求用户对 RunInstances
指定可选参数或限制用户针对某个参数使用特定值的策略语句。
有关启动实例所需的资源级权限的更多信息,请参阅 Amazon EC2 的操作、资源和条件键。
默认情况下,用户没有描述、启动、停止或终止生成的实例的权限。授予用户管理所生成实例的权限的一种方法是:为每个实例创建一个特定标签,然后创建一个允许用户使用该标签管理实例的语句。有关更多信息,请参阅 使用实例。
AMI
以下策略仅允许用户使用指定的 AMI、ami-9e1670f7
和 ami-45cf5c3c
启动实例。用户无法使用其他 AMI 启动实例(除非其他语句允许用户执行此操作)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
::image/ami-9e1670f7",
"arn:aws:ec2:region
::image/ami-45cf5c3c",
"arn:aws:ec2:region
:account-id
:instance/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*"
]
}
]
}
另外,以下策略允许用户从 Amazon 或某些受信任和经过验证的合作伙伴拥有的所有 AMI 启动实例。第一个语句的 Condition
元素测试 ec2:Owner
是不是 amazon
。用户无法使用其他 AMI 启动实例(除非其他语句允许用户执行此操作)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
::image/ami-*"
],
"Condition": {
"StringEquals": {
"ec2:Owner": "amazon"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
:account-id
:instance/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*"
]
}
]
}
实例类型
以下策略仅允许用户使用 t2.micro
或 t2.small
实例类型启动实例,您也可以通过此操作控制成本。用户无法启动更大的实例,因为第一条语句的 Condition
元素会测试 ec2:InstanceType
是否是 t2.micro
或 t2.small
。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
:account-id
:instance/*"
],
"Condition": {
"StringEquals": {
"ec2:InstanceType": ["t2.micro", "t2.small"]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
::image/ami-*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*"
]
}
]
}
或者,您也可以创建一个策略,以拒绝用户启动 t2.micro
和 t2.small
实例类型之外的任何实例的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
:account-id
:instance/*"
],
"Condition": {
"StringNotEquals": {
"ec2:InstanceType": ["t2.micro", "t2.small"]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
::image/ami-*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:instance/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*"
]
}
]
}
子网
以下策略仅允许用户使用指定子网 subnet-12345678
启动实例。组无法将实例启动到任何其他子网中 (除非其他语句授予执行此操作的用户权限)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
:account-id
:subnet/subnet-12345678
",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:instance/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
::image/ami-*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*"
]
}
]
}
或者,您也可以创建一个策略,以拒绝用户将实例启动到任何其他子网的权限。该语句通过拒绝创建网络接口的权限来执行此操作,除非指定了子网 subnet-12345678
。此拒绝会覆盖创建的任何其他策略以允许将实例启动到其他子网中。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
:account-id
:network-interface/*"
],
"Condition": {
"ArnNotEquals": {
"ec2:Subnet": "arn:aws:ec2:region
:account-id
:subnet/subnet-12345678
"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:region
::image/ami-*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:instance/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:key-pair/*",
"arn:aws:ec2:region
:account-id
:security-group/*"
]
}
]
}
EBS 卷
仅当实例的 EBS 卷为加密卷时,下面的策略才允许用户启动实例。用户必须从使用加密快照创建的 AMI 启动实例,以确保根卷是加密的。此外,用户在启动期间附加到此实例的任何其他卷也必须是加密的。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"Bool": {
"ec2:Encrypted": "true"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*::image/ami-*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:subnet/*",
"arn:aws:ec2:*:*:key-pair/*",
"arn:aws:ec2:*:*:security-group/*"
]
}
]
}
在创建时标记实例
下面的策略允许用户启动实例并在创建期间标记实例。对于应用标签的资源创建操作,用户必须具有使用 CreateTags
操作的权限。第二个语句使用 ec2:CreateAction
条件键使用户只能在 RunInstances
上下文中且只能为实例创建标签。用户无法标记现有资源,并且用户无法使用 RunInstances
请求标记卷。
有关更多信息,请参阅 在创建过程中授予标记 Amazon EC2 资源的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:us-east-1:account-id
:instance/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
在创建时使用特定标签标记实例和卷
下面的策略包含 aws:RequestTag
条件键,该条件键要求用户标记使用标签 RunInstances
和 environment=production
通过 purpose=webserver
创建的任何卷。如果用户不传递这些特定标签,或者根本不指定任何标签,则请求失败。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:region
::image/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:security-group/*",
"arn:aws:ec2:region
:account-id
:key-pair/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:instance/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production" ,
"aws:RequestTag/purpose": "webserver"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:*/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
在创建时使用至少一个特定标记标记实例和卷
下面的策略对 ForAnyValue
条件使用了 aws:TagKeys
修饰符,以指示必须在请求中指定至少一个标签,并且其必须包含键 environment
或 webserver
。标签必须应用于实例及卷。可以在请求中指定任何标签值。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:region
::image/*",
"arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*",
"arn:aws:ec2:region
:account-id
:security-group/*",
"arn:aws:ec2:region
:account-id
:key-pair/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:region
:account-id
:volume/*",
"arn:aws:ec2:region
:account-id
:instance/*"
],
"Condition": {
"ForAnyValue:StringEquals": {
"aws:TagKeys": ["environment","webserver"]
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:*/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
如果在创建时标记实例,则必须使用特定标签标记它们
在下面的策略中,用户不必在请求中指定标签,但如果用户指定标签,则标签必须为 purpose=test
。不允许使用任何其他标签。用户可以在 RunInstances
请求中向任何可标记资源应用标签。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/purpose": "test",
"ec2:CreateAction" : "RunInstances"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": "purpose"
}
}
}
]
}
禁止任何人在创建时为 RunInstances 调用标签
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
仅允许为 spot-instances-request 使用特定标签。第二个意外的不一致之处在这里发挥了作用。在正常情况下,不指定标签将导致 Unauthenticated 错误。对于 spot-instances-request,如果没有 spot-instances-request 标签,则不会评估此策略,因此无标签的 Spot on Run 请求将成功。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
]
},
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
}
]
}
在以下示例中,用户可以启动实例,但前提是他们使用特定的启动模板 (lt-09477bcd97b0d310e
)。ec2:IsLaunchTemplateResource
条件键禁止用户覆盖在启动模板中指定的任何资源。语句的第二部分允许用户在创建时标记实例 — 如果在启动模板中为实例指定了标签,则该语句部分是必需的。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/lt-09477bcd97b0d310e"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:instance/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
}
]
}
Elastic GPUs
在以下策略中,用户可以启动实例并指定要附加到实例的 Elastic GPU。用户可以在任何区域中启动实例,但他们只能在 us-east-2
区域中启动期间附加 Elastic GPU。
ec2:ElasticGpuType
条件键确保实例使用 eg1.medium
或 eg1.large
弹性 GPU 类型。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:*:account-id
:elastic-gpu/*"
],
"Condition": {
"StringEquals": {
"ec2:Region": "us-east-2",
"ec2:ElasticGpuType": [
"eg1.medium",
"eg1.large"
]
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:*::image/ami-*",
"arn:aws:ec2:*:account-id
:network-interface/*",
"arn:aws:ec2:*:account-id
:instance/*",
"arn:aws:ec2:*:account-id
:subnet/*",
"arn:aws:ec2:*:account-id
:volume/*",
"arn:aws:ec2:*:account-id
:key-pair/*",
"arn:aws:ec2:*:account-id
:security-group/*"
]
}
]
}
启动模板
在以下示例中,用户可以启动实例,但前提是他们使用特定的启动模板 (lt-09477bcd97b0d310e
)。用户可以在 RunInstances
操作中指定参数以覆盖启动模板中的任何参数。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/lt-09477bcd97b0d310e"
}
}
}
]
}
在该示例中,只有在用户使用启动模板时,他们才能启动实例。该策略使用 ec2:IsLaunchTemplateResource
条件键防止用户覆盖启动模板中任何预先存在的 ARN。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
}
]
}
以下示例策略允许用户启动实例,但前提是他们使用启动模板。用户无法覆盖请求中的子网和网络接口参数;只能在启动模板中指定这些参数。语句的第一部分使用 NotResource 元素允许子网和网络接口以外的所有其他资源。语句的第二部分允许子网和网络接口资源,但前提是它们来自于启动模板。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"NotResource": ["arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*" ],
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": ["arn:aws:ec2:region
:account-id
:subnet/*",
"arn:aws:ec2:region
:account-id
:network-interface/*" ],
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
}
]
}
以下示例允许用户启动实例,但前提是他们使用启动模板,并且启动模板具有标签 Purpose=Webservers
。用户无法覆盖 RunInstances
操作中的任何启动模板参数。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"NotResource": "arn:aws:ec2:region
:account-id
:launch-template/*",
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*"
},
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:region
:account-id
:launch-template/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Purpose": "Webservers"
}
}
}
]
}
使用竞价型实例
您可以使用 RunInstances 操作创建竞价型实例请求,并在创建时标记竞价型实例请求。要为 RunInstances 指定的资源为 spot-instances-request
。
在 IAM policy 中评估 spot-instances-request
资源,如下所示:
因此,对于 spot-instances-request
资源,以下规则适用于 IAM policy:
-
如果您使用 RunInstances 创建竞价型实例请求,并且您不打算在创建时标记竞价型实例请求,则无需明确允许 spot-instances-request
资源;调用将成功。
-
如果您使用 RunInstances 创建竞价型实例请求并打算在创建时标记竞价型实例请求,则必须在 RunInstances 允许语句中包含 spot-instances-request
资源,否则调用将失败。
-
如果您使用 RunInstances 创建竞价型实例请求并打算在创建时标记竞价型实例请求,则必须在 CreateTags 允许语句中指定 spot-instances-request
资源或 *
通配符,否则调用将失败。
您可以使用 RunInstances 或 RequestSpotInstances 请求竞价型实例。以下示例 IAM policy 仅在使用 RunInstances 请求竞价型实例时适用。
示例:使用 RunInstances 请求竞价型实例
以下策略允许用户使用 RunInstances 操作请求竞价型实例。由 RunInstances 创建的 spot-instances-request
资源将请求 Spot 实例。
要使用 RunInstances 创建竞价型实例请求,您可以从 spot-instances-request
列表中省略 Resource
(如果您不打算在创建时标记竞价型实例请求)。这是因为,如果在创建时未标记竞价型实例请求,则 Amazon EC2 不会在 RunInstances 语句中评估 spot-instances-request
资源。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
}
]
}
不支持 – 示例:拒绝用户使用 RunInstances 请求竞价型实例的权限
spot-instances-request
资源不支持以下策略。
以下策略旨在向用户授予启动按需型实例的权限,但拒绝用户请求竞价型实例的权限。由 RunInstances 创建的 spot-instances-request
资源是请求 Spot 实例的资源。第二个语句旨在拒绝针对 spot-instances-request
资源的 RunInstances 操作。但不支持此条件,这是因为,如果在创建时未标记竞价型实例请求,则 Amazon EC2 不会在 RunInstances 语句中评估 spot-instances-request
资源。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "DenySpotInstancesRequests - NOT SUPPORTED - DO NOT USE!",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
}
]
}
示例:在创建时标记竞价型实例请求
以下策略允许用户标记在实例启动期间创建的所有资源。第一个语句允许 RunInstances 创建列出的资源。由 RunInstances 创建的 spot-instances-request
资源是请求 Spot 实例的资源。第二个语句提供了一个 *
通配符,以允许在实例启动时创建所有资源时对其进行标记。
如果您在创建时标记竞价型实例请求,则 Amazon EC2 会在 RunInstances 语句中评估 spot-instances-request
资源。因此,您必须明确允许 RunInstances 操作的 spot-instances-request
资源,否则调用将失败。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
示例:拒绝在创建时标记竞价型实例请求
以下策略拒绝用户标记在实例启动期间创建的资源的权限。
第一个语句允许 RunInstances 创建列出的资源。由 RunInstances 创建的 spot-instances-request
资源是请求 Spot 实例的资源。第二个语句提供了一个 *
通配符,以拒绝在实例启动时创建所有资源时对其进行标记。如果在创建时标记 spot-instances-request
或任何其他资源,则 RunInstances 调用将失败。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "DenyTagResources",
"Effect": "Deny",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
不支持 – 示例:仅在为竞价型实例请求分配了特定标签时允许创建该请求
spot-instances-request
资源不支持以下策略。
以下策略旨在向 RunInstances 授予权限以仅在使用特定标签标记竞价型实例请求时创建该请求。
第一个语句允许 RunInstances 创建列出的资源。
第二个语句旨在向用户授予权限以仅在竞价型实例请求具有标签 environment=production
时创建该请求。如果将此条件应用于由 RunInstances 创建的其他资源,则不指定标签会导致 Unauthenticated
错误。但是,如果没有为竞价型实例请求指定标签,则 Amazon EC2 不会在 RunInstances 语句中评估 spot-instances-request
资源,这会导致 RunInstances 创建未标记的竞价型实例请求。
请注意,请指定 environment=production
之外的其他标签会导致错误 Unauthenticated
,这是因为,如果用户标记竞价型实例请求,则 Amazon EC2 会在 RunInstances 语句中评估 spot-instances-request
资源。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "RequestSpotInstancesOnlyIfTagIs_environment=production - NOT SUPPORTED - DO NOT USE!",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
示例:在为竞价型实例请求分配了特定标签的情况下拒绝创建该请求
如果使用 environment=production
标记了竞价型实例请求,则以下策略将拒绝 RunInstances 创建该请求的权限。
第一个语句允许 RunInstances 创建列出的资源。
第二个语句在竞价型实例请求具有标签 environment=production
时拒绝用户创建该请求的权限。指定 environment=production
作为标签会导致 Unauthenticated
错误。指定其他标签或不指定标签将导致创建竞价型实例请求。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*",
"arn:aws:ec2:us-east-1:*:spot-instances-request/*"
]
},
{
"Sid": "DenySpotInstancesRequests",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
示例:使用预留实例
下面的策略向用户授予在账户中查看、修改和购买预留实例的权限。
无法为个别的预留实例设置资源级别的许可。此策略表示用户可以访问账户中的所有预留实例。
Resource
元素使用 * 通配符指示用户可以在操作中指定所有资源;在本例中,他们可以列出并修改账户中的所有 预留实例。他们还可以使用账户凭证购买预留实例。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeReservedInstances",
"ec2:ModifyReservedInstances",
"ec2:PurchaseReservedInstancesOffering",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeReservedInstancesOfferings"
],
"Resource": "*"
}
]
}
要允许用户查看和修改账户中的 预留实例,但不允许购买新的 预留实例,请使用以下命令:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeReservedInstances",
"ec2:ModifyReservedInstances",
"ec2:DescribeAvailabilityZones"
],
"Resource": "*"
}
]
}
示例:标记资源
仅当标签包含键 CreateTags
和值 environment
时,下面的策略才允许用户使用 production
操作向实例应用标签。不允许使用其他标签,并且用户无法为任何其他资源类型添加标签。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:instance/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
}
]
}
以下策略允许用户标记已具有键为 owner
、值为用户名的标签的任何可标记资源。此外,用户还必须在请求中指定键为 anycompany:environment-type
、值为 test
或 prod
的标签。用户可以在请求中指定其他的标签。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/anycompany:environment-type": ["test","prod"],
"aws:ResourceTag/owner": "${aws:username}"
}
}
}
]
}
您可以创建允许用户删除资源的特定标签的 IAM policy。例如,当在请求中指定的标签键为 environment
或 cost-center
时,下面的策略允许用户删除卷的标签。可以为此标签指定任何值,但标签键必须匹配某个指定键。
如果删除资源,则所有与资源相关的标签都将被删除。用户不需要使用 ec2:DeleteTags
操作删除具有标签的资源的权限,他们仅需要执行删除操作的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DeleteTags",
"Resource": "arn:aws:ec2:us-east-1:account-id
:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": ["environment","cost-center"]
}
}
}
]
}
该策略仅允许用户删除任何资源上的 environment=prod
标签,但前提是已使用键为 owner
、值为用户名的标签标记该资源。用户无法删除资源的任何其他标签。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DeleteTags"
],
"Resource": "arn:aws:ec2:region
:account-id
:*/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "prod",
"aws:ResourceTag/owner": "${aws:username}"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": ["environment"]
}
}
}
]
}
示例:使用 IAM 角色
以下策略允许用户将 IAM 角色附加、替换到具有标签 department=test
的实例或与之分离。替换或分离 IAM 角色需要一个关联 ID,因此该策略还授予用户使用 ec2:DescribeIamInstanceProfileAssociations
操作的权限。
用户必须具有使用 iam:PassRole
操作的权限,才能将角色传递到实例。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateIamInstanceProfile",
"ec2:ReplaceIamInstanceProfileAssociation",
"ec2:DisassociateIamInstanceProfile"
],
"Resource": "arn:aws:ec2:us-east-1:account-id
:instance/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department":"test"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:DescribeIamInstanceProfileAssociations",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::account-id
:role/DevTeam*"
}
]
}
以下策略允许用户为所有实例附加或替换 IAM 角色。用户只能附加或替换名称以 TestRole-
开头的 IAM 角色。对于 iam:PassRole
操作,请确保您指定的是 IAM 角色的名称而不是实例配置文件的名称(如果名称不同)。有关更多信息,请参阅 实例配置文件。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateIamInstanceProfile",
"ec2:ReplaceIamInstanceProfileAssociation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:DescribeIamInstanceProfileAssociations",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::account-id
:role/TestRole-*"
}
]
}
示例:使用路由表
以下策略允许用户添加、删除和替换仅与 VPC vpc-ec43eb89
关联的路由表的路由。要为 ec2:Vpc
条件键指定 VPC,必须指定 VPC 的完整 ARN。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DeleteRoute",
"ec2:CreateRoute",
"ec2:ReplaceRoute"
],
"Resource": [
"arn:aws:ec2:region
:account-id
:route-table/*"
],
"Condition": {
"StringEquals": {
"ec2:Vpc": "arn:aws:ec2:region
:account-id
:vpc/vpc-ec43eb89"
}
}
}
]
}
示例:允许特定实例查看其他 AWS 服务中的资源
下面是您可能附加到 IAM 角色的策略的示例。该策略允许实例查看不同 AWS 服务中的资源。它使用 ec2:SourceInstanceARN
全局条件键指定从中发出请求的实例必须是实例 i-093452212644b0dd6
。如果同一个 IAM 角色还与另一个实例关联,则另一个实例无法执行任何这些操作。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"s3:ListAllMyBuckets",
"dynamodb:ListTables",
"rds:DescribeDBInstances"
],
"Resource": [
"*"
],
"Condition": {
"ArnEquals": {
"ec2:SourceInstanceARN": "arn:aws:ec2:region
:account-id
:instance/i-093452212644b0dd6"
}
}
}
]
}
示例:使用启动模板
以下策略允许用户创建启动模板版本和修改启动模板,但仅适用于特定的启动模板 (lt-09477bcd97b0d3abc
)。用户无法使用其他启动模板。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:CreateLaunchTemplateVersion",
"ec2:ModifyLaunchTemplate"
],
"Effect": "Allow",
"Resource": "arn:aws:ec2:region
:account-id
:launch-template/lt-09477bcd97b0d3abc
"
}
]
}
以下策略允许用户删除任何启动模板和启动模板版本,但前提是启动模板具有标签 Purpose
=Testing
。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DeleteLaunchTemplate",
"ec2:DeleteLaunchTemplateVersions"
],
"Effect": "Allow",
"Resource": "arn:aws:ec2:region
:account-id
:launch-template/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Purpose": "Testing"
}
}
}
]
}
以下策略确保用户只能使用 实例元数据服务版本 2 (IMDSv2) 检索实例元数据。您可以将以下四个策略合并为一个具有四个语句的策略。当合并为一个策略时,您可以将该策略用作服务控制策略 (SCP)。它可以很好地用作应用于现有 IAM policy 的拒绝 策略(取消和限制现有权限),也可以很好地用作在账户、组织单位 (OU) 或整个组织间全局应用的 SCP。
以下 RunInstances 元数据选项策略必须与授予委托人使用 RunInstances 启动实例的权限的策略结合使用。如果委托人没有同时具有 RunInstances 权限,则无法启动实例。有关更多信息,请参阅使用实例和启动实例 (RunInstances) 中的策略。
如果您使用 Auto Scaling 组且需要要求对所有新实例使用 IMDSv2,您的 Auto Scaling 组必须使用启动模板。
当 Auto Scaling 组使用启动模板时,会在创建新 Auto Scaling 组时检查 IAM 委托人的 ec2:RunInstances
权限。当更新现有 Auto Scaling 组以使用新启动模板或新版本的启动模板时,也会检查这些内容。
只有在创建或更新正在使用启动模板的 Auto Scaling 组时,才会检查对 RunInstances
的 IAM 委托人使用 IMDSv1 的限制。对于配置为使用 Latest
或 Default
启动模板的 Auto Scaling 组,在创建启动模板的新版本时不会检查权限。要检查权限,您必须将 Auto Scaling 组配置为使用特定版本 的启动模板。
要在 Auto Scaling 组启动的实例上强制使用 IMDSv2,需要执行以下附加步骤:
-
通过对创建的新委托人使用服务控制策略 (SCP) 或 IAM 权限边界,请对组织中的所有账户禁用启动配置。对于具有 Auto Scaling 组权限的现有 IAM 委托人,请使用此条件键更新其关联策略。要禁用启动配置,请使用值指定为 "autoscaling:LaunchConfigurationName"
的 null
条件键创建或修改相关 SCP、权限边界或 IAM policy。
-
对于新启动模板,请在启动模板中配置实例元数据选项。对于现有启动模板,创建启动模板的新版本,并在新版本中配置实例元数据选项。
-
在向任何委托人授予使用启动模板的权限的策略中,通过指定 $latest
来限制 $default
和 "autoscaling:LaunchTemplateVersionSpecified": "true"
的关联。通过限制只使用特定版本的启动模板,您可以确保使用在其中配置实例元数据选项的版本启动新实例。有关更多信息,请参阅 Amazon EC2 Auto Scaling API 参考 中的 LaunchTemplateSpecification,特别是 Version
参数。
-
对于使用启动配置的 Auto Scaling 组,请将启动配置替换为启动模板。有关更多信息,请参阅《Amazon EC2 Auto Scaling User Guide》中的 Migrate your Auto Scaling groups to launch templates。
-
对于使用启动模板的 Auto Scaling 组,请确保它使用配置了实例元数据选项的新启动模板,或使用配置了实例元数据选项的新版本的当前启动模板。有关更多信息,请参阅 update-auto-scaling-group。
以下策略指定您不能调用 RunInstances API,除非该实例也选择需要使用 IMDSv2(由 "ec2:MetadataHttpTokens": "required"
指示)。如果您未指定实例需要 IMDSv2,则在调用 RunInstances API 时会收到 UnauthorizedOperation
错误。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireImdsV2",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals": {
"ec2:MetadataHttpTokens": "required"
}
}
}
]
}
以下策略指定您不能调用 ModifyInstanceMetadataOptions
API 并允许选择 IMDSv1 或 IMDSv2。如果您调用 ModifyInstanceMetadataOptions
API,则必须将 HttpTokens
属性设置为 required
。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyIMDSv1HttpTokensModification",
"Effect": "Deny",
"Action": "ec2:ModifyInstanceMetadataOptions",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals": {
"ec2:Attribute/HttpTokens": "required"
},
"Null": {
"ec2:Attribute/HttpTokens": false
}
}
}]
}
以下策略指定您不能调用 RunInstances API,除非您还指定了跃点限制,且跃点限制不能超过 3。如果您无法执行此操作,则在调用 RunInstances API 时会收到 UnauthorizedOperation
错误。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MaxImdsHopLimit",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"NumericGreaterThan": {
"ec2:MetadataHttpPutResponseHopLimit": "3"
}
}
}
]
}
以下策略仅允许具有 ec2-imds-admins
角色的用户对实例元数据选项进行更改。如果除 ec2-imds-admins
角色以外的任何委托人尝试调用 ModifyInstanceMetadataOptions API,则会收到 UnauthorizedOperation
错误。此语句可用于控制 ModifyInstanceMetadataOptions API 的使用;目前对于 ModifyInstanceMetadataOptions API 没有精细访问控制(条件)。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyImdsAdminsToModifySettings",
"Effect": "Deny",
"Action": "ec2:ModifyInstanceMetadataOptions",
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:PrincipalARN": "arn:aws:iam::*:role/ec2-imds-admins"
}
}
}
]
}
以下策略指定如果将此策略应用于某个角色,并且该角色由 EC2 服务代入且生成的凭证用于对请求进行签名,则必须由从 IMDSv2 中检索的 EC2 角色凭证对该请求进行签名。否则,它的所有 API 调用都会收到 UnauthorizedOperation
错误。此语句/策略可广泛应用,因为如果请求未由 EC2 角色证书签名,则其为无效。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireAllEc2RolesToUseV2",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NumericLessThan": {
"ec2:RoleDelivery": "2.0"
}
}
}
]
}
使用 Amazon EBS 卷和快照
有关使用 Amazon EBS 卷和快照的策略示例,请参阅 Amazon EBS 的基于身份的策略示例。