Search code examples
amazon-web-servicesamazon-kms

AWS KMS How to 100% sure that it is not stolen from others?


I am proposing to use AWS KMS to encrypt my database. However by boss challenge me that what if the someone in Amazon staff has access to steal my KMS and decrypt my database. The information inside the database is very important and cannot take any risk other people can decrypt it.

Is there other solution to solve this issue? to make sure no one can steal the Key?

Should we use some on-prem HSM to store the key instead ?


Solution

  • As the FAQ points out, AWS KMS is designed such that

    no one, including AWS employees, can retrieve your plaintext KMS keys from the service.

    If you read further down, it also provides links to various articles detailing the specification and design of the KMS. And as you can see from the volumes of these articles, the full scope of design consideration and how it complies with FIPS certification is beyond the scope of this answer.

    However, as an example, refer to the cryptographic details tech paper for some ideas of how it works. There are 2 areas mentioned where keys are present:

    1. In the KMS Keys Repository
    2. In the HSM modules

    KMS Keys Repository

    The repository serves as durable storage for the keys. Keys are, of course, stored encrypted. The article further explains that the key repository leverages on IAM roles.

    Only under AWS IAM roles and accounts administered by each customer can customer KMS keys be created, deleted, or used to encrypt, decrypt, sign, or verify data.

    This is the same way authentication and authorization to any other AWS services are managed. Hence, this is one way to prevent AWS employees from gaining access to the keys. How IAM works and how it is secured is once again beyond the scope of this answer.

    HSM Modules

    Unlike the KMS keys repository, the HSM Modules will have access to the plain text keys. However, the plain text keys are only loaded in-memory for the duration that they are used. They are not durably stored in the HSM modules.

    These keys are made available only on the HSMs and only in memory for the necessary time needed to process your cryptographic request.

    Hence, employees with access to these modules would be able to theoretically gain access to these keys. To mitigate this risk, if you go to the design goals section, the article further explains the modules use quorum-based access controls.

    Multiple Amazon employees with role-specific access to quorum-based access controls are required to perform administrative actions on the HSMs.

    That is, no single employee will have administrative access to these modules. Multiple employees are always required. Once again, how AWS assigns which roles to which employees at which management level is beyond the scope of this answer.

    As the question requested, these are just some of the considerations of how the service is secured against AWS employees. For an organization to make a decision on whether to use AWS, usually it should be based on a comprehensive set of security policies and an audit whether AWS complies to these requirements.

    EDIT

    Since you mentioned also how to convince stakeholders, this is usually a business question rather than a technical one.

    I would refer them to AWS compliance for evidence that AWS goes through rigorous 3rd party audits. Would then point out the security of a system is only as strong as the weakest link. That is, using AWS does not mean we automatically have AWS security. We have to ensure our software, our people, and our processes are secure against exploits. So unless we are sure we have better security profile than AWS (with all their compliance and audits), our focus and worry should be more on securing our resources.