是否可以根据每个实例 ID 为 AWS AutoScalingGroup 中的每个实例配置 IAM 权限?

Is it possible to configure each instance in an AWS AutoScalingGroup with a IAM permission based on each instance ID?

我想使用 CDK 通过 AutoScalingGroup 创建多个 EC2 实例。

AutoScalingGroup ec2Asg = AutoScalingGroup.Builder.create(this, "Ec2Asg")
                                                  .role(myEc2InstanceProfileRole)
                                                  ... further config here ...
                                                  .build();

如果可能,我想将 ASG 中的每个实例限制为只能访问实例 ID 构成资源一部分的特定资源。例如:

arn:aws:ssm:REGION:ACCOUNT:parameter/<INSTANCE ID>/*

如何最好地实现这一点?

不幸的是,这对于您想要实现的目标是不可能的。 EC2 实例的 IAM 权限未分配给实例本身,而是附加到 IAM 实体(例如实例 IAM 角色)。

SSM 参数确实支持 hierarchy,因此您可以创建一个参数,例如 arn:aws:ssm:REGION:ACCOUNT:parameter/InstanceRole/i-1234567/parameter,然后将 IAM 角色限制为仅访问与模式 arn:aws:ssm:REGION:ACCOUNT:parameter/InstanceRole/ 匹配的资源。

通过这样做,您至少可以限制同一 ASG 中实例的范围。另请注意,任何 IAM 资源仍可访问参数本身并获得授予它们的权限。