我嘗試擷取或存取加密的 AWS Secret Manager 機密,但我收到 AWS Key Management Service (KMS) 金鑰存取錯誤。
解決方法
如果您因 AWS KMS 金鑰權限問題而無法擷取或存取 Secret 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 KMS 金鑰政策,以擷取加密機密。然後,使用更新的 AWS KMS key 重新加密機密。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
AWS KMS 受管金鑰
如要存取其他帳戶中的機密,請確認機密並未使用 AWS KMS 受管金鑰加密。您無法從其他帳戶存取 AWS KMS 受管金鑰加密的機密。
由於它們是唯讀的,因此您無法編輯 AWS 受管金鑰政策。因此,您無法授予 AWS 受管金鑰政策的跨帳戶存取權。
跨帳戶存取權
對於跨帳戶,確認身分型政策和資源型政策明確允許主體存取 AWS KMS 金鑰。
允許主體存取 AWS KMS key 的身分識別政策範例:
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
}
]
}
允許主體存取 AWS KMS key 的 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 key 重新加密機密
使用 Secret Manager 主控台或 AWS CLI,使用更新的 AWS KMS key 重新加密機密。
Secret Manager 主控台
**注意:**如果您使用 Secret Manager 主控台,則 Secret Manager 會建立新版本的機密,並使用更新的金鑰進行加密。確保使用機密的應用程式具有使用更新密鑰來解密機密的權限。如需詳細資訊,請參閱 Secrets Manager 中的機密加密和解密。
- 開啟 Secrets Manager 主控台。
- 在機密名稱中,選擇您的機密。
- 選擇動作,然後選擇編輯加密金鑰。
- 選取使用新加密金鑰建立新版本的機密,然後選擇儲存。
AWS CLI
從機密的來源帳戶完成步驟 1-3,從另一個帳戶中完成步驟 4:
-
執行 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"}
-
建立名為 creds.txt 的檔案:
cat creds.txt {"CrossAccount":"DefaultEncryption"}
-
執行 update-secret 命令以重新加密金鑰:
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"
}
****注意:****如果您使用客戶自管金鑰,還必須對金鑰擁有 kms:GenerateDataKey 和 kms:Decrypt 許可。
-
從其他帳戶執行 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 Secret Manager 機密