AWS CLI:创建 EC2 实例并附加实例配置文件(未经授权)
AWS CLI: create EC2 instance and attach instance profile (unauthorized)
我想从一个 ec2 实例“A”启动另一个 ec2 实例“B”并为其分配一个实例配置文件。
我可以在没有实例配置文件的情况下创建新实例“B”:
aws ec2 run-instances --image-id ami-<redacted> --count 1 --instance-type t2.micro --key-name <redacted> --security-group-ids sg-<redacted> --subnet-id subnet-<redacted>
但是,当我添加 --iam-instance-profile Name="<redacted>"
标志以附加实例配置文件时,我收到错误消息:
An error occurred (UnauthorizedOperation) when calling the RunInstances operation:
You are not authorized to perform this operation. Encoded authorization failure message: <redacted>
它猜测附加到实例“A”(并用于创建实例“B”)的实例配置文件缺少一些资源权限,但我想不出解决方案。
我解码了失败信息(aws sts decode-authorization-message --encoded-message <message>
),但我还是不明白:
{
"DecodedMessage":
"{\"allowed\":false,\"explicitDeny\":false,\"matchedStatements\":{\"items\":[]},\"failures\":{\"items\":[]},\"context\":{\"principal\":{\"id\":\"<redacted>\",\"arn\":\"arn:aws:sts::<redacted>:assumed-role/<redacted>/<redacted>\"},\"action\":\"iam:PassRole\",\"resource\":\"arn:aws:iam::<redacted>:role/<redacted>\",\"conditions\":{\"items\":[{\"key\":\"aws:Region\",\"values\":{\"items\":[{\"value\":\"eu-central-1\"}]}},{\"key\":\"aws:Service\",\"values\":{\"items\":[{\"value\":\"ec2\"}]}},{\"key\":\"aws:Resource\",\"values\":{\"items\":[{\"value\":\"role/<redacted>\"}]}},{\"key\":\"iam:RoleName\",\"values\":{\"items\":[{\"value\":\"<redacted>\"}]}},{\"key\":\"aws:Type\",\"values\":{\"items\":[{\"value\":\"role\"}]}},{\"key\":\"aws:Account\",\"values\":{\"items\":[{\"value\":\"<redacted>\"}]}},{\"key\":\"aws:ARN\",\"values\":{\"items\":[{\"value\":\"arn:aws:iam::<redacted>:role/<redacted>\"}]}}]}}}"
}
我错过了什么?
与实例 A 关联的 IAM 委托人(通常是 IAM 角色)需要 pass the IAM role 与您选择的 AWS EC2 服务配置文件相关联的权限,以便可以使用所选 profile/role.
需要此权限的原因是为了防止一个角色与另一个授予提升权限的角色一起启动计算(这称为 'privilege escalation')。
在与启动实例 A 的 IAM 角色关联的策略中添加如下内容:
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:::your-account:role/your-role"
}
我想从一个 ec2 实例“A”启动另一个 ec2 实例“B”并为其分配一个实例配置文件。
我可以在没有实例配置文件的情况下创建新实例“B”:
aws ec2 run-instances --image-id ami-<redacted> --count 1 --instance-type t2.micro --key-name <redacted> --security-group-ids sg-<redacted> --subnet-id subnet-<redacted>
但是,当我添加 --iam-instance-profile Name="<redacted>"
标志以附加实例配置文件时,我收到错误消息:
An error occurred (UnauthorizedOperation) when calling the RunInstances operation:
You are not authorized to perform this operation. Encoded authorization failure message: <redacted>
它猜测附加到实例“A”(并用于创建实例“B”)的实例配置文件缺少一些资源权限,但我想不出解决方案。
我解码了失败信息(aws sts decode-authorization-message --encoded-message <message>
),但我还是不明白:
{
"DecodedMessage":
"{\"allowed\":false,\"explicitDeny\":false,\"matchedStatements\":{\"items\":[]},\"failures\":{\"items\":[]},\"context\":{\"principal\":{\"id\":\"<redacted>\",\"arn\":\"arn:aws:sts::<redacted>:assumed-role/<redacted>/<redacted>\"},\"action\":\"iam:PassRole\",\"resource\":\"arn:aws:iam::<redacted>:role/<redacted>\",\"conditions\":{\"items\":[{\"key\":\"aws:Region\",\"values\":{\"items\":[{\"value\":\"eu-central-1\"}]}},{\"key\":\"aws:Service\",\"values\":{\"items\":[{\"value\":\"ec2\"}]}},{\"key\":\"aws:Resource\",\"values\":{\"items\":[{\"value\":\"role/<redacted>\"}]}},{\"key\":\"iam:RoleName\",\"values\":{\"items\":[{\"value\":\"<redacted>\"}]}},{\"key\":\"aws:Type\",\"values\":{\"items\":[{\"value\":\"role\"}]}},{\"key\":\"aws:Account\",\"values\":{\"items\":[{\"value\":\"<redacted>\"}]}},{\"key\":\"aws:ARN\",\"values\":{\"items\":[{\"value\":\"arn:aws:iam::<redacted>:role/<redacted>\"}]}}]}}}"
}
我错过了什么?
与实例 A 关联的 IAM 委托人(通常是 IAM 角色)需要 pass the IAM role 与您选择的 AWS EC2 服务配置文件相关联的权限,以便可以使用所选 profile/role.
需要此权限的原因是为了防止一个角色与另一个授予提升权限的角色一起启动计算(这称为 'privilege escalation')。
在与启动实例 A 的 IAM 角色关联的策略中添加如下内容:
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:::your-account:role/your-role"
}