Data encryption at rest for AWS Ground Station
AWS Ground Station provides encryption by default to protect your sensitive data at rest using AWS owned encryption keys.
-
AWS owned keys - AWS Ground Station uses these keys by default to automatically encrypt personal, directly identifiable data and ephemerides. You cannot view, manage, or use AWS-owned keys, or audit their use; however, it is unnecessary to take any action or change programs to protect the keys that encrypt data. For more information, see AWS-owned keys in the AWS Key Management Service Developer Guide.
Encryption of data at rest by default helps by reducing the operational overhead and complexity involved in protecting sensitive data. At the same time, it enables building secure applications that meet strict encryption compliance, as well as regulatory requirements.
AWS Ground Station enforces encryption on all sensitive, at-rest, data, however, for some AWS Ground Station resource, such as ephemerides, you can choose to use a customer managed key in place of the default AWS managed keys.
-
Customer managed keys -- AWS Ground Station supports the use of a symmetric customer managed key that you create, own, and manage to add a second layer of encryption over the existing AWS owned encryption. Because you have full control of this layer of encryption, you can perform such tasks as:
-
Establishing and maintaining key policies
-
Establishing and maintaining IAM policies and grants
-
Enabling and disabling key policies
-
Rotating key cryptographic material
-
Adding tags
-
Creating key aliases
-
Scheduling keys for deletion
For more information, see customer managed key in the AWS Key Management Service Developer Guide.
-
The following table summarizes resources for which AWS Ground Station supports the use of Customer Managed Keys
Data type | AWS owned key encryption | Customer managed key encryption (Optional) |
---|---|---|
Ephemeris data used to compute the trajectory of a Satellite | Enabled | Enabled |
Note
AWS Ground Station automatically enables encryption at rest using AWS owned keys to protect personally
identifiable data at no charge. However, AWS KMS charges apply for using a customer managed key.
For more information about pricing, see the AWS Key
Management Service pricing
For more information on AWS KMS, see the AWS KMS Developer Guide.
How AWS Ground Station uses grants in AWS KMS
AWS Ground Station requires a key grant to use your customer-managed key.
When you upload an ephemeris encrypted with a customer managed key, AWS Ground Station creates a key grant on your behalf by sending a CreateGrant request to AWS KMS. Grants in AWS KMS are used to give AWS Ground Station access to a KMS key in your account.
AWS Ground Station requires the grant to use your customer managed key for the following internal operations:
-
Send GenerateDataKey requests to AWS KMS to generate data keys encrypted by your customer managed key.
-
Send Decrypt requests to AWS KMS to decrypt the encrypted data keys so that they can be used to encrypt your data.
-
Send Encrypt requests to AWS KMS to encrypt the provided data.
You can revoke access to the grant, or remove the service's access to the customer managed key at any time. If you do, AWS Ground Station won't be able to access any of the data encrypted by the customer managed key, which affects operations that are dependent on that data. For example, if you remove a key grant from an ephemeris currently in use for a contact then AWS Ground Station will be unable to use the provided ephemeris data for pointing the antenna during the contact. This will cause the contact to end in a FAILED state.
Create a customer managed key
You can create a symmetric customer managed key by using the AWS Management Console, or the AWS KMS APIs.
To create a symmetric customer managed key
Follow the steps for creating symmetric customer managed key in the AWS Key Management Service Developer Guide.
Key policy
Key policies control access to your customer managed key. Every customer managed key must have exactly one key policy, which contains statements that determine who can use the key and how they can use it. When you create your customer managed key, you can specify a key policy. For more information, see Managing access to customer managed keys in the AWS Key Management Service Developer Guide.
To use your customer managed key with your AWS Ground Station resources, the following API operations must be permitted in the key policy:
kms:CreateGrant
- Adds a grant to a customer managed key. Grants control access to a specified KMS key, which allows access to
grant
operations AWS Ground Station requires. For more information about
Using Grants,
see the AWS Key Management Service Developer Guide.
This allows Amazon AWS to do the following:
-
Call GenerateDataKey to generate an encrypted data key and store it, because the data key isn't immediately used to encrypt.
-
Call Decrypt to use the stored encrypted data key to access encrypted data.
-
Call Encrypt to use the data key to encrypt data.
-
Set up a retiring principal to allow the service to
RetireGrant
.
kms:DescribeKey
-
Provides the customer managed key details to allow AWS Ground Station to validate the key before attempting to
create a grant on the provided key.
The following are IAM policy statement examples you can add for AWS Ground Station
"Statement" : [ {"Sid" : "Allow access to principals authorized to use AWS Ground Station", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "groundstation.amazonaws.com", "kms:CallerAccount" : "111122223333" } }, {"Sid": "Allow access for key administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:*" ], "Resource": "arn:aws:kms:region:111122223333:key/key_ID" }, {"Sid" : "Allow read-only access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource" : "*" } ]
For more information about specifying permissions in a policy , see the AWS Key Management Service Developer Guide.
For more information about troubleshooting key access , see the AWS Key Management Service Developer Guide.
Specifying a customer managed key for AWS Ground Station
You can specify a customer managed key to encrypt the following resources:
-
Ephemeris
When you create a resource, you can specify the data key by providing a kmsKeyArn
-
kmsKeyArn - A key identifier for an AWS KMS customer managed key
AWS Ground Station encryption context
An encryption context is an optional set of key-value pairs that contain additional contextual information about the data. AWS KMS uses the encryption context as additional authenticated data to support authenticated encryption. When you include an encryption context in a request to encrypt data, AWS KMS binds the encryption context to the encrypted data. To decrypt data, you include the same encryption context in the request.
AWS Ground Station encryption context
AWS Ground Station uses the different encryption context depending on the resource being encrypted and specifies a specific encryption context for each key grant created.
Ephemeris Encryption Context:
Key grant for encrypting ephemeris resources are bound to a specific satellite ARN
"encryptionContext": { "aws:groundstation:arn": "arn:aws:groundstation::111122223333:satellite/00a770b0-082d-45a4-80ed-SAMPLE" }
Note
Key grants are re-used for the same key-satellite pair.
Using encryption context for monitoring
When you use a symmetric customer managed key to encrypt your ephemerides, you can also use the encryption context in audit records and logs to identify how the customer managed key is being used. The encryption context also appears in logs generated by AWS CloudTrail or Amazon CloudWatch Logs .
Using encryption context to control access to your customer managed key
You can use the encryption context in key policies and IAM policies as conditions
to control access to your
symmetric customer managed key. You can also use encryption context constraints in a grant.
AWS Ground Station uses an encryption context constraint in grants to control access to the customer managed key in your account or region. The grant constraint requires that the operations that the grant allows use the specified encryption context.
The following are example key policy statements to grant access to a customer managed key for a specific encryption context. The condition in this policy statement requires that the grants have an encryption context constraint that specifies the encryption context.
{"Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" },{"Sid": "Enable CreateGrant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:groundstation:arn": "arn:aws:groundstation::111122223333:satellite/00a770b0-082d-45a4-80ed-SAMPLE" } } }
Monitoring your encryption keys for AWS Ground Station
When you use an AWS KMS customer managed key with your AWS Ground Station resources, you can use
AWS CloudTrail
or
Amazon CloudWatch logs
to track requests that AWS Ground Station sends to AWS KMS. The following examples are AWS CloudTrail
events for CreateGrant
, GenerateDataKey
, Decrypt
,
Encrypt
and DescribeKey
to monitor KMS operations called by AWS Ground
Station to access data encrypted by your customer managed key.
CreateGrant
(Cloudtrail)
When you use an AWS KMS customer managed key to encrypt your ephemeris resources, AWS Ground Station sends a
CreateGrant
request on your behalf to access the KMS key in your AWS account. The grant that AWS Ground Station
creates are specific to the resource associated with the AWS KMS customer managed key. In addition, AWS Ground
Station uses the RetireGrant
operation to remove a grant when you delete a resource.
The following example event records the CreateGrant
operation:
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AAAAAAAAAAAAAAAAAAAAA:SampleUser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/SampleUser01", "accountId": "111122223333", "accessKeyId": "ASIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AAAAAAAAAAAAAAAAAAAAA", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2022-02-22T22:22:22Z", "mfaAuthenticated": "false" } }, "invokedBy": "AWS Internal" }, "eventTime": "2022-02-22T22:22:22Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "111.11.11.11", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "operations": [ "GenerateDataKeyWithoutPlaintext", "Decrypt", "Encrypt" ], "constraints": { "encryptionContextSubset": { "aws:groundstation:arn": "arn:aws:groundstation::111122223333:satellite/00a770b0-082d-45a4-80ed-SAMPLE" } }, "granteePrincipal": "groundstation.us-west-2.amazonaws.com", "retiringPrincipal": "groundstation.us-west-2.amazonaws.com", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
DescribeKey
(Cloudtrail)
When you use an AWS KMS customer managed key to encrypt your ephemeris resources, AWS Ground Station sends a
DescribeKey
request on your behalf to validate that the requested key exists in your account.
The following example event records the DescribeKey
operation:
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AAAAAAAAAAAAAAAAAAAAA:SampleUser01", "arn": "arn:aws:sts::111122223333:assumed-role/User/Role", "accountId": "111122223333", "accessKeyId": "ASIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AAAAAAAAAAAAAAAAAAAAA", "arn": "arn:aws:iam::111122223333:role/Role", "accountId": "111122223333", "userName": "User" }, "webIdFederationData": {}, "attributes": { "creationDate": "2022-02-22T22:22:22Z", "mfaAuthenticated": "false" } }, "invokedBy": "AWS Internal" }, "eventTime": "2022-02-22T22:22:22Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-west-2", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
GenerateDataKey
(Cloudtrail)
When you use an AWS KMS customer managed key to encrypt your ephemeris resources, AWS Ground Station sends a
GenerateDataKey
request to KMS in order to generate a data key with which to encrypt your data.
The following example event records the GenerateDataKey
operation:
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2022-02-22T22:22:22Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keySpec": "AES_256", "encryptionContext": { "aws:groundstation:arn": "arn:aws:groundstation::111122223333:satellite/00a770b0-082d-45a4-80ed-SAMPLE", "aws:s3:arn": "arn:aws:s3:::customerephemerisbucket/0034abcd-12ab-34cd-56ef-123456SAMPLE" }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventCategory": "Management" }
Decrypt
(Cloudtrail)
When you use an AWS KMS customer managed key to encrypt your ephemeris resources, AWS Ground Station uses the
Decrypt
operation to decrypt the ephemeris provided if it is already encrypted with the same
customer managed key. For example if an ephemeris is being uploaded from an S3 bucket and is encrypted in that
bucket with a given key.
The following example event records the Decrypt
operation:
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2022-02-22T22:22:22Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:groundstation:arn": "arn:aws:groundstation::111122223333:satellite/00a770b0-082d-45a4-80ed-SAMPLE", "aws:s3:arn": "arn:aws:s3:::customerephemerisbucket/0034abcd-12ab-34cd-56ef-123456SAMPLE" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventCategory": "Management" }