Я использую свой AWS KMS CMK для шифрования и AWS SecretsManager Secret, но мой коллега может видеть секретное значение !!
- Моя политика в отношении моего KMS CMK гласит, что только я могу делать
kms:Decrypt
. - My coworker (who does not have those permissions on my CMK), is able to...
- Open the AWS Console to SecretsManager >>>
- Нажмите
Retrieve Secret Value
››› - И посмотрите мою секретную ценность!
Есть идеи, почему?
Технические подробности:
Я использую AWS SAM CLI для развертывания этого.
Вот мой шаблон AWS SAM:
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Parameters:
SecretValue:
Type: String
KmsCmkId:
Type: String
Resources:
MySecret:
Type: AWS::SecretsManager::Secret
Properties:
SecretString:
Ref: SecretValue
KmsKeyId: !Ref KmsCmkId
Я собираю и развертываю его с помощью этого:
sam build ; sam deploy --guided --parameter-overrides SecretValue=ABC KmsCmkId=REDACTED
Моя текущая отладка:
Я искал
serverfault.com
и практически не получил результатов. Я искал переполнение стека и нашел только одно сообщение, которое, похоже, связано, но проблема не сформулирована, и решение не в том, что происходит в моем случае: AWS KMS CMK для шифрования и дешифрования с помощью симметричного и асимметричногоЯ использую симметричный CMK, потому что он требует SecretsManager. (SecretsManager не позволяет использовать асимметричные CMK для шифрования секретных значений).
Я подтвердил, что нажатие кнопки
Retrieve Secret Value
в консоли AWS SecretsManager действительно выполняет вызов API сsecretsmanager:GetSecretValue
.AWS говорит, что
secretsmanager:GetSecretValue
должен работать только в том случае, если вызывающий также имеетkms:Decrypt
на CMK, который использовался для шифрования секрета (что имеет смысл). (См. https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)Я подтвердил, что моя симметричная KMS CMK действительно используется для шифрования секрета.
Мой коллега НЕ вошел в AWS с учетной записью root. Он вошел в систему под своей учетной записью. У него есть множество разрешений, потому что он администратор, но я не вижу причин, почему это должно позволить ему использовать мой CMK.
Если вам интересно, почему у моего коллеги есть действия KMS для ключевых администраторов, то это потому, что он наш системный администратор.
Политика моего KMS CMK была автоматически сгенерирована хорошим мастером, который вы выполняете в Консоли AWS при создании CMK.
Примечание. Будьте осторожны, не путайте
kms:Get*
операции сsecretsmanager:Get*
операциями.Вот политика моего KMS CMK:
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REDACTED:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::REDACTED:user/MY_COWORKER"
]
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REDACTED:user/ME"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REDACTED:user/ME"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
*
разрешения на все службы? Например, могут ли они получить доступ к другим ключам KMS? Если да, то у них есть другая политика, которая предоставляет им разрешения KMS. Возможно, вам потребуется добавитьDeny
раздел в KMS CMK, чтобы другие люди не могли его использовать. - person John Rotenstein   schedule 14.05.2021