Использование s3:GetObject из зашифрованного хранилища KMS с псевдонимом

#amazon-web-services #amazon-s3 #devops #amazon-iam #amazon-kms

Вопрос:

Я пытаюсь использовать псевдоним ключа KMS для получения объектов из S3, который не работает, в то время как объекты put работают с той же политикой. Моя политика выглядит следующим образом

 {  "Version": "2012-10-17",  "Statement": [  {  "Sid": "AllowListBucket",  "Effect": "Allow",  "Action": "s3:ListBucket",  "Resource": "arn:aws:s3:::primary-db-backups-XXXXX"  },  {  "Sid": "AllowGetPutPostgresBackups",  "Effect": "Allow",  "Action": [  "s3:PutObject",  "s3:GetObject"  ],  "Resource": "arn:aws:s3:::primary-db-backups-XXXXX/*"  ]  },  {  "Sid": "AllowS3KMS",  "Effect": "Allow",  "Action": [  "kms:GenerateDataKey*",  "kms:Decrypt"  ],  "Resource": "*",  "Condition": {  "StringLike": {  "kms:RequestAlias": "alias/infra_s3_key"  }  }  }  ] }  

Ошибка, которую я получаю, заключается в следующем

 download failed: s3://primary-db-backups-XXXXX/ip15000_2021-10-19T02-37-52.sql to - An error occurred (AccessDenied) when calling the GetObject operation: Access Denied  

Если я помещу ключ KMS ARN в ресурс, то это сработает. Я не уверен, почему GetObject не работает, в то время как putObject работает.

Ответ №1:

Вероятно, это происходит потому, что S3 вызывает ключ KMS по своему ARN, а не alias . Вы можете использовать alias/infra_s3_key только в том случае, если вызов API для KMS, выполненный S3, будет использоваться сам alias/infra_s3_key по себе . Но, вероятно, он использует ключ ARN, поэтому работает только условие с ключом KMS ARN.