我正在尝试在目标组上运行这个 cli:
aws elbv2 describe-target-health
此 IAM 策略不起作用:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1497933736509",
"Action": [
"elasticloadbalancing:DescribeTargetHealth"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticloadbalancing:::*"
}
]
}
错误信息:
An error occurred (AccessDenied) when calling the DescribeTargetHealth operation
这有效:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1497933977893",
"Action": [
"elasticloadbalancing:DescribeTargetHealth"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
问题:为什么我必须使用 * 来包含所有 AWS 资源?我是否遗漏了任何显而易见的东西?
答案1
在某些情况下,ARN 中的路径可以包含通配符或星号 (*)。但您不能在 ARN 中指定资源类型的部分使用通配符。这是什么意思?
您可以指定“所有用户”:
"Resource": "arn:aws:iam::123456789012:user/*"
您可以指定“所有 S3 存储桶”:
"Resource": "arn:aws:s3:::*"
您可以指定“所有 AWS 资源”:
"Resource": "*"
有效 ARN 列表记录在ARNS 和 AWS 服务命名空间页面。对于ELB/ALB
服务,唯一允许的 ARN 和资源是:
arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id
arn:aws:elasticloadbalancing:region:account-id:listener/app/load-balancer-name/load-balancer-id/listener-id
arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/load-balancer-id/listener-id/rule-id
arn:aws:elasticloadbalancing:region:account-id:targetgroup/target-group-name/target-group-id
arn:aws:elasticloadbalancing:region:account-id:loadbalancer/name
在文档中,红色的 ARN 组件是您可以使用的。对于ELB/ALB
服务,您可以指定自己的region
、、account-id
名称ELB
等target-group-name/target-group-id
。但您不能写出您尝试过的内容,因为这不是有效的 ARN:
"Resource": "arn:aws:elasticloadbalancing:::*"