AWS Config ルール s3-bucket-ssl-requests-only を有効にして、Amazon Simple Storage Service (Amazon S3) バケットポリシーでデータ転送中に暗号化を要求するようにしました。このルールに準拠するバケットポリシーを作成するには、どうすればよいですか?
解決方法
注: Amazon S3 では、転送中の暗号化と保存時の暗号化を提供しています。転送中の暗号化は HTTPS を意味し、保存時の暗号化はクライアント側またはサーバー側の暗号化を意味します。
Amazon S3 は HTTP リクエストと HTTPS リクエストの両方を許可します。デフォルトでは、リクエストは AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、または HTTPS を介して行われます。
s3-bucket-ssl-requests-only ルールに準拠するには、バケットポリシーが HTTP リクエストへのアクセスを明示的に拒否していることを確認します。HTTP リクエストを明示的に拒否せずに HTTPS リクエストを許可するバケットポリシーは、ルールに準拠しない場合があります。
バケットポリシーの HTTP または HTTPS リクエストを特定するには、キー "aws:SecureTransport" をチェックする条件を使用します。このキーが true の場合、リクエストは HTTPS 経由で送信されます。s3-bucket-ssl-requests-only ルールに準拠するには、リクエストが条件 "aws:SecureTransport": "false" を満たしたときに明示的にアクセスを拒否するバケットポリシーを作成します。このポリシーは、HTTP リクエストへのアクセスを明示的に拒否します。
s3-bucket-ssl-requests-only ルールに準拠するバケットポリシー
たとえば、次のバケットポリシーはルールに準拠しています。このポリシーは、リクエストが条件 "aws:SecureTransport": "false" を満たしている場合に、バケットとオブジェクトに対するすべてのアクションを明示的に拒否します。
{
"Id": "ExamplePolicy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSSLRequestsOnly",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
},
"Principal": "*"
}
]
}
s3-bucket-ssl-requests-only ルールに準拠しないバケットポリシー
対照的に、次のバケットポリシーはルールに準拠していません。明示的な拒否ステートメントを使用する代わりに、ポリシーは条件 "aws:SecureTransport": "true" を満たすリクエストへのアクセスを許可します。このステートメントでは、リクエストが HTTPS を使用する場合、バケット内のすべてのオブジェクトに対して s3:GetObject への匿名アクセスを許可します。ユースケースで HTTPS 経由の匿名アクセスが必要な場合を除き、このタイプのバケットポリシーは避けてください。
{
"Id": "ExamplePolicy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "NOT-RECOMMENDED-FOR__AWSCONFIG-Rule_s3-bucket-ssl-requests-only",
"Action": "s3:GetObject",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
},
"Principal": "*"
}
]
}
関連情報
バケットポリシーを使用し、深層防御を適用して Amazon S3 データを保護する方法