当尝试使用aws apprunner create-service --cli-input-json file://./myconfig.json
创建apprunner服务时,我在标题中得到错误:
An error occurred (InvalidRequestException) when calling the CreateService operation: Error in assuming access role arn:aws:iam::1234:role/my-role
我使用的myconfig.json与AWS CreateService文档中的示例json非常相似;我不认为这在这里特别重要。
这个错误似乎意味着我应该承担这个角色。。。但我已经承担了这个stackoverflow命令的角色q/a:
eval $(aws sts assume-role --role-arn arn:aws:iam::1234:role/my-role --role-session-name apprunner-stuff1 --region us-east-1 | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=(.AccessKeyId)nexport AWS_SECRET_ACCESS_KEY=(.SecretAccessKey)nexport AWS_SESSION_TOKEN=(.SessionToken)n"')
这运行时没有错误&当我运行时:
aws sts get-caller-identity
它输出以下内容,我认为这看起来是正确的:
{
"UserId": "SOME1234NPC:apprunner-stuff1",
"Account": "1234",
"Arn": "arn:aws:sts::1234:assumed-role/my-role/apprunner-stuff1"
}
在这一点上,错误消息没有意义&我想知道我做错了什么愚蠢的IAM?
具体来说,我曾试图从Apprunner IAM文档中授予我的角色运行CreateService的所有权限,但我很容易错过了一些权限。这里的错误消息似乎并不表示该角色没有足够的权限,但可能是相关的。
我没有尝试根据IAM文档权限创建角色,而是遵循了UI AppRunner指南。这创建了一个自动命名为AppRunnerECRAccessRole的角色。我在json配置中使用了这个角色作为我的AccessRoleArn,使json配置部分看起来像:
"AuthenticationConfiguration": {
"AccessRoleArn": "arn:aws:iam::12345:role/service-role/AppRunnerECRAccessRole"
},
我遵循了这个stackoverflow q/a,允许我的用户/组承担AppRunnerECRAccessRole,并将一个策略应用于用户/组,如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::12345:role/my-role",
"arn:aws:iam::12345:role/service-role/AppRunnerECRAccessRole"
]
}
]
}
在这之后,我只能运行:
aws apprunner create-service --cli-input-json file://./myconfig-with-ui-role-arn.json
&成功了!(甚至没有通过eval命令承担该角色(。尽管我给了用户访问这两个角色的权限,但创建仅通过新的AppRunnerECRAccessRole角色起作用。所以我认为主要的答案是通过UI&然后重用其服务角色。