本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用身份验证策略控制对VPC莱迪思服务的访问
VPC Lattice 验证策略是 IAM policy 文档,您可以将其附加到服务网络或服务,以控制指定主体是否可以访问一组服务或特定服务。您可以将一个验证策略附加到您要控制访问的每个服务网络或服务。
注意
服务网络上的身份验证策略不适用于服务网络中的资源配置。
验证策略不同于 IAM 基于身份的策略。IAM 基于身份的策略附加到 IAM 用户、组或角色,并定义这些身份可以对哪些资源执行哪些操作。验证策略附加到服务和服务网络。要使授权成功,验证策略和基于身份的策略都需要具有显式允许语句。有关更多信息,请参阅 授权的工作原理。
您可以使用 AWS CLI 和控制台查看、添加、更新或删除服务和服务网络上的身份验证策略。使用时 AWS CLI,请记住您的命令在 AWS 区域 配置文件中运行。如果您想要在不同的区域中运行命令,可以为配置文件更改默认区域,或者与命令一起使用 --region
参数。
要开始使用验证策略,请按照以下过程创建适用于服务网络的验证策略。对于您不想应用于其他服务的更具限制性的权限,您可以选择在单个服务上设置验证策略。
以下 AWS CLI 任务向您展示如何使用身份验证策略管理对服务网络的访问权限。有关使用控制台的说明,请参阅 VPC Lattice 中的服务网络。
向服务网络添加验证策略
按照本节中的步骤 AWS CLI 使用:
-
使用 IAM 在服务网络上启用访问控制。
-
向服务网络添加验证策略。如果不添加验证策略,则所有流量都将收到拒绝访问错误。
要启用访问控制并向新服务网络添加验证策略
-
要在服务网络上启用访问控制,使服务网络能够使用验证策略,请使用具有
--auth-type
选项和值为AWS_IAM
的 create-service-network 命令。aws vpc-lattice create-service-network --name
Name
--auth-type AWS_IAM [--tagsTagSpecification
]如果成功,该命令将返回类似于以下内容的输出。
{ "arn": "
arn
", "authType": "AWS_IAM", "id": "sn-0123456789abcdef0", "name": "Name" } -
使用 put-auth-policy 命令,指定要在其中添加验证策略的服务网络 ID,以及要添加的验证策略。
例如,使用以下命令为 ID 为
的服务网络创建验证策略。sn-0123456789abcdef0
aws vpc-lattice put-auth-policy --resource-identifier
sn-0123456789abcdef0
--policyfile://policy.json
使用 JSON 创建策略定义。有关更多信息,请参阅 验证策略中的常用元素。
如果成功,该命令将返回类似于以下内容的输出。
{ "policy": "
policy
", "state": "Active" }
要启用访问控制并向现有服务网络添加验证策略
-
要在服务网络上启用访问控制,使服务网络能够使用验证策略,请使用具有
--auth-type
选项和值为AWS_IAM
的 update-service-network 命令。aws vpc-lattice update-service-network --service-network-identifier
sn-0123456789abcdef0
--auth-type AWS_IAM如果成功,该命令将返回类似于以下内容的输出。
{ "arn": "
arn
", "authType": "AWS_IAM", "id": "sn-0123456789abcdef0", "name": "Name" } -
使用 put-auth-policy 命令,指定要在其中添加验证策略的服务网络 ID,以及要添加的验证策略。
aws vpc-lattice put-auth-policy --resource-identifier
sn-0123456789abcdef0
--policyfile://policy.json
使用 JSON 创建策略定义。有关更多信息,请参阅 验证策略中的常用元素。
如果成功,该命令将返回类似于以下内容的输出。
{ "policy": "
policy
", "state": "Active" }
更改服务网络的验证类型
要禁用服务网络的验证策略
使用具有 --auth-type
选项和值为 NONE
的 update-service-network 命令。
aws vpc-lattice update-service-network --service-network-identifier
sn-0123456789abcdef0
--auth-type NONE
如果之后需要再次启用验证策略,请使用为 --auth-type
选项指定的 AWS_IAM
运行此命令。
从服务网络中删除验证策略
要从服务网络中删除验证策略
使用 delete-auth-policy 命令。
aws vpc-lattice delete-auth-policy --resource-identifier
sn-0123456789abcdef0
如果在将服务网络的验证类型更改为 NONE
之前删除验证策略,则请求会失败。
以下 AWS CLI 任务向您展示如何使用身份验证策略管理对服务的访问权限。有关使用控制台的说明,请参阅 VPC Lattice 中的服务。
向服务添加验证策略
请按照以下步骤 AWS CLI 使用:
-
使用 IAM 在服务上启用访问控制。
-
向服务添加验证策略。如果不添加验证策略,则所有流量都将收到拒绝访问错误。
要启用访问控制并向新服务添加验证策略
-
要在服务上启用访问控制,使服务能够使用验证策略,请使用具有
--auth-type
选项和值为AWS_IAM
的 create-service 命令。aws vpc-lattice create-service --name
Name
--auth-type AWS_IAM [--tagsTagSpecification
]如果成功,该命令将返回类似于以下内容的输出。
{ "arn": "
arn
", "authType": "AWS_IAM", "dnsEntry": { ... }, "id": "svc-0123456789abcdef0", "name": "Name", "status": "CREATE_IN_PROGRESS" } -
使用 put-auth-policy 命令,指定要在其中添加验证策略的服务 ID,以及要添加的验证策略。
例如,使用以下命令为具有 ID
svc-0123456789abcdef0
的服务创建身份验证策略。aws vpc-lattice put-auth-policy --resource-identifier
svc-0123456789abcdef0
--policyfile://policy.json
使用 JSON 创建策略定义。有关更多信息,请参阅 验证策略中的常用元素。
如果成功,该命令将返回类似于以下内容的输出。
{ "policy": "
policy
", "state": "Active" }
要启用访问控制并向现有服务添加验证策略
-
要在服务上启用访问控制,使服务能够使用验证策略,请使用具有
--auth-type
选项和值为AWS_IAM
的 update-service 命令。aws vpc-lattice update-service --service-identifier
svc-0123456789abcdef0
--auth-type AWS_IAM如果成功,该命令将返回类似于以下内容的输出。
{ "arn": "
arn
", "authType": "AWS_IAM", "id": "svc-0123456789abcdef0", "name": "Name" } -
使用 put-auth-policy 命令,指定要在其中添加验证策略的服务 ID,以及要添加的验证策略。
aws vpc-lattice put-auth-policy --resource-identifier
svc-0123456789abcdef0
--policyfile://policy.json
使用 JSON 创建策略定义。有关更多信息,请参阅 验证策略中的常用元素。
如果成功,该命令将返回类似于以下内容的输出。
{ "policy": "
policy
", "state": "Active" }
更改服务的验证类型
要禁用服务的验证策略
使用具有 --auth-type
选项和值为 NONE
的 update-service 命令。
aws vpc-lattice update-service --service-identifier
svc-0123456789abcdef0
--auth-type NONE
如果之后需要再次启用验证策略,请使用为 --auth-type
选项指定的 AWS_IAM
运行此命令。
从服务中删除验证策略
要从服务中删除验证策略
使用 delete-auth-policy 命令。
aws vpc-lattice delete-auth-policy --resource-identifier
svc-0123456789abcdef0
如果在将服务的验证类型更改为 NONE
之前删除验证策略,则请求会失败。
如果启用验证策略,该验证策略需要对服务发出经过验证的请求,则对服务的任何请求都必须包含使用签名版本 4(SigV4)计算的有效请求签名。有关更多信息,请参阅 SIGv4 经身份验证的 Amazon VPC Lattice 请求。
验证策略中的常用元素
指定 VPC Lattice 验证策略所用的语法与 IAM 策略相同。有关更多信息,请参见《IAM 用户指南》中的基于身份的策略和基于资源的策略。
验证策略包含以下元素:
-
主体:允许访问语句中的操作和资源的人员或应用程序。在验证策略中,主体是接收此权限的 IAM 实体。主体作为 IAM 实体经过验证,以向特定资源或资源组(如服务网络中的服务)发出请求。
您必须在基于资源的策略中指定主体。委托人可以包括账户、用户、角色、联合用户或 AWS 服务。有关更多信息,请参阅《IAM 用户指南》中的 AWS JSON 策略元素:主体。
-
效果:指定主体请求特定操作时的效果。此值可以是
Allow
或Deny
。默认情况下,当您使用 IAM 在服务或服务网络上启用访问控制时,主体无权向服务或服务网络发出请求。 -
操作-您授予或拒绝权限的特定 API 操作。VPC Lattice 支持使用
vpc-lattice-svcs
前缀的操作。有关更多信息,请参阅《服务授权参考》中的 Amazon VPC Lattice 服务定义的操作。 -
资源:受操作影响的服务。
-
条件:条件是可选的。您可以使用它们来控制您的策略何时生效。有关更多信息,请参阅《服务授权参考》中的 Amazon VPC Lattice 服务的条件键。
在创建和管理验证策略时,您可能希望使用 IAM Policy Generator。
要求
JSON 中的策略不得包含换行符或空行。
验证策略的资源格式
您可以通过创建一个验证策略来限制对特定资源的访问,该策略使用具有 <serviceARN>/<path>
模式的匹配架构,并对 Resource
元素进行编码,如以下示例所示。
协议 | 示例 |
---|---|
HTTP |
|
gRPC |
|
对 <serviceARN>
使用以下 Amazon 资源名称(ARN)资源格式:
arn:aws:vpc-lattice:
region
:account-id
:service/service-id
例如:
"Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0"
可在验证策略中使用的条件键
通过验证策略的 Condition 元素中的条件键,可进一步控制访问。这些条件键是否可用于评估,具体取决于协议以及请求使用的是签名版本 4(SigV4)签名还是匿名签名。条件键区分大小写。
AWS 提供了可用于控制访问权限的全局条件键,例如aws:PrincipalOrgID
和aws:SourceIp
。要查看全 AWS 局条件键列表,请参阅 IAM 用户指南中的AWS 全局条件上下文密钥。
下表列出了 VPC Lattice 条件键。有关更多信息,请参阅《服务授权参考》中的 Amazon VPC Lattice 服务的条件键。
条件键 | 描述 | 示例 | 适用于匿名(未经验证)调用方? | 适用于 gRPC? |
---|---|---|---|---|
vpc-lattice-svcs:Port |
按发出请求的服务端口筛选访问 | 80 | 支持 | 是 |
vpc-lattice-svcs:RequestMethod |
按请求的方式筛选访问权限 | GET | 是 | 始终 POST |
vpc-lattice-svcs:RequestHeader/ |
按请求标头中的标头名称-值对筛选访问权限 | content-type: application/json | 支持 | 是 |
vpc-lattice-svcs:RequestQueryString/ |
按请求 URL 中的查询字符串键值筛选访问权限 | quux: [corge, grault] | 是 | 否 |
vpc-lattice-svcs:ServiceNetworkArn |
通过接收请求的服务,其服务网络的 ARN 筛选访问 | arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-0123456789abcdef0 | 支持 | 是 |
vpc-lattice-svcs:ServiceArn |
通过接收请求的服务的 ARN 筛选访问 | arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0 | 支持 | 是 |
vpc-lattice-svcs:SourceVpc |
按发出请求的 VPC 筛选访问权限 | vpc-1a2b3c4d | 支持 | 是 |
vpc-lattice-svcs:SourceVpcOwnerAccount |
按发出请求的 VPC 的拥有账户筛选访问权限 | 123456789012 | 支持 | 是 |
匿名(未经验证)主体
匿名委托人是指不使用签名版本 4 (Sigv4) 签署 AWS 请求且位于与服务网络相连的 VPC 内的来电者。如果验证策略允许,匿名主体可以向服务网络中的服务发出未经验证的请求。
示例验证策略
以下是要求由经过验证的主体发出请求的验证策略示例。
所有示例都使用该us-west-2
地区并包含虚构账户。 IDs
示例 1:限制特定 AWS 组织对服务的访问
以下验证策略示例向任何经过验证的请求授予权限,以访问该策略适用的服务网络中的任何服务。但是,请求必须来自属于条件中指定的 AWS 组织的委托人。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "vpc-lattice-svcs:Invoke",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": [
"o-123456example
"
]
}
}
}
]
}
示例 2:限制特定 IAM 角色对服务的访问
以下验证策略示例向任何经过验证的请求授予权限,该请求使用 IAM 角色 rates-client
对 Resource
元素中指定的服务发出 HTTP GET 请求。Resource
元素中的资源与策略附加到的服务相同。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012
:role/rates-client"
]
},
"Action": "vpc-lattice-svcs:Invoke",
"Resource": [
"arn:aws:vpc-lattice:us-west-2:123456789012
:service/svc-0123456789abcdef0
/*"
],
"Condition": {
"StringEquals": {
"vpc-lattice-svcs:RequestMethod": "GET"
}
}
}
]
}
示例 3:限制特定 VPC 中经过验证的主体访问服务
以下验证策略示例仅允许来自 VPC 中主体(VPC ID 为
)的经过验证的请求。vpc-1a2b3c4d
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "vpc-lattice-svcs:Invoke",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:PrincipalType": "Anonymous"
},
"StringEquals": {
"vpc-lattice-svcs:SourceVpc": "vpc-1a2b3c4d
"
}
}
}
]
}
授权的工作原理
当VPC Lattice服务收到请求时, AWS 执行代码会一起评估所有相关的权限策略,以确定是授权还是拒绝该请求。在授权过程中,服务会评估请求上下文中适用的所有 IAM 基于身份的策略和验证策略。默认情况下,当验证类型为 AWS_IAM
时,会隐式拒绝所有请求。所有相关策略的显式允许将覆盖默认值。
授权包括:
-
收集所有相关的 IAM 基于身份的策略和验证策略。
-
评估生成的策略集:
-
验证请求方(如 IAM 用户或角色)是否有权从请求方所属的账户执行操作。如果没有明确的 allow 语句,则 AWS 不对请求进行授权。
-
验证服务网络的验证策略是否允许请求。如果启用了身份验证策略,但没有明确的 allow 声明,则 AWS 不对请求进行授权。如果有显式允许语句,或者验证类型为
NONE
,则代码将继续。 -
验证服务的验证策略是否允许请求。如果启用了身份验证策略,但没有明确的 allow 声明,则 AWS 不对请求进行授权。如果有显式允许语句,或者验证类型为
NONE
,则执行代码将返回最终决定 Allow。 -
任何策略中的显式拒绝将覆盖任何允许。
-
下图显示授权工作流。发出请求时,相关策略允许或拒绝请求访问给定服务。
