保守秘密的代价有多高?

本文介绍了如何使用 AWS Secrets Manager 安全地存储和检索密钥,如数据库密码和API密钥,并通过示例展示了如何创建、更新、检索、删除密钥,以及使用Python访问密钥。使用 Secrets Manager 可以集中管理密钥,方便密钥轮换,提高应用安全性。

保守一个秘密需要多少钱?

好吧,在 AWS 中,保守一个秘密的成本是 [here]:

有时,密钥会被硬编码到应用程序中。这通常与用于公开数据的数据库密码或用于签署 OAuth Token以进行访问的密钥有关。这种做法的第一个问题是,每次数据库密码更新时都需要更新应用程序(而且 passport 通常很少更改,因为它可能会导致应用程序部署中断),并且任何有权访问代码的人都可以泄露该密钥(从而入侵数据库或签名Token)。

那么,我们如何创建应用程序,创建代码,以便在需要时可以公开它,但仍然保持密钥的私密性呢?好吧,为了保持它在应用程序外部,我们可以使用某种形式的 HSM(硬件安全模块)。不幸的是,这需要物理访问和物理服务器。不过,现在我们可以在云中运行密钥管理器。

在本教程中,我们将了解如何在云中存储密钥,然后公开它。一个典型的应用是公开数据库的密码。然后,我们可以添加代码来查询云中数据库的密钥密码。此外,如果我们更改数据库的密码,我们将不得不更新应用程序中的代码,而使用密钥的云存储将使我们能够轻松地更新代码。

保守一个秘密

作为人类,我们有秘密。在网络安全中,我们有秘密。在我们的生活中,我们有秘密。但是我们应该把它们放在哪里呢?好吧,AWS Secrets Manager 允许你存储你的秘密,然后将它们用于数据库凭据、API 密钥和 OAuth Token。如果我们想随着时间的推移更改我们的秘密,我们可以实现秘密轮换。创建后,我们就可以在需要时公开我们的秘密。

在图 1 中,我们看到 Alice 更新了数据库上的密码 (1)。然后,她将密钥密码存储在 AWS Secrets Manager 中 (2)。接下来,当 Bob 的应用程序想要使用数据库时,它会从 Secrets Manager 重新获取密码 (3),然后将其应用于访问数据库 (4)。

图 1:使用 AWS Secrets Manager 进行更新

在 AWS 中,我们可以使用 CLI(命令行界面)来创建密钥。在本例中,我们将创建一个名为 my-secret-passphrase 的密钥名称,以及一个值为“Qwerty123”的密钥值:

$ aws secretsmanager create-secret --name my-secret-passphrase \
   --secret-string Qwerty123
{
    "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",
    "Name": "my-secret-passphrase",
    "VersionId": "2d37562d-6d5c-43bf-8e6f-d000d1010ad6"
}

我们现在可以从 AWS 控制台中看到我们的密钥:

保守一个密钥的成本为每月每个密钥 0.40 美元,每次 10,000 次 API 调用 0.05 美元。我们可以使用以下命令列出我们的密钥:

$ aws secretsmanager list-secrets
{
    "SecretList": [\
        {\
            "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",\
            "Name": "my-secret-passphrase",\
            "LastChangedDate": "2022-11-28T11:57:44.314000-08:00",\
            "LastAccessedDate": "2022-11-27T16:00:00-08:00",\
            "SecretVersionsToStages": {\
                "2d37562d-6d5c-43bf-8e6f-d000d1010ad6": [\
                    "AWSCURRENT"\
                ]\
            },\
            "CreatedDate": "2022-11-28T11:57:44.257000-08:00"\
        }\
    ]
}

然后,我们可以使用以下命令来显示密钥的值:

$ aws secretsmanager get-secret-value --secret-id my-secret-passphrase
{
    "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",
    "Name": "my-secret-passphrase",
    "VersionId": "2d37562d-6d5c-43bf-8e6f-d000d1010ad6",
    "SecretString": "Qwerty123",
    "VersionStages": [\
        "AWSCURRENT"\
    ],
    "CreatedDate": "2022-11-28T11:57:44.309000-08:00"
}

为了仅显示密钥,我们执行一个查询:

$ aws secretsmanager get-secret-value --secret-id my-secret-passphrase \
   --query SecretString --output text
Qwerty123

我们可以使用以下命令更改密钥:

$ aws secretsmanager update-secret --secret-id my-secret-passphrase \
   --secret-string Password123
{
    "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",
    "Name": "my-secret-passphrase",
    "VersionId": "ad54e233-c4ed-46f0-9c4d-7d06ba5d16c1"
}

然后显示它已更改:

$ aws secretsmanager get-secret-value --secret-id my-secret-passphrase \
  --query SecretString --output text
Password123

我们可以使用以下命令列出所有以前的密钥:

$ aws secretsmanager list-secret-version-ids --secret-id my-secret-passphrase
{
    "Versions": [\
        {\
            "VersionId": "2d37562d-6d5c-43bf-8e6f-d000d1010ad6",\
            "VersionStages": [\
                "AWSPREVIOUS"\
            ],\
            "LastAccessedDate": "2022-11-27T16:00:00-08:00",\
            "CreatedDate": "2022-11-28T11:57:44.309000-08:00"\
        },\
        {\
            "VersionId": "ad54e233-c4ed-46f0-9c4d-7d06ba5d16c1",\
            "VersionStages": [\
                "AWSCURRENT"\
            ],\
            "LastAccessedDate": "2022-11-27T16:00:00-08:00",\
            "CreatedDate": "2022-11-28T12:05:56.554000-08:00"\
        }\
    ],
    "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",
    "Name": "my-secret-passphrase"
}

然后删除密钥:

$ aws secretsmanager delete-secret --secret-id my-secret-passphrase
{
    "ARN": "arn:aws:secretsmanager:us-east-1:960372818084:secret:my-secret-passphrase-PXQxIK",
    "Name": "my-secret-passphrase",
    "DeletionDate": "2022-12-28T12:14:25.224000-08:00"
}

这将在 30 天后(2022 年 12 月 28 日删除,当前日期为 2022 年 11 月 28 日)删除密钥。通常,删除密钥的时间在 7 到 30 天之间。

在你的收件箱中获取 Prof Bill Buchanan OBE FRSE 的故事

如果我们错误地删除了密钥,我们可以在密钥的“首选项”中显示它,并显示“删除于”:

然后,我们可以看到已删除的密钥:

然后“取消删除”:

如果我们希望在 Python 中查看密钥,我们可以安装:

$ pip install aws-secretsmanager-caching

然后运行以下 Python 代码:

import botocore
import botocore.session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig

client = botocore.session.get_session().create_client('secretsmanager')
cache_config = SecretCacheConfig()
cache = SecretCache( config = cache_config, client = client)
secret = cache.get_secret_string('my-secret-passphrase')
print ("Secret: ",secret)

这将给出:

Secret:  Password123

结论

AWS Secrets Manager 是一种极好的方式,可以为你的应用程序所需的所有密钥(例如数据库和Token)提供一个高度安全的位置。在需要时,我们会更新它们,并在我们的应用程序中找到一个可以查找它们的位置。如果我们发现我们的密钥已被发现,我们可以直接更改它们。除此之外,我们还可以轮换它们,以提高我们的安全性。

  • 原文链接: medium.com/asecuritysite...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
asecuritysite
asecuritysite
江湖只有他的大名,没有他的介绍。