【发布时间】:2021-02-05 18:31:00
【问题描述】:
我正在寻找一个签名的 url,以便我可以创建一个 MQTT 客户端。 为此,我需要一个秘密访问密钥、访问密钥 ID 和会话令牌。由于我的 pod 使用 IRSA,理想情况下,我希望使用我使用 aws sdk 检索的临时凭证来执行此操作。
我尝试了很多东西,这是最新的
import v4 from 'aws-signature-v4';
const role = await sts
.assumeRole({
RoleArn: 'arn:aws:iam::my-acc:role/my-role',
RoleSessionName: 'some-random-session-name',
DurationSeconds: 900,
})
.promise();
const url = v4.createPresignedURL(
'GET',
awsConfig.iotDataEndpoint.toLowerCase(),
'/mqtt',
'iotdevicegateway',
'',
{
key: role.Credentials.AccessKeyId,
secret: role.Credentials.SecretAccessKey,
sessionToken: role.Credentials.SessionToken,
protocol: 'wss',
expires: 900,
region: awsConfig.region,
})
抛出
User: arn:aws:sts::my-acc:assumed-role/my-role/token-file-web-identity is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::my-acc:role/my-role
我确保arn:aws:sts::my-acc:assumed-role/my-role 有权执行sts:AssumeRole 并且与资源存在信任关系。
有什么想法吗?
【问题讨论】:
-
您已包含客户端代码,但未包含
my-role的 Policy JSON,因此没有人可以猜测您的设置有什么问题 -
抱歉,添加了答案。最后是 AssumeRole 政策问题
标签: node.js amazon-web-services kubernetes amazon-iam aws-sdk-nodejs