我正试图找出我的一个用户的IAM策略的一个问题。我的政策规定,如果服务不在我们的列表中,则拒绝访问。我正在尝试为apigateway的所有操作授予我的用户访问权限。我提供了以下政策。但它拒绝访问除GET、OPTIONS、HEAD之外的所有操作。我一开始有野字符*,会被个别动作覆盖野字符设置。我正在努力了解IAM的评估顺序。单个操作是否覆盖*?
{
"Statement": [
{
"Resource": "*",
"Effect": "Deny",
"NotAction": [
"apigateway:*"
"apigateway:GET",
"apigateway:OPTIONS",
"apigateway:HEAD"
]
}
]
}
在AWS IAM中,所有请求在默认情况下都被拒绝。因此,您只需要授予所需操作的权限,而默认情况下,所有其他操作都将被拒绝。
当发出请求时,AWS服务决定是否请求应被允许或拒绝。评估逻辑如下这些规则:
默认情况下,所有请求都被拒绝。(通常,使用帐户凭据对帐户中的资源进行请求总是被允许的。)
显式允许覆盖此默认值。
显式拒绝覆盖任何允许。
评估策略的顺序对评估结果没有影响。评估所有策略,结果总是允许或拒绝请求。
请参阅确定请求是允许还是拒绝。
因此,通常将Allow
策略写成就足够了
{
"Statement": [
{
"Resource": "*",
"Effect": "Allow",
"Action": [
"apigateway:GET",
"apigateway:OPTIONS",
"apigateway:HEAD"
]
}
]
}
但是,如果您怀疑其他策略可能正在向用户授予不需要的操作,则可以将Deny
策略写成:
{
"Statement": [
{
"Resource": "*",
"Effect": "Deny",
"NotAction": [
"apigateway:GET",
"apigateway:OPTIONS",
"apigateway:HEAD"
]
}
]
}
这一行来自AWS文档:
任何策略中的明确拒绝都会覆盖任何允许的