我正在尝试使用 AWS KMS 在核心中加密 asp.net 它在本地系统上工作正常。但是当我们在弹性豆茎上部署时,它们会给出一个例外


public async Task<string> EncryptText(string textToEncrypt, string keyID)
{
if (string.IsNullOrWhiteSpace(textToEncrypt))
{
return "";
}
else
{
var result = "";
var client = new AmazonKeyManagementServiceClient();
var encryptRequest = new Amazon.KeyManagementService.Model.EncryptRequest();
encryptRequest.KeyId = keyID;
var textBytes = Encoding.UTF8.GetBytes(textToEncrypt);
encryptRequest.Plaintext = new MemoryStream(textBytes, 0, textBytes.Length);
var response = await client.EncryptAsync(encryptRequest);
if (response != null)
{
result = Convert.ToBase64String(response.CiphertextBlob.ToArray());
}
return result;
}
}

以下代码完全适用于本地系统,但具有弹性。我无法找出出现此错误的原因

您得到的错误是什么?这很可能是IAM问题。本地框上的IAM用户权限与EC2实例上的实例配置文件不同。

  1. 导航到Elastic Beanstalk>环境>您的环境>配置

  2. 安全性下查找正在使用的IAM实例配置文件

  3. 转到IAM并查找角色。它应该有一个允许使用该密钥加密操作的策略声明。类似于:

{
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*"
],
"Resource": "arn:aws:kms:{my region}:{my account id}:key/{my key id}",
"Effect": "Allow"
}
  1. 同时转到KMS检查密钥策略。它可能看起来像:
{
"Effect": "Allow",
"Principal": {
"AWS": "{my iam instance profile arn}"
},
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*"
],
"Resource": "*"
}

我们需要更多关于错误的细节来正确评估问题。但也许这就是问题所在。

相关内容

最新更新