如何在我的项目中使用Amazon Web服务凭据(Access键)? AWS文档使用Access密钥的最佳实践

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

我们希望通过API调用,CLI等,从我们的内部部署基础架构以及AWS云基础架构使用AWS服务。

我们知道,我们可以使用AWS访问密钥,如下所示:

这是一个示例的片段

// Setup AWS SNS
AWS.config.update({
    region: 'eu-west-1',
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});

var sns = new AWS.SNS();
var params = {
    Message: "SMS message test",
    MessageStructure: 'string',
    PhoneNumber: '0045xxxxxxxx',
    Subject: 'Alarm',
    MessageAttributes :{
        'AWS.SNS.SMS.SenderID': {
            'DataType': 'String',
            'StringValue': 'MySender'
        },
        'AWS.SNS.SMS.SMSType': 'Transactional'
    }
};

sns.publish(params, function(err_publish, data) {
    if (err_publish) {}
});

此代码通过环境变量使用访问密钥。这种方法部分被接受,因为您必须修改这些环境变量以更新访问密钥。

那么,以良好方式使用访问密钥的最佳实践或不同方法是什么?

amazon-web-services security credentials
1个回答
2
投票

AWS Documentation

访问密钥包括访问密钥ID(例如,AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如,wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY)。如果您使用AWS软件开发工具包,REST或查询API操作,则使用访问密钥签署您对AWS所做的编程请求。 AWS开发工具包使用您的访问密钥为您签署请求,因此您无需处理签名过程。您也可以手动签署请求。有关更多信息,请参阅Signing AWS API Requests

访问密钥也与命令行界面(CLI)一起使用。使用CLI时,您发出的命令由访问密钥签名。您可以使用命令传递访问密钥,也可以将其存储为计算机上的配置设置。

Temporary access keys, known as temporary security credentials

除了访问密钥ID和秘密访问密钥之外,临时安全凭证还包括在使用临时安全凭证时必须发送给AWS的安全令牌

Advantages

  • 它们是短期的。
  • 它们到期后,它们将不再有效。
  • 您可以在安全性较低的环境中使用临时访问密钥,也可以将其分发以授予用户对AWS账户中资源的临时访问权限。

例如,您可以授予其他AWS账户中的实体访问您的AWS账户中的资源(跨账户访问权限)。您还可以授予没有AWS安全凭证的用户访问您的AWS账户(联盟)中的资源的权限。有关更多信息,请参阅IAM用户指南中的Temporary Security Credentials


Approaches for using Access keys

  • 访问环境变量中的键

这种方法在开发和测试环境中最常见,因为它们将使用近距离范围测试其开发,同样适用于我们的应用程序部署在内部部署基础架构中的情况。

通过环境变量(NodeJs)使用Access键

// Setup AWS SNS
AWS.config.update({
    region: 'eu-west-1',
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});

var sns = new AWS.SNS();
var params = {...});

sns.publish(params, function(err_publish, data) {...});

  • 通过实例元数据访问密钥

这是在EC2或容器中使用Access密钥的最安全方式,因为您不需要在代码和环境变量中放置任何Access密钥。

从实例元数据中检索安全凭证

以下命令检索名为s3access的IAM角色的安全凭据。

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

以下是输出示例

{
    "Code" : "Success",
    "LastUpdated" : "2012-04-26T16:39:16Z",
    "Type" : "AWS-HMAC",
    "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "Token" : "token",
    "Expiration" : "2017-05-17T15:09:54Z"
}

IAM Roles

IAM角色提供了一种良好且安全的方式来授予您的服务权限。

IAM角色控制台:这就是它的样子

enter image description here

IAM角色允许您描述具有特定权限的策略。该角色可以附加到EC2实例,并自动使用这些权限授予其中的服务。因此,我们可以执行API调用而无需放入Access键:

var s3 = new AWS.S3({params:{Bucket: 'bucketname', Key: 'filename'}});
var body = fs.createReadStream('file_to_upload');

s3.upload({Body:body})
.on('httpUploadProgress',function(evt){
    console.log(evt);
})
.send(function(err,data){
    console.log(err,data);
});

如您所见,该代码中有任何Access键,因为SDK将从/latest/meta-data/iam/security-credentials/s3access获取Access密钥。


  • 在命名配置文件中访问密钥

命名配置文件用于CLI(命令行界面),因此您可以创建具有不同用途的配置文件。例如,您可以使用特定区域的AWS访问密钥。

AWS CLI支持存储在配置和凭证文件中的命名配置文件。您可以使用带有--profile选项的aws configure或通过向配置和凭证文件添加条目来配置其他配置文件。

以下示例显示了包含两个配置文件的凭证文件:

~/.aws/credentials

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

每个配置文件使用不同的凭证 - 可能来自两个不同的IAM用户 - 并且还可以使用不同的区域和输出格式。

~/.aws/config

[default]
region=us-west-2
output=json

[profile user2]
region=us-east-1
output=text

在AWS CLI中使用配置文件

$ aws ec2 describe-instances --profile user2

上面的命令将使用配置文件user2中的凭据


Best practices for using Access keys

Remove (or Don't Generate) Account Access Key

需要访问密钥才能使用AWS Command Line Tools,AWS开发工具包或直接API调用对您发出的请求进行签名。拥有AWS账户root用户访问密钥的任何人都可以无限制地访问您帐户中的所有资源,包括结算信息。您无法限制AWS账户root用户的权限。


Use Temporary Security Credentials (IAM Roles) Instead of Long-Term Access Keys

在许多情况下,您不需要永不过期的长期访问密钥(与IAM用户一样)。相反,您可以创建IAM角色并生成临时安全凭证。临时安全证书由访问密钥ID和秘密访问密钥组成,但它们还包括一个安全令牌,用于指示凭据何时到期。


Manage IAM User Access Keys Properly

如果确实需要创建用于以编程方式访问AWS的访问密钥,请创建IAM用户并仅向该用户授予他或她所需的权限。然后为该用户生成访问密钥。有关详细信息,请参阅IAM用户指南中的Managing Access Keys for IAM Users

使用访问键时的注意事项

  • 不要将访问密钥直接嵌入代码中。
  • 对不同的应用程序使用不同的访问键
  • 定期轮换访问密钥。
  • 删除未使用的访问密钥
  • 为最敏感的操作配置多重身份验证。

Resources

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