如何解決存取加密的 AWS Secrets Manager 機密的問題?

2 分的閱讀內容
0

我想擷取或存取 AWS Secrets Manager 機密,但收到錯誤。

解決方法

如果您無法擷取或存取 Secrets Manager 機密,可能會看到下列其中一個錯誤:

  • "You can't access a secret from a different AWS account if you encrypt the secret with the default KMS service key."
  • "Access to KMS is not allowed"
  • "InternalFailure"
  • "An unknown error occurred"
  • "Access to KMS is not allowed.This version of secret is not encrypted with the current KMS key."

若要對這些錯誤進行疑難排解,請完成下列步驟。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新的 AWS CLI 版本

在存取其他帳戶中的機密時,確認機密並未使用 AWS KMS 受管金鑰加密。

AWS 受管金鑰政策無法編輯,因為它們是唯讀的。不過,您可以檢視 AWS Key Management Service (KMS) 受管金鑰和客戶自管金鑰政策。由於無法編輯 AWS KMS 受管金鑰政策,因此無法為這些關鍵政策授予跨帳戶許可。其他 AWS 帳戶無法存取使用 AWS KMS 受管金鑰加密的 Secrets Manager。

對於跨帳戶,確認身分型政策和資源型政策允許主體存取 AWS KMS 金鑰。

身分政策應允許主體存取 AWS KMS 金鑰,類似下列情況:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
    }
  ]
}

資源型政策應允許主體存取 AWS KMS 金鑰,類似下列情況:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::AccountID:user/UserName",
      "arn:aws:iam::AccountID:role/RoleName"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

AWS KMS 金鑰更新後,確認機密已使用新的 AWS KMS 金鑰加密。

使用 AWS CLI 更新與 Secrets Manager 機密關聯的 AWS KMS 金鑰,不會使用新的 KMS 金鑰重新加密該機密的目前或舊版本。這意味著外部帳戶 (也稱為跨帳戶) 無法存取機密,因為機密尚未使用新的 AWS KMS 金鑰重新加密。您必須使用新的 AWS KMS 金鑰重新加密機密,才能從跨帳戶擷取機密值。

**注意:**依預設,使用 Secrets Manager 主控台變更與機密關聯的 AWS KMS 金鑰會建立新版本的機密,並使用新的 AWS KMS 金鑰加密。如需詳細資訊,請參閱 AWS Secrets Manager 中的機密加密和解密

使用新的 AWS KMS 金鑰重新加密機密。

依照下列步驟使用 AWS 管理主控台或 AWS CLI 以新的 AWS KMS 金鑰對機密重新加密。

AWS 管理主控台

1.    開啟 Secrets Manager 主控台

2.    在機密名稱中,選擇您的機密。

3.    選擇動作,然後選擇下拉式清單,選取 AWS KMS 金鑰,選取使用新加密金鑰建立新版本的機密碼核取方塊,然後選擇儲存

AWS CLI

從機密所在的來源帳戶執行下列步驟。

1.    執行與下列類似的 AWS CLI 命令 get-secret-value

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    建立名為 creds.txt 的檔案。

$ cat creds.txt

    {"CrossAccount":"DefaultEncryption"}

3.    執行 AWS CLI update-secret 命令對加密金鑰重新加密,如下所示:

.    **注意:**如果您使用客戶自管金鑰,還必須對金鑰擁有 kms:GenerateDataKeykms:Decrypt 許可。

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt

    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

4.    從跨帳戶執行 AWS CLI 命令 get-secret-value,如下所示:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile

    {"CrossAccount":"DefaultEncryption"}

相關資訊

如何在 AWS Secrets Manager 主控台中使用資源型政策來安全地跨 AWS 帳戶存取機密

如何在 AWS 帳戶之間共用 AWS Secrets Manager 機密?

對於不同帳戶中的使用者獲得 AWS Secrets Manager 機密的許可

AWS 官方
AWS 官方已更新 2 年前