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

在 SQS 中为无服务器启用静态加密

如何解决在 SQS 中为无服务器启用静态加密

我们正在为我们的应用程序使用无服务器框架和微服务(lambda 函数)。在 serverless.yml 文件中,我们列出了部署时需要创建的资源。

serverles.yml 文件的资源部分如下所示:

resources:
    Resources:
        GatewayResponse:
            Type: "AWS::ApiGateway::GatewayResponse"
            Properties:
                ResponseParameters:
                    gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
                    gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
                ResponseType: EXPIRED_TOKEN
                RestApiId:
                    Ref: "ApiGatewayRestApi"
                StatusCode: "401"
        AuthFailureGatewayResponse:
            Type: "AWS::ApiGateway::GatewayResponse"
            Properties:
                ResponseParameters:
                    gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
                    gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
                ResponseType: UNAUTHORIZED
                RestApiId:
                    Ref: "ApiGatewayRestApi"
                StatusCode: "401"
        SqsQueue:
            Type: "AWS::SQS::Queue"
            Properties:
                QueueName: ${opt:stage}-${opt:product}-sqs-queue
                VisibilityTimeout: 900
                RedrivePolicy:
                    deadLetterTargetArn:
                        Fn::GetAtt:
                        - SqsDeadLetterQueue
                        - Arn
                    maxReceiveCount: 1
        SqsDeadLetterQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: ${opt:stage}-${opt:product}-deadletter-queue
                MessageRetentionPeriod: 1209600

如您所见,我们也在那里创建 SQS 队列资源。最初我们没有在我们的 SQS 中启用休息加密,但现在出现了需求。

我可以进入 AWS 控制台并从那里为我们创建的每个队列手动启用静态加密,但这会很乏味,而且我想将它包含在 serverless.yml 创建中,以便从创建的任何 SQS 资源现在认启用加密。

我想知道我需要在 serverless.yml 的资源部分添加什么。我是否添加 CMK(客户主密钥)别名,我可以使用认 CMK 别名还是需要为此目的生成一个新的 CMK 别名。我是否还需要修改引用 SQS 的其他 lambda 表达式,以便他们能够访问它?

我以前从未这样做过,所以需要细节方面的帮助。

谢谢。

解决方法

要向您的队列添加加密,您必须在模板中向您的队列添加 KmsMasterKeyId。如果您想使用 AWS 托管 CMK,id 将为 alias/aws/sqs(假设两个队列):

resources:
    Resources:
        GatewayResponse:
            Type: "AWS::ApiGateway::GatewayResponse"
            Properties:
                ResponseParameters:
                    gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
                    gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
                ResponseType: EXPIRED_TOKEN
                RestApiId:
                    Ref: "ApiGatewayRestApi"
                StatusCode: "401"
        AuthFailureGatewayResponse:
            Type: "AWS::ApiGateway::GatewayResponse"
            Properties:
                ResponseParameters:
                    gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
                    gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
                ResponseType: UNAUTHORIZED
                RestApiId:
                    Ref: "ApiGatewayRestApi"
                StatusCode: "401"
        SqsQueue:
            Type: "AWS::SQS::Queue"
            Properties:
                QueueName: ${opt:stage}-${opt:product}-sqs-queue
                VisibilityTimeout: 900
                RedrivePolicy:
                    deadLetterTargetArn:
                        Fn::GetAtt:
                        - SqsDeadLetterQueue
                        - Arn
                    maxReceiveCount: 1
                KmsMasterKeyId: alias/aws/sqs
        SqsDeadLetterQueue:
            Type: AWS::SQS::Queue
            Properties:
                QueueName: ${opt:stage}-${opt:product}-deadletter-queue
                MessageRetentionPeriod: 1209600
                KmsMasterKeyId: alias/aws/sqs

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