

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为存储在 Amazon S3 中的项目配置服务器端加密 CodePipeline
<a name="S3-artifact-encryption"></a>

可以使用两种方法为 Amazon S3 构件配置服务器端加密：
+ CodePipeline 创建 S3 工件存储桶， Amazon 托管式密钥 当您使用创建管道向导创建管道时会创建默认存储桶。与对象数据一起加密，并由管理 Amazon。 Amazon 托管式密钥 
+ 您可以创建和管理自己的客户管理的密钥。

**重要**  
CodePipeline 仅支持对称 KMS 密钥。请勿使用非对称 KMS 密钥对 S3 桶中的数据进行加密。

如果使用默认的 S3 密钥，则无法更改或删除此 Amazon 托管式密钥。如果您使用客户托管密钥 Amazon KMS 来加密或解密 S3 存储桶中的项目，则可以根据需要更改或轮换此客户托管密钥。

Amazon S3 支持存储桶策略，如果您要对所有存储在存储桶中的对象执行服务器端加密，则可以使用这些策略。例如，如果请求不包含用于请求服务器端加密（SSE-KMS）的 `s3:PutObject` 标头，则下面的存储桶策略将拒绝所有人的上传对象（`x-amz-server-side-encryption`）权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "SSEAndSSLPolicy",
    "Statement": [
        {
            "Sid": "DenyUnEncryptedObjectUploads",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::codepipeline-us-west-2-89050EXAMPLE/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        },
        {
            "Sid": "DenyInsecureConnections",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::codepipeline-us-west-2-89050EXAMPLE/*",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}
```

------

有关服务器端加密的更多信息 Amazon KMS，请参阅使用服务器端加密[保护数据和使用存储在 Amazon Key Management Service (SSE-](https://docs.amazonaws.cn/AmazonS3/latest/userguide/serv-side-encryption.html) [KMS) 中的 KMS 密钥使用服务器端加密保护数据](https://docs.amazonaws.cn/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

有关的更多信息 Amazon KMS，请参阅《[Amazon Key Management Service 开发人员指南》](https://docs.amazonaws.cn/kms/latest/developerguide/)。

**Topics**
+ [

## 查看你的 Amazon 托管式密钥
](#S3-view-default-keys)
+ [

## 使用 Amazon CloudFormation 或，为 S3 存储桶配置服务器端加密 Amazon CLI
](#S3-rotate-customer-key)

## 查看你的 Amazon 托管式密钥
<a name="S3-view-default-keys"></a>

当您使用**创建管道**向导创建第一个管道时，系统将在您创建管道的同一区域为您创建一个 S3 存储桶。存储桶用于存储管道项目。当管道运行时，构件会放入 S3 存储桶并从中检索。默认情况下， CodePipeline 使用服务器端加密，并 Amazon KMS 使用 Amazon 托管式密钥 适用于 Amazon S3 的（`aws/s3`密钥）。 Amazon 托管式密钥 这已创建并存储在您的 Amazon 账户中。从 S3 存储桶检索项目时， CodePipeline 使用相同的 SSE-KMS 进程解密该项目。

**查看有关您的信息 Amazon 托管式密钥**

1. 登录 Amazon Web Services 管理控制台 并打开 Amazon KMS 控制台。

1. 如果出现欢迎页面，请选择**立即开始使用**。

1. 在服务导航窗格中，选择**Amazon 托管式密钥**。

1. 选择您的管道所在的区域。例如，如果管道是在 `us-east-2` 中创建的，则确保将筛选条件设为美国东部（俄亥俄州）。

   有关可用区域和终端节点的更多信息 CodePipeline，请参阅终[Amazon CodePipeline 端节点和配额](https://docs.amazonaws.cn/general/latest/gr/codepipeline.html)。

1. 在列表中，选择包含管道所用别名的密钥（默认情况下为 **aws/s3**）。有关该密钥的基本信息将会显示。



## 使用 Amazon CloudFormation 或，为 S3 存储桶配置服务器端加密 Amazon CLI
<a name="S3-rotate-customer-key"></a>

使用 Amazon CloudFormation 或创建管道时，必须手动配置服务器端加密。 Amazon CLI 使用上面的示例存储桶策略，然后创建您自己的客户自主管理型密钥。您也可以使用自己的密钥，而不是 Amazon 托管式密钥。选择自己的密钥的一些理由包括：
+ 您希望按时间表轮换密钥以满足贵组织的业务或安全要求。
+ 您要创建一个使用与另一个 Amazon 账户关联的资源的管道。这需要使用客户管理的密钥。有关更多信息，请参阅 [在中 CodePipeline 创建使用其他 Amazon 账户资源的管道](pipelines-create-cross-account.md)。

加密最佳实践建议不要广泛重复使用加密密钥。作为最佳实践，请定期轮换您的密钥。要为您的 Amazon KMS 密钥创建新的加密材料，您可以创建客户托管密钥，然后更改应用程序或别名以使用新的客户托管密钥。或者，您可以为现有客户管理的密钥启用自动密钥轮换。

要轮换客户管理的密钥，请参阅[轮换密钥](https://docs.amazonaws.cn/kms/latest/developerguide/rotate-keys.html)。

**重要**  
CodePipeline 仅支持对称 KMS 密钥。请勿使用非对称 KMS 密钥对 S3 桶中的数据进行加密。