问题标签 [amazon-kms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
260 浏览

node.js - 解密来自 aws KMS 的响应

如何从 KMS 响应中获取我的解密结果。以下是 KMS 的回复,这里我如何从明文中获取我的结果。

下面的结果是 json.stringify(kmsresponse)。下面给出的是一个示例值。

0 投票
0 回答
204 浏览

amazon-web-services - 使用 AWS 控制台将文件上传到 s3 存储桶,该控制台具有拒绝条件以匹配“s3:x-amz-server-side-encryption”:“aws:kms”

我正在尝试将文件上传到 S3 存储桶,并将默认加密启用为 SSE-KMS,并使用 AWS 控制台向存储桶策略发送拒绝声明,但是,我收到拒绝访问错误。如果我从存储桶策略中删除拒绝条件,我可以使用 AWS 控制台将文件上传到 S3。

我知道这可以通过使用 aws cli 来实现,--sse aws:kms --sse-kms-key-id <kms-key-id>但是我想知道有没有办法通过AWS 控制台上传文件?

桶策略 -->

KMS 政策 -->

IAM 角色政策 -->

0 投票
2 回答
102 浏览

php - PHP - 如何缓存从 AWS KMS Parameter Store 检索的数据库凭证

我正在运行一个 PHP 应用程序,该应用程序使用用户名和密码连接到 RDS 数据库以向客户端提供数据。使用 AWS SSM 客户端从 AWS KMS 检索用户名和密码作为加密字符串。我对 PHP 应用程序的每个请求都执行此操作,以打开与数据库的连接。

所以流程看起来像这样

传入请求 -> 从 AWS 检索数据库凭证 -> 打开数据库连接 -> 查询 -> 返回数据

在此流程中,每个请求都会发送到 AWS 以获取数据库凭证,使用 KMS 对安全字符串进行解密,最终结果是 KMS 的高使用率导致更高的账单。它还为每个 API 请求引入了延迟。

我想知道是否有一些 PHP 缓存库可以用来在 EC2 实例本地安全地存储凭据,这样我就不需要一直获取它。

我阅读了很多论坛,我看到有些人说将它们存储在 root 之外的文件中,甚至 .env 之外的 root 也可以,其他人说使用 memcache,但大多数人说缓存凭证只是一种不可行的模式。

我知道没有 100% 安全这样的事情,但是任何关于缓存凭据的建议以及用于 PHP 的流行工具是什么都将不胜感激。

0 投票
2 回答
475 浏览

python - 将 AWS KMS 非对称密钥签名/验证签名编码为 base64 并验证

我正在使用 AWS KMS 非对称 ECC (ES256) 密钥在 Python3 中使用 API 调用来签名和验证令牌。响应返回

}

如果我使用 AWS CLI,则响应“签名”是 base64 编码的:

每当我尝试base64.urlsafe_b64encode(string)使用 Python3 中的 API 响应对“签名”进行 base64 编码时,我都无法验证签名。这是我收到的错误示例:

调用验证操作时发生错误(InvalidKeyUsageException):asn1:结构错误:标签不匹配(16 vs {class:1 tag:2 length:39 isCompound:true}){optional:false explicit:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} ecdsaSignature @2

如何对从 API 返回的“签名”字节字符串进行 base64 编码并且仍然能够验证?

更新:

如果我更新到base64.b4encode而不是base64.urlsafe_encode我得到相同的结果:

日志消息返回:

{“asctime”:“2021-04-03 19:40:27,593”,“levelname”:“INFO”,“name”:“util.sign”,“lineno”:214,“message”:null,“env ": "local", "KeyId": "arn:aws:kms:us-east-1:000000000000:key/309d8dc5-409e-4f57-96a8-c71223c84dc2", "签名": "b'0E\x02!\ x00\xcc\x82\xf4$@?\x9e\n\xd7$\x94\x9f.\x1d5\x19{W\x1e\xcff\x8b&\xf0\xef\x88\xcf^"\xf6\xa4\x1b \x02 \x0c\x18\xab?\x93\xd5\x88Cx\xf6\x0c\x1b\xcf\xd9\xd9\xd2\xd4"\xcf\x94\xede_>\x8c\x01~J\xea\x0ezB' ", "SigningAlgorithm": "ECDSA_SHA_256", "ResponseMetadata": {"HTTPStatusCode": 200, "HTTPHeaders": {"content-type": "application/x-amz-json-1.1", "content-length": "233",“连接”:“关闭”,“访问控制允许来源”:“*”,“访问控制允许方法”:“HEAD,GET,PUT,POST,DELETE,OPTIONS,PATCH”,“访问-control-allow-headers": "授权、内容类型、内容长度、内容 md5、缓存控制、x-amz-content-sha256、x-amz-date、x-amz-security-token、x -amz-user-agent、x-amz-target、x-amz-acl、x-amz-version-id、x-localstack-target、x-amz-tagging"、"访问控制公开标头": “x-amz-version-id”、“日期”:“星期六,2021 年 4 月 3 日 19:40:27 GMT”、“服务器”:“hypercorn-h11”}、“RetryAttempts”:0}}补丁”,“访问控制允许标题”:“授权,内容类型,内容长度,内容md5,缓存控制,x-amz-content-sha256,x-amz-date,x-amz-安全令牌、x-amz-user-agent、x-amz-target、x-amz-acl、x-amz-version-id、x-localstack-target、x-amz-tagging"、"访问控制-暴露头”:“x-amz-version-id”,“日期”:“星期六,2021 年 4 月 3 日 19:40:27 GMT”,“服务器”:“hypercorn-h11”},“重试尝试”:0} }补丁”,“访问控制允许标题”:“授权,内容类型,内容长度,内容md5,缓存控制,x-amz-content-sha256,x-amz-date,x-amz-安全令牌、x-amz-user-agent、x-amz-target、x-amz-acl、x-amz-version-id、x-localstack-target、x-amz-tagging"、"访问控制-暴露头”:“x-amz-version-id”,“日期”:“星期六,2021 年 4 月 3 日 19:40:27 GMT”,“服务器”:“hypercorn-h11”},“重试尝试”:0} }“星期六,2021 年 4 月 3 日 19:40:27 GMT”,“服务器”:“hypercorn-h11”},“重试次数”:0}}“星期六,2021 年 4 月 3 日 19:40:27 GMT”,“服务器”:“hypercorn-h11”},“重试次数”:0}}

