在没有会话的情况下获取 aws-sdk 参数

分享于2022年07月17日 angular aws-sdk aws-sdk-js aws-sdk-nodejs 问答
【问题标题】:在没有会话的情况下获取 aws-sdk 参数(get aws-sdk parameters without session)
【发布时间】:2022-01-23 18:18:37
【问题描述】:

我想知道这是否可能 - 我需要从 AWS 商店获取参数以在每个环境中使用某些值,而无需每次都重新部署 Angular 应用程序来获取 appSettings.json 中的更改

我有以下代码在 SessionToken 过期之前运行良好。这是一个公共站点,因此没有经过身份验证的用户。

import { Injectable } from '@angular/core';
import { SSMClient, GetParameterCommand, GetParameterCommandInput } from '@aws-sdk/client-ssm';
import { fromTemporaryCredentials } from '@aws-sdk/credential-providers';

@Injectable({
  providedIn: 'root'
})
export class SsmService {

  constructor() {}

  creds = {
    accessKeyId: 'accessKeyId',
    secretAccessKey: 'secretAccessKey',
    sessionToken: 'sessionToken'
  }

  tempCreds = fromTemporaryCredentials({
    masterCredentials: this.creds,
    params: {
      RoleArn: 'arn:RoleArn',
      RoleSessionName: 'RoleSessionName',
      DurationSeconds: 3600
    },
    clientConfig: {
      region: 'eu-west-2'
    }
  });

  client: SSMClient = new SSMSClient(
  {
    region: 'eu-west-2',
    credentials: this.tempCreds
  });

  async getParameterValue(name: string): Promise {
    const input: GetParameterCommandInput = {
      Name: name
    }

    const command = new GetParameterCommand(input);

    return await this.client.send(command).Parameter?.Value ?? '';
  }
}

没有SessionToken可以获取参数吗?


【解决方案1】:

没有。如果没有有效的会话令牌,就无法调用 AWS API。

我有以下代码在 SessionToken 过期之前运行良好。

为什么不在旧令牌过期之前从 STS 获取新的会话令牌?

在没有凭据和身份验证的情况下获取配置数据的一种方法是从本地配置文件加载它们(例如,参见 https://jooooel.com/angular-config-from-an-external-source/ )。当然,这不能用于加载凭据或其他机密数据。这个想法是将不机密的配置和设置数据存储在一个 json 文件中,并在应用程序启动之前动态加载它。每个环境都可以有不同的配置文件。