代码中的 AWS 凭证:如何安全地执行此操作?

问题描述 投票:0回答:1

我正在为游戏公司构建分析功能,我想添加 AWS 集成。分析在后台运行,并且应将保存的数据从玩家的 PC 发送到 S3 存储桶。因此,我创建了一个 IAM 用户,其唯一权限是将对象放入存储桶中。然后,我为 IAM 用户生成了访问密钥和秘密密钥。

我不知道如何在代码中安全地存储凭据。我最大的希望是 SecretsManager,但是要访问 SecretsManager,您需要再次提供凭据,然后您就可以以简洁的 json 形式获取秘密凭据。

我觉得我的处理方式都是错误的,但 AWS 文档非常庞大,我不知道该去哪里查找。

这可行,但将此代码发布到 GitHub 上,任何人都可以将他们想要的任何内容放入您的 S3 存储桶中:

// These are example keys they don't do much
public const string accessKey = "AKIAIOSFODNN7EXAMPLE";
public const string secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";

public AWSCredentials credentials => new BasicAWSCredentials(accessKey, secretKey);

这还不起作用(

AmazonServiceException
),但即使它起作用了,是什么阻止了任何人读取我的密钥?

[Serializable]
private struct CredentialKeys
{
    public string accessKey;
    public string secretKey;
}

public async Task<AWSCredentials> GetCredentials()
{
    var response = // code for getting secret (not sure if Amazon allows me showing it here).
    
    var json = response.SecretString;
    var keys = JsonUtility.FromJson<CredentialKeys>(json);
    return new BasicAWSCredentials(keys.accessKey, keys.secretKey);
}
amazon-web-services amazon-s3 amazon-iam
1个回答
-1
投票

由于安全风险(例如无意中暴露),通常不建议直接在代码中存储凭据。一种常见的方法是使用环境变量来存储 AWS 凭证等敏感信息。这样,您可以将凭据与代码库分开并在外部管理它们。

如果您的应用程序在 AWS 中运行,另一种选择是将 AWS IAM 角色与 EC2 实例或 ECS 任务结合使用。 IAM 角色为您的应用程序提供临时凭证,无需在代码中硬编码凭证。

您还可以考虑对在 AWS 外部运行的应用程序使用 AWS Identity and Access Management (IAM) 角色,这样您就可以安全地分配权限,而无需在代码中暴露凭证。

最后,如果您仍然喜欢使用 AWS Secrets Manager,您可以使用 IAM 角色授予您的应用程序安全访问 Secrets Manager 的权限,而无需对凭证进行硬编码。然后,在运行时从 Secrets Manager 检索凭证。

总体而言,必须优先考虑安全性并考虑可用于安全管理应用程序中的凭据的各种选项。

© www.soinside.com 2019 - 2024. All rights reserved.