📌  相关文章
📜  Amazon DynamoDB – 安全性和合规性(1)

📅  最后修改于: 2023-12-03 14:39:05.579000             🧑  作者: Mango

Amazon DynamoDB – 安全性和合规性

Amazon DynamoDB 是一种高可用性、高性能、面向列的 NoSQL 数据库服务。为了维护其先进的技术和可靠性,它支持许多安全和合规性功能。本文将介绍以下内容:

  • 访问控制
  • 加密
  • 合规性
访问控制

DynamoDB 支持基于 AWS Identity and Access Management (IAM) 的访问控制。DynamoDB IAM 策略允许您为 IAM 用户、组或角色分配访问 DynamoDB 表和 API 的权限。IAM 策略可以限制这些用户、组或角色可以执行的操作。例如,您可以创建一个具有只读权限的策略,使用户无法进行写操作。此外,DynamoDB 还支持为单个项定义细粒度的访问控制,这些控制允许特定用户或角色访问特定项。DynamoDB 还支持 Amazon Virtual Private Cloud (VPC),您可以使用 VPC 策略控制谁能通过 VPC 访问 DynamoDB。

下面是一个示例 DynamoDB IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query",
                "dynamodb:Scan"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable",
                "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
            ]
        }
    ]
}

这个策略允许用户执行 GetItem、Query 和 Scan 操作,但是只允许用户进行 PutItem、UpdateItem 和 DeleteItem 操作。

加密

DynamoDB 支持加密功能,可以加密 DynamoDB 数据库中的数据,包括主键、属性和索引。DynamoDB 支持两种类型的加密:

  • 服务器端加密
  • 客户端加密
服务器端加密

DynamoDB 的服务器端加密使用 AWS 托管的主密钥(AWS KMS)来加密和存储数据。您可以使用默认的 KMS 主密钥或创建自己的 KMS 主密钥,然后将其与 DynamoDB 表一起使用。当您使用 KMS 主密钥创建 DynamoDB 表时,DynamoDB 会自动加密所有数据。DynamoDB 还为您的表提供了自动维护的加密密钥存储、密钥轮换和加密日志记录。

下面是一个示例 DynamoDB 表定义:

AWS::DynamoDB::Table:
  Properties:
    AttributeDefinitions:
      - AttributeName: Artist
        AttributeType: S
      - AttributeName: SongTitle
        AttributeType: S
    KeySchema:
      - AttributeName: Artist
        KeyType: HASH
      - AttributeName: SongTitle
        KeyType: RANGE
    ProvisionedThroughput:
      ReadCapacityUnits: 1
      WriteCapacityUnits: 1
    SSESpecification:
      SSEEnabled: true
      KMSMasterKeyId: alias/my-key-alias
  Type: 'AWS::DynamoDB::Table'

这个配置在启用 SSESpecification 时指定了 KMS 主密钥别名。

客户端加密

DynamoDB 的客户端加密允许您在客户端加密数据,并将加密后的数据存储在 DynamoDB 表中。DynamoDB 不存储加密密钥,因此您需要自己管理密钥。客户端加密允许您选择使用不同的加密算法和密钥管理策略,然后将加密密钥存储在您选择的密钥管理服务中。

下面是一个使用客户端加密的 Python 代码片段:

import boto3
import python_encryption_sdk as encryption_sdk

def encrypt_data(key, data):
     algorithm = encryption_sdk.Algorithms.AES_GCM_IV12_TAG16_NO_PADDING
     message = encryption_sdk.Message(data.encode())
     master_key_provider = encryption_sdk.StrictAwsKmsMasterKeyProvider(key)
     encryption_context = {'purpose': 'example'}

     with encryption_sdk.Encryptor(
         algorithm=algorithm,
         key_provider=master_key_provider
     ) as encryptor:
         ciphertext, header = encryptor.encrypt(
             message=message,
             encryption_context=encryption_context
         )

     return ciphertext, header

client = boto3.client('dynamodb')
key = 'alias/my-key-alias'
data = {'Artist': {'S': 'No One You Know'}, 'SongTitle': {'S': 'Call Me Today'}}
ciphertext, header = encrypt_data(key, data)

client.put_item(
    TableName='MyTable',
    Item={
        'id': {'N': '1'},
        'data': {'B': ciphertext},
        'header': {'B': header}
    }
)

这个代码片段使用 AWS KMS 加密密钥对数据进行加密,并将加密数据存储在 DynamoDB 表中。

合规性

DynamoDB 遵循许多安全和合规性标准,包括:

  • 服务组织控制 (SOC) 1、SOC 2 和 SOC 3
  • 支付卡行业数据安全标准 (PCI DSS)
  • HIPAA
  • ISO 27001
  • FedRAMP
  • FIPS

这些合规性标准是通过 AWS 的合规性计划验证的。作为 AWS 的客户,您可以使用这些合规性标准的验证来加强您的安全性和审计性。

总结

本文介绍了 DynamoDB 的访问控制、加密和合规性功能。DynamoDB 支持使用 IAM 策略、服务器端加密和客户端加密来保护数据。DynamoDB 还满足多个安全和合规性标准。这些功能使 DynamoDB 成为一种非常安全且可靠的数据库服务,适用于各种应用程序。