AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Token Exchange Service(TES)无法获取凭证。
【以下的问题经过翻译处理】 绅士们,为什么令牌交换服务 (TES) 无法获取凭据? 我在虚拟机上运行的 Ubuntu 20.x.x 上安装了 greengrass。编号项的末尾是从“/greengrass/v2/logs/greengrass.log”获得的错误日志(截断)。谢谢
我所做的或我认为你应该知道的:
- 存在包含 AWSGreengrassResourceAccessRolePolicy 的 GreenGrassServiceRole,以及名称中包含“greengrass”一词的所有其他策略。它还具有如下信任关系。这是在我安装 Greengrass 时创建的,但我添加了其他策略。
{
"版本": "2012-10-17",
“陈述”: [
{
"效果": "允许",
“主要的”: {
“服务”:“greengrass.amazonaws.com”
},
“行动”:“sts:AssumeRole”,
“健康)状况”: {
“字符串等于”:{
“aws:SourceAccount”:“<MY_ACCOUNT_NUMBER>”
},
“ArnLike”:{
“aws:SourceArn”:“<ARN_THAT_SHOWS_MY_REGION_AND_ACC_NUMBER>:*”
}
}
},
{
"效果": "允许",
“主要的”: {
“服务”:“credentials.iot.amazonaws.com”
},
“行动”:“sts:AssumeRole”
}
]
}
aws.greengrass.Nucleus组件通过以下配置更新进行部署。别名也存在。
{
“重置”: [],
“合并”:{
“组件配置”:{
“默认配置”:{
"iotRoleAlias": "GreengrassV2TokenExchangeRoleAlias",
"awsRegion": "us-east-1",
"iotCredEndpoint": "https://sts.us-east-1.amazonaws.com",
“iotDataEndpoint”:“<ENDPOINT_OBTAINED_FROM_IOT_CORE_SETTINGS>”
}
}
}
}
aws.greengrass.TokenExchangeService已部署。- 有一个自定义组件使用 Greengrass SDK 发布到 IoT Core。它具有以下配置更新。
{
“重置”: [],
“合并”:{
“组件依赖”:{
“aws.greengrass.TokenExchangeService”:{
"版本要求": "^2.0.0",
“依赖类型”:“硬”
}
}
}
}
- 有一个来自先前练习的 IoT 策略附加到核心设备(虚拟机上的 Ubuntu)证书。它允许所有
动作。还有另一个与事物证书相关联的“GreengrassTESCertificatePolicyGreengrassV2TokenExchangeRoleAlias”。该策略允许
iot:AssumeRoleWithCertificate
错误日志如下
2022-05-21T21:07:39.592Z [错误] (pool-2-thread-28) com.aws.greengrass.tes.CredentialRequestHandler:从 TES 检索 AwsCredentials 时出错。 {iotCredentialsPath=/role-aliases/GreengrassV2TokenExchangeRoleAlias/credentials, credentialData=获取连接失败}
2022-05-21T21:08:38.071Z [WARN] (pool-2-thread-28) com.aws.greengrass.tes.CredentialRequestHandler:获取凭证时遇到错误。 {iotCredentialsPath=/role-aliases/GreengrassV2TokenExchangeRoleAlias/credentials}
com.aws.greengrass.deployment.exceptions.AWSIotException:无法获得响应
在 com.aws.greengrass.iot.IotCloudHelper.getHttpResponse(IotCloudHelper.java:95)
在 com.aws.greengrass.iot.IotCloudHelper.lambda$sendHttpRequest$1(IotCloudHelper.java:80)
在 com.aws.greengrass.util.BaseRetryableAccessor.retry(BaseRetryableAccessor.java:32)
在 com.aws.greengrass.iot.IotCloudHelper.sendHttpRequest(IotCloudHelper.java:81)
在 com.aws.greengrass.tes.CredentialRequestHandler.getCredentialsBypassCache(CredentialRequestHandler.java:207)
在 com.aws.greengrass.tes.CredentialRequestHandler.getCredentials(CredentialRequestHandler.java:328)
在 com.aws.greengrass.tes.CredentialRequestHandler.getAwsCredentials(CredentialRequestHandler.java:337)
在 com.aws.greengrass.tes.LazyCredentialProvider.resolveCredentials(LazyCredentialProvider.java:24)
在 software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.resolveCredentials(AwsExecutionContextBuilder.java:165)
在 software.amazon.awssdk.awscore.internal.AwsExecutionContextBuilder.invokeInterceptorsAndCreateExecutionContext(AwsExecutionContextBuilder.java:102)
在 software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.invokeInterceptorsAndCreateExecutionContext(AwsSyncClientHandler.java:69)
在 software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:78)
在 software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:175)
在 software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)
在 software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
在 software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)
在 software.amazon.awssdk.services.s3.DefaultS3Client.getBucketLocation(DefaultS3Client.java:3382)
在 com.aws.greengrass.componentmanager.builtins.S3Downloader.lambda$getRegionClientForBucket$2(S3Downloader.java:134)
在 com.aws.greengrass.util.RetryUtils.runWithRetry(RetryUtils.java:50)
在 com.aws.greengrass.componentmanager.builtins.S3Downloader.getRegionClientForBucket(S3Downloader.java:133)
在 com.aws.greengrass.componentmanager.builtins.S3Downloader.getDownloadSize(S3Downloader.java:115)
在 com.aws.greengrass.componentmanager.ComponentManager.prepareArtifacts(ComponentManager.java:420)
在 com.aws.greengrass.componentmanager.ComponentManager.preparePackage(ComponentManager.java:377)
在 com.aws.greengrass.componentmanager.ComponentManager.lambda$preparePackages$1(ComponentManager.java:338)
在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
在 java.base/java.lang.Thread.run(Thread.java:829)
引起:java.net.UnknownHostException:https
在 java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
在 java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
在 java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
在 java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
在 org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
在 jdk.internal.reflect.GeneratedMethodAccessor51.invoke(未知来源)
在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.base/java.lang.reflect.Method.invoke(Method.java:566)
在 software.amazon.awssdk.http.apache.internal.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:80)
在 com.sun.proxy.$Proxy15.connect(未知来源)
在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
在 software.amazon.awssdk.http.apache.internal.impl.ApacheSdkHttpClient.execute(ApacheSdkHttpClient.java:72)
在 software.amazon.awssdk.http.apache.ApacheHttpClient.execute(ApacheHttpClient.java:253)
在 software.amazon.awssdk.http.apache.ApacheHttpClient.access$500(ApacheHttpClient.java:106)
在 software.amazon.awssdk.http.apache.ApacheHttpClient$1.call(ApacheHttpClient.java:232)
在 com.aws.greengrass.iot.IotCloudHelper.getHttpResponse(IotCloudHelper.java:88)
... 还有 27 个
2022-05-21T21:08:38.073Z [错误] (pool-2-thread-28) com.aws.greengrass.tes.CredentialRequestHandler:从 TES 检索 AwsCredentials 时出错。 {iotCredentialsPath=/role-aliases/GreengrassV2TokenExchangeRoleAlias/credentials, credentialData=获取连接失败}
- 语言
- 中文 (简体)
- 最新
- 投票最多
- 评论最多
【以下的回答经过翻译处理】 你好,
错误是 java.net.UnknownHostException: https。这告诉我凭据终端点未正确配置。我在你的配置中看到,你尝试使用STS作为凭据终端点,但这不是正确设置TES的方式。AWS IoT凭据终端点是唯一可以使用的终端点。请查看 https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html 以了解更多信息。通过运行 aws iot describe-endpoint --endpoint-type iot:CredentialProvider 找到正确的终端点。
如果你使用自动配置安装了Greengrass,则所有这些都会正确设置为你。请参阅 https://docs.aws.amazon.com/greengrass/v2/developerguide/quick-installation.html。
你为Greengrass配置的IoT数据和凭据终端点应该只是主机名,不包括任何协议(如 https://)。正确值的示例是 xxxxxx.credentials.iot.us-east-1.amazonaws.com。
