微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CDK:如何获取 apigateway 键值即 x-api-key: *20 Chars*

如何解决CDK:如何获取 apigateway 键值即 x-api-key: *20 Chars*

我不知道如何从 apigateway 密钥中获取 api 密钥。我可以得到它的 ID 和它的 ARN,但不能得到它的值。我知道您可以在创建密钥时指定该值,但不能在创建后如何检索它——登录 AWS GUI 并通过这种方式找到它。

我查看了 aws-apigateway.ApiKey 的文档,但找不到任何获取值的方法https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigateway.ApiKey.html 我还查看了 kms 键,因为您可以获得它们的值,但我不知道它是否可用于 API Gateway 使用计划的上下文(未包含在下面的代码中)。

无法获取值,有没有办法生成一个不会改变,或者会持久化的值?我正在使用临时 Jenkins 节点来运行 CDK。

    const apiGateway  = require('@aws-cdk/aws-apigateway');
...
    const apiKey = new apiGateway.ApiKey(this,'api-key',{
      apiKeyName: 'my-api-key',});
...
    new cdk.CfnOutput(this,'x-api-key-apiKey_id',{
      value: apiKey.keyId
      });
    new cdk.CfnOutput(this,'x-api-key-apiKey_keyArn',{
      value: apiKey.keyArn
      });

解决方法

如果没有自定义资源,我们将无法通过 cdk/cloudformation 检索自动生成的密钥。但是我们可以生成密钥,将其存储在秘密管理器或 ssm 秘密中,并使用它来创建 api 密钥。

const secret = new secretsmanager.Secret(this,'Secret',{
    generateSecretString: {
        generateStringKey: 'api_key',secretStringTemplate: JSON.stringify({ username: 'web_user' }),excludeCharacters: ' %+~`#$&*()|[]{}:;<>?!\'/@"\\',},});
this.restApi.addApiKey('ApiKey',{
    apiKeyName: `web-app-key`,value: secret.secretValueFromJson('api_key').toString(),});
,

我将使用 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SecretsManager.html#getRandomPassword-property 生成 20 个字符并设置 API 密钥。由于我的堆栈之外没有任何东西需要密钥,因此我可以在每次部署时重新生成它并更新我的资源。但是,如果堆栈之外的东西需要密钥,那么使用 Balu 的答案是最好的选择。

这样做的原因是保密会产生与之相关的成本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。