验证错误:

“stacktrace”:“调用验证操作时发生错误(InvalidKeyUsageException):asn1:结构错误:标签不匹配(16 vs {class:1标签:13长度:69 isCompound:false}){可选:false显式:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} ecdsaSignature @2"

client.verify 要求签名为字节https://boto3.amazonaws.com/v1/documentation/api/1.11.4/reference/services/kms.html#KMS.Client.verify

如果我离开,.encode()我会得到同样的结果:

“stacktrace”:“调用验证操作时发生错误(InvalidKeyUsageException):asn1:结构错误:标签不匹配(16 vs {class:1标签:13长度:69 isCompound:false}){可选:false显式:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} ecdsaSignature @2"

笔记:

如果我在没有 base64 编码的情况下将 client.sign 响应“签名”传递给 client.verify,则验证通过。

0 投票
0 回答
72 浏览

rsa - 有没有办法使用 AWS-KMS 密钥连接到 Snowflake?

Snowflake 在此处描述了使用 RSA 身份验证:

https://docs.snowflake.com/en/user-guide/key-pair-auth.html

但似乎假设一个本地生成的 RSA-2048 密钥,存储在用户机器上。问题是我有一个无服务器设置。有没有办法使用 AWS 生成的(和 AWS 存储的)KMS 密钥来登录雪花?

我正在使用 golang 和gosnowflake似乎需要包含实际私钥的 DSN 配置的包: https ://pkg.go.dev/github.com/snowflakedb/gosnowflake#hdr-JWT_authentication

如何从 KMS 获取私钥?还是有更好的方法来做到这一点?

0 投票
0 回答
116 浏览

node.js - 是否有使用适用于 JavaScript 的 AWS 加密 SDK 进行客户端加密的工作示例?

我需要加密单个值,并希望使用适用于 JavaScript 的 AWS 加密 SDK 进行客户端加密。似乎不需要调用KMS服务来加密。想避免这种情况。希望所有加密都在本地进行。我找不到如何使用此 SDK 的工作示例。有一些示例代码,但似乎不完整。https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/js-examples.html

这是它的 github 存储库:https ://github.com/aws/aws-encryption-sdk-javascript/blob/master/README.md

没有看到任何使用文档。

0 投票
2 回答
856 浏览

amazon-web-services - AWS KMS:CMK 和密钥材料有什么区别?

在以下文档中,AWS 引用了一个名为key material.

AWS KMS文档:使用自定义密钥存储

AWS KMS 支持由 AWS CloudHSM 集群支持的自定义密钥存储。当您在自定义密钥存储中创建 AWS KMS 客户主密钥 (CMK) 时,AWS KMS 会为 CMK 生成不可提取的密钥材料并将其存储在您拥有和管理的 AWS CloudHSM 集群中。

以 KMS 中的非对称加密密钥对为例,什么是密钥材料?什么是 CMK?CMK 和密钥材料有什么区别?

0 投票
1 回答
107 浏览

security - 如何将 ECDSA secp256k1 PEM 格式的私钥转换为二进制?

我正在尝试将我的 secp256k1 私钥导入 AWS KMS。我的密钥是 PEM 格式的,AWS KMS 说'The key material must be in binary format'。如何将我的 ECDSA secp256k1 PEM 格式的私钥转换为二进制?

0 投票
1 回答
399 浏览

amazon-web-services - Pyspark 数据帧从一个存储桶中读取,并在同一作业中使用不同的 KMS 密钥写入另一个存储桶

需要一点帮助来为下面的我的用例找到更好的解决方案。

我有包含输入数据的 S3 存储桶,它使用KMS KEY 1加密

所以我可以使用将 KMS KEY 1 设置为我的 spark 会话"spark.hadoop.fs.s3.serverSideEncryption.kms.keyId"

并能够读取数据,

现在我想将数据写入另一个 S3 存储桶,但它是使用KMS KEY 2加密的*

所以我目前正在做的是,使用 Key1 创建 spark 会话并读取数据帧并将其转换为 Pandas 数据帧并终止 spark 会话并使用 KMS KEY2 在相同的 AWS 胶水作业中重新创建 spark 会话并转换 pandas 数据在上一步中创建以触发数据帧并写入输出 S3 存储桶。

但这种方法有时会导致数据类型问题。有没有更好的替代解决方案来处理这个用例?

提前致谢,非常感谢您的帮助。

0 投票
1 回答
60 浏览

amazon-s3 - 使用拉取方法的跨账户代码管道

我正在尝试创建一个跨帐户代码管道,并且没有适合这种情况的文档。

  1. Account - A 有 s3 存储桶和 yaml 文件
  2. Account-B 将拥有 Codepipeline

帐户 B 代码管道应在帐户 A 的源阶段将 S3 作为源,并在部署阶段使用 cloudformation 部署方法。有人可以帮助了解完成此任务必须满足的角色和其他需求吗?