我有一个boto3客户端:
boto3.client('kms')
Run Code Online (Sandbox Code Playgroud)
但它发生在新机器上,它们动态地打开和关闭.
if endpoint is None:
if region_name is None:
# Raise a more specific error message that will give
# better guidance to the user what needs to happen.
raise NoRegionError()
Run Code Online (Sandbox Code Playgroud)
为什么会这样?为什么只有部分时间?
我正在使用KMS库使用AWS SDK.我想使用async和await而不是回调.
import AWS, { KMS } from "aws-sdk";
this.kms = new AWS.KMS();
const key = await this.kms.generateDataKey();
Run Code Online (Sandbox Code Playgroud)
但是,当包含在异步函数中时,这不起作用.
我怎么能在这里使用async并等待?
使用AWS CLI从命令行解密密文时,密文会被解密而不会出现问题:
$ aws kms decrypt --ciphertext-blob fileb://encrypted-secrets --output text --query Plaintext --region us-east-1 | base64 --decode > decryped-secrets
Run Code Online (Sandbox Code Playgroud)
当尝试从js脚本执行此操作时,此解密操作也在本地工作:
#!/usr/local/bin/node
const fs = require('fs');
const AWS = require('aws-sdk');
const kms = new AWS.KMS({region:'us-east-1'});
const secretPath = './encrypted-secrets';
const encryptedSecret = fs.readFileSync(secretPath);
const params = {
CiphertextBlob: encryptedSecret
};
kms.decrypt(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
const decryptedScret = data['Plaintext'].toString();
console.log('decrypted secret', decryptedScret);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,当在AWS Lambda函数的上下文中尝试使用与上述几乎完全相同的代码时,调用该函数会导致超时:
'use strict';
const zlib = require('zlib');
const mysql …
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-sdk aws-lambda aws-kms aws-sdk-nodejs
亚马逊称该
加密和解密是透明处理的,因此您无需修改应用程序即可访问数据
我的应用程序(Rails,MySQL,Elasticsearch)构建了大量图形,因此查询了大量数据.根据我之前的数据库加密经验,它确实影响了数据检索速度(因为我们只能说在读取和解密后记录匹配条件).
有没有相关的基准?或者您可能已经使用AWS的这种服务器端加密?我是否需要担心性能变化?
另外,我不太清楚是否可以以相同的"透明"方式加密Elasticsearch数据.我也会用你的建议
我有代码可以检索使用亚马逊的 aws kms 加密功能加密的字符串。我想调用 aws kms 解密来取回未加密的值,但我想在不将字符串写入二进制文件的情况下执行此操作。我发现的所有示例都假设您将使用 linux 的 base64 命令或 Window 的 certutil 命令将 base64 编码的加密值转换为二进制文件。我正在尝试在 Windows 系统上执行此操作。在我看来你应该能够运行:
aws kms encrypt --key-id <mykey> --plaintext "mysecret"
Run Code Online (Sandbox Code Playgroud)
这对我来说产生了这个结果:
{
"KeyId": "arn:aws:kms:us-east-1:192491131326:key/<mykey>",
"CiphertextBlob": "AQICAHjQ7sViXQdeS4wWbFZpkOQWvCdNXqiy4Cnz0/xEBe39SQGz0vofeAo0+SyOXv172fqkAAAAZjBkBgkqhkiG9w0BBwagVzBVAgEAMFAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMhchHh0ugGzwRTC4gAgEQgCMlkhYlCYk2SfYIkfQ6ruwA71KBcN7ih/OPzSE86OT/eBOz3Q=="
}
Run Code Online (Sandbox Code Playgroud)
然后我应该能够运行:
aws kms decrypt --ciphertext-blob AQICAHjQ7sViXQdeS4wWbFZpkOQWvCdNXqiy4Cnz0/xEBe39SQGz0vofeAo0+SyOXv172fqkAAAAZjBkBgkqhkiG9w0BBwagVzBVAgEAMFAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMhchHh0ugGzwRTC4gAgEQgCMlkhYlCYk2SfYIkfQ6ruwA71KBcN7ih/OPzSE86OT/eBOz3Q==
Run Code Online (Sandbox Code Playgroud)
取回结果。但到目前为止,我一直无法得到任何东西,除了:
An error occurred (InvalidCiphertextException) when calling the Decrypt operation:
Run Code Online (Sandbox Code Playgroud)
是否有一些参数可以传递给解密命令,以便它解密这个字符串?
我正在尝试设置aws rds copy-db-snapshot
使用KMS加密密钥的最小权限:
$ aws rds copy-db-snapshot --source-db-snapshot-identifier rds-backup-share-
mysql --target-db-snapshot-identifier rds-backup-share-mysql-reencrypted --kms-key-id <kms-arn>
Run Code Online (Sandbox Code Playgroud)
(其中的所有内容都<>
被我删除并包含有效值.)
不幸的是我收到此错误:
An error occurred (KMSKeyNotAccessibleFault) when calling the CopyDBSnapshot operation: The target snapshot KMS key [<kms-arn>] does not exist, is not enabled or you do not have permissions to access it.
Run Code Online (Sandbox Code Playgroud)
目前我允许这些行动:
"Action": [
"kms:ReEncrypt*",
"kms:ListKeys",
"kms:ListAliases",
"kms:GenerateDataKey*",
"kms:Encrypt",
"kms:DescribeKey",
"kms:Decrypt"
],
Run Code Online (Sandbox Code Playgroud)
如果我用它替换它kms:*{code}
,它是有效的,所以它必须是一个权限问题.
我试图通过CloudTrail找出正确的权限,但它只包含相同的无用错误消息.
所以我的实际问题:
编辑:这是--debug
启用日志输出的底部:
2017-08-22 17:15:37,521 - MainThread - botocore.endpoint - DEBUG …
Run Code Online (Sandbox Code Playgroud) 我需要开发一种解决方案,以便在AWS中安全地存储对称和非对称密钥.这些密钥将由EC2和Lambdas上运行的应用程序使用.应用程序需要设置策略,以允许应用程序或lambda将密钥从密钥库中提取出来.密钥存储还应该管理密钥到期,在密钥到期时通知各个人.初始密钥交换是在我公司与其合作伙伴之间进行的,这意味着我们可能拥有密钥对的公钥或私钥,具体取决于数据传输方向.
我们已经看过KMS但是从我所看到的KMS不支持非对称密钥.我也在网上看到有些人正在使用S3(受KMS保护)或参数存储来存储密钥,但这并没有解决密钥管理的问题.
你们对此有什么想法吗?甚至是SaaS/PaaS建议?
amazon-ec2 public-key-encryption amazon-web-services aws-lambda aws-kms
在 AWS KMS 中运行 terraform 以创建密钥策略我收到错误:
有很多关于这个问题的帖子,但没有任何帮助。所以,我的 kms.tf 文件如下:
provider "aws" {
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
region = "${var.aws_region}"
}
resource "aws_kms_key" "dyn_logs_server_side_cmk" {
description = "dyn-logs-sse-cmk-${var.environment}"
enable_key_rotation = "true"
policy = <<EOF
{
"Version":"2015-11-17",
"Statement":[
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::${var.account_id}:root"},
"Action": "kms:*",
"Resource": "*"
}
]
}EOF
}
Run Code Online (Sandbox Code Playgroud)
这就是我在输出之后看到的
terraform 应用“dyn-vpc.plan”
aws_kms_key.dyn_logs_server_side_cmk: Creating...
arn: "" => "<computed>"
description: "" => "dyn-logs-server-dyn"
enable_key_rotation: "" => "true"
is_enabled: "" => "true"
key_id: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 aws-sdk for Javascript 从 AWS Secret Manager 检索秘密值,我正在使用 Secret Manager 提供的代码片段,我已将此代码包含在 Lambda 函数中,但我看不到任何已定义的控制台日志回调函数里面。这是 lambda 代码:
exports.handler = async (event, context) => {
const AWS = require('aws-sdk');
const client = new AWS.SecretsManager({ region: "eu-west-2" });
let secret;
let decodedBinarySecret;
console.log('STARTED');
client.getSecretValue({ SecretId: "MagellanDev" }, function (err, data) {
if (err) {
console.log('Got Error: ', err.code);
throw err;
}
else {
if ('SecretString' in data) {
secret = data.SecretString;
} else {
let buff = new Buffer(data.SecretBinary, 'base64');
decodedBinarySecret = buff.toString('ascii'); …
Run Code Online (Sandbox Code Playgroud) javascript amazon-web-services aws-lambda aws-kms aws-secrets-manager
aws-kms ×10
aws-lambda ×3
aws-sdk ×2
amazon-ec2 ×1
amazon-rds ×1
boto3 ×1
javascript ×1
linux ×1
mysql ×1
node.js ×1
python ×1
security ×1
terraform ×1