|
| 1 | +--- |
| 2 | +contentId: amazon-s3-integration |
| 3 | +directory: manual |
| 4 | +--- |
| 5 | + |
| 6 | +# Amazon S3連携 |
| 7 | + |
| 8 | +Amazon S3連携とは、microCMSの管理画面からアップロードされた画像や動画といったメディアの保存先を、microCMSのデフォルトのストレージから、お客様が独自に用意したAmazon S3のバケットに切り替えられる機能です。 |
| 9 | +これにより、自社のポリシーに基づいたセキュリティ設定で適用できるようになるため、セキュリティ要件の高いプロジェクトでも安心してお使いいただけます。 |
| 10 | + |
| 11 | +類似の機能に「[メディアのカスタムドメイン設定](/manual/custom-domain)」があります。この機能と今回ご説明する機能は、目的が異なりますのでご注意ください。 |
| 12 | + |
| 13 | +**メディアのカスタムドメイン設定** |
| 14 | + |
| 15 | +* アップロードしたメディアの**URL**に独自ドメインを設定する機能です。 |
| 16 | +* メディアの保存先はmicroCMS管理のストレージのままです。 |
| 17 | + |
| 18 | + |
| 19 | +**本機能(メディア保存先の切り替え)** |
| 20 | + |
| 21 | +* メディアの**保存先そのもの**を、お客様が契約する外部ストレージなどに変更する機能です。 |
| 22 | + |
| 23 | +Amazon S3連携は、Enterpriseプランのお客様にご利用いただける機能です。この機能は初期設定では無効になっていますので、ご希望される場合はお問い合わせください。 |
| 24 | +プランごとに利用できる機能については、[料金プランページ](https://microcms.io/pricing)をご覧ください。 |
| 25 | + |
| 26 | +ご利用前の確認事項 |
| 27 | +========= |
| 28 | + |
| 29 | +Amazon S3連携機能をご利用いただくにあたって、以下の条件が前提となります。**いずれも重要な内容になりますので、必ずご確認をお願いします。** |
| 30 | + |
| 31 | +* 連携できるパブリッククラウドのストレージは、[**Amazon S3**](https://aws.amazon.com/jp/s3/)**のみ**となります。 |
| 32 | +* 本機能を有効にすると、**画像の配信仕様が変更されるため、**[**画像API**](/image-api/introduction)**は使用できなくなります**。URLパラメータによる画像の最適化(リサイズや形式変換など)が必要な場合は、お客様ご自身でimgix等の外部サービスをご利用ください。 |
| 33 | +* 本機能の設定は管理画面のみの操作で完結できません。事前に、**弊社と連携の上、お客様に関連するリソースをご用意いただく必要**があります。設定の詳細につきましては、まずはお問い合わせください。 |
| 34 | + |
| 35 | +機能の詳細 |
| 36 | +===== |
| 37 | + |
| 38 | +通常、管理画面にアップロードしたメディア(ファイル含む)はmicroCMSが管理するストレージに保管されます。Amazon S3連携機能によって、お客様が事前に用意したS3バケットに直接保存することができます。 |
| 39 | +そのため、アップロード後に割り当てられるメディアのURLも、お客様の事前の定義に従ったドメインとなります。 |
| 40 | +なお、本機能は画像以外のメディア(PDFなど)も保存の対象となります。 |
| 41 | + |
| 42 | +### 設定前のURLの例 |
| 43 | + |
| 44 | +#### 画像 |
| 45 | + |
| 46 | +`https://images.microcms-assets.io/assets/xxxx/yyyy/image.png` |
| 47 | + |
| 48 | +#### ファイル |
| 49 | + |
| 50 | +`https://files.microcms-assets.io/assets/xxxx/yyyy/sample.pdf` |
| 51 | + |
| 52 | +### 設定後のURLの例 |
| 53 | + |
| 54 | +#### 画像 |
| 55 | + |
| 56 | +`https://{バケット名}.s3.{リージョン名}.amazonaws.com/media/image.png` |
| 57 | + |
| 58 | +#### ファイル |
| 59 | + |
| 60 | +`https://{バケット名}.s3.{リージョン名}.amazonaws.com/media/sample.pdf` |
| 61 | + |
| 62 | +※お客様が自身で設定したバケット名やリージョン名が配信URLに含まれます。 |
| 63 | +※上記はカスタムドメイン設定を利用しない場合の例です。カスタムドメイン設定について、下記の「[microCMS管理画面での設定](/manual/amazon-s3-integration#ha62f8dfa73)」をご確認ください。 |
| 64 | + |
| 65 | +microCMSのストレージでは、[メディアの形式によって配信されるドメインが異なり](/manual/media-management#h83761c8b1c)ますが、**本機能を有効にした後はドメインは統一されます。** |
| 66 | + |
| 67 | +アップロード時の挙動 |
| 68 | +---------- |
| 69 | + |
| 70 | +本機能が有効になっている場合、メディアのアップロード先は指定したお客様管理のS3バケットになります。 |
| 71 | + |
| 72 | +なお、アップロード先のパスは `対象バケット/{URLプレフィクス}/{ファイル名}` となります。ファイル管理の目的で、メディアには以下のメタ情報も付与します。 |
| 73 | + |
| 74 | +* `x-amz-meta-upload-source`: `"microcms"` |
| 75 | +* `x-amz-meta-microcms-service`: `{内部サービスID(例: SERVICE#xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)}` |
| 76 | +* `x-amz-meta-microcms-version`: `{タイムスタンプ形式のバージョン(例: 20250812154922)}` |
| 77 | +* `x-amz-meta-microcms-status`: `"public"` |
| 78 | + |
| 79 | +S3バケットにアップロードされたオブジェクト(メディア)には、Cache-Controlヘッダーが付与されないため、キャッシュはされません。 |
| 80 | + |
| 81 | +配信されるメディアでキャッシュを利用したい場合は、CloudFront等のCDNとの連携をご検討ください。 |
| 82 | +なお、「[S3とCloudFront等のCDNを連携する場合の注意事項](/manual/amazon-s3-integration#h5430147a53)」もあわせてご確認ください。 |
| 83 | + |
| 84 | +メディアのURL |
| 85 | +-------- |
| 86 | + |
| 87 | +本機能有効後にアップロードされたメディアには、以下のURLでアクセスできるようになります。 |
| 88 | +`{カスタムドメイン}/{URLプレフィクス}/{ファイル名}` |
| 89 | + |
| 90 | +microCMSからデフォルトで配信される[メディアのURL](/manual/media-management#h83761c8b1c)は、ランダムな文字列が含まれているため、推測が困難で高いセキュリティを確保しています。 |
| 91 | + |
| 92 | +しかし、本機能を有効にした後にアップロードされたメディアのURLには、**ランダムな文字列が追加されず、推測されやすい状態**となります。したがって、機密性の高いファイルを扱う際には、ファイル名に推測不可能な文字列を含めるなど、ご留意ください。 |
| 93 | + |
| 94 | +メディアに対して可能な操作 |
| 95 | +------------- |
| 96 | + |
| 97 | +本機能有効後にアップロードされたメディアについては、下記の操作が可能です。 |
| 98 | + |
| 99 | +* メディアの削除 |
| 100 | +* メディア名のリネーム(「URLの固定化」がOFFの場合のみ) |
| 101 | +* メディアの再アップロード(「URLの固定化」がOFFの場合のみ) |
| 102 | + |
| 103 | +設定方法 |
| 104 | +==== |
| 105 | + |
| 106 | +設定の流れ |
| 107 | +----- |
| 108 | + |
| 109 | +大まかに、以下のような流れで設定を行います。 |
| 110 | + |
| 111 | +1. 設定に必要な各種リソースを準備する(S3バケット、IAMロールなど) |
| 112 | +2. 管理画面の「設定」>「外部連携」>「Amazon S3連携」にアクセスし、必要な設定項目を入力する |
| 113 | +3. 接続テストを実施する |
| 114 | +4. 接続テストに問題がなければ設定を反映する |
| 115 | + |
| 116 | +事前準備 |
| 117 | +---- |
| 118 | + |
| 119 | +下記に示す、AWS関連のリソースをご準備ください。 |
| 120 | + |
| 121 | +各種リソースの設定について、ご不明点がございましたら弊社サポートまでお問い合わせください。 |
| 122 | + |
| 123 | +### 1\. S3バケット(必須) |
| 124 | + |
| 125 | +メディアの保存先となるS3バケットを1つご準備ください。 |
| 126 | +なお、作成したバケットに対して、S3への操作権限を付与したバケットポリシーを設定してください。 |
| 127 | + |
| 128 | +#### バケットポリシーの例 |
| 129 | + |
| 130 | + |
| 131 | +**CloudFrontとS3を連携しない場合** |
| 132 | + |
| 133 | + { |
| 134 | + "Version": "2012-10-17", |
| 135 | + "Statement": [ |
| 136 | + { |
| 137 | + "Sid": "<任意>", |
| 138 | + "Effect": "Allow", |
| 139 | + "Principal": "*", |
| 140 | + "Action": "s3:GetObject", |
| 141 | + "Resource": "arn:aws:s3:::<バケット名>/<ディレクトリ名>/*" |
| 142 | + } |
| 143 | + ] |
| 144 | + } |
| 145 | + |
| 146 | + |
| 147 | +**CloudFrontをS3と連携する場合** |
| 148 | + |
| 149 | + { |
| 150 | + "Version": "2012-10-17", |
| 151 | + "Statement": [ |
| 152 | + { |
| 153 | + "Sid": "<任意>", |
| 154 | + "Effect": "Allow", |
| 155 | + "Principal": { |
| 156 | + "Service": "cloudfront.amazonaws.com" |
| 157 | + }, |
| 158 | + "Action": "s3:GetObject", |
| 159 | + "Resource": "arn:aws:s3:::<バケット名>/<ディレクトリ名>/*", |
| 160 | + "Condition": { |
| 161 | + "ArnLike": { |
| 162 | + "AWS:SourceArn": "arn:aws:cloudfront::<アカウントID(12桁の数字)>:distribution/<CloudFrontのディストリビューションID>" |
| 163 | + } |
| 164 | + } |
| 165 | + } |
| 166 | + ] |
| 167 | + } |
| 168 | + |
| 169 | + |
| 170 | + |
| 171 | +#### 注意事項 |
| 172 | + |
| 173 | +* 「バケットタイプ」は「**汎用**」を選択してください。 |
| 174 | +* 「オブジェクト所有者」は「**ACL無効**」を選択してください。 |
| 175 | + |
| 176 | + |
| 177 | + |
| 178 | +### 2\. IAMポリシー(必須) |
| 179 | + |
| 180 | +S3のバケットに対する各種操作の権限を付与したIAMポリシーを1つご準備ください。 |
| 181 | + |
| 182 | +#### IAMポリシーの例 |
| 183 | + |
| 184 | + { |
| 185 | + "Version": "2012-10-17", |
| 186 | + "Statement": [ |
| 187 | + { |
| 188 | + "Sid": "<任意>", |
| 189 | + "Effect": "Allow", |
| 190 | + "Action": [ |
| 191 | + "s3:GetBucketLocation", |
| 192 | + "s3:ListBucket" |
| 193 | + ], |
| 194 | + "Resource": "arn:aws:s3:::<バケット名>" |
| 195 | + }, |
| 196 | + { |
| 197 | + "Sid": "<任意>", |
| 198 | + "Effect": "Allow", |
| 199 | + "Action": [ |
| 200 | + "s3:GetObject", |
| 201 | + "s3:PutObject", |
| 202 | + "s3:DeleteObject" |
| 203 | + ], |
| 204 | + "Resource": "arn:aws:s3:::<バケット名>/<ディレクトリ名>/*" |
| 205 | + } |
| 206 | + ] |
| 207 | + } |
| 208 | + |
| 209 | + |
| 210 | + |
| 211 | +### 3\. IAMロール(必須) |
| 212 | + |
| 213 | +microCMSからS3オブジェクト(メディア)を作成/変更/削除する際に割り当てるIAMロールを1つご準備ください。 |
| 214 | +作成したIAMロールに対し、上記で作成したIAMポリシーを付与してください。 |
| 215 | + |
| 216 | +#### 注意事項 |
| 217 | + |
| 218 | +* 「信頼されたエンティティタイプ」は「**AWSアカウント**」を選択してください。 |
| 219 | +* 「AWSアカウント」は「**別のAWSアカウント**」を選択してください。**「アカウントID」については、設定作業時にお客様に個別にご案内いたします。** |
| 220 | +* オプションにて、**「外部IDを要求する」にチェックを入れ、任意の外部IDを設定してください。** |
| 221 | + |
| 222 | + |
| 223 | + |
| 224 | +### 4\. CloudFrontディストリビューション(任意) |
| 225 | + |
| 226 | +S3バケット内のオブジェクトの配信にCloudFrontをご利用される場合、CloudFrontディストリビューションを1つご準備ください。 |
| 227 | + |
| 228 | +#### 注意事項 |
| 229 | + |
| 230 | +* ディストリビューション作成後、デプロイに時間がかかる場合があるので、完了したことを確認した後に、microCMS側の設定を行ってください。 |
| 231 | + |
| 232 | +microCMS管理画面での設定 |
| 233 | +---------------- |
| 234 | + |
| 235 | +下記に示す設定値を入力してください。 |
| 236 | + |
| 237 | +本機能を設定できるのは「管理者」権限を持つメンバーのみです。 |
| 238 | + |
| 239 | +設定項目 (\*)は必須 |
| 240 | + |
| 241 | +説明 |
| 242 | + |
| 243 | +設定値の例 |
| 244 | + |
| 245 | +**バケット名(\*)** |
| 246 | + |
| 247 | +アップロード先となるS3バケット名を入力してください。 |
| 248 | + |
| 249 | +`alpha-prod-assets` |
| 250 | + |
| 251 | +**リージョン(\*)** |
| 252 | + |
| 253 | +バケットが存在するリージョンを選択してください。 |
| 254 | + |
| 255 | +`ap-northeast-1` |
| 256 | + |
| 257 | +**IAMロールARN (\*)** |
| 258 | + |
| 259 | +事前に準備したIAMロールを入力してください。なお、AWSサービス内で一意に識別するための文字列で入力してください。 |
| 260 | + |
| 261 | +`arn:aws:iam::123456789012:role/SampleRole` |
| 262 | + |
| 263 | +**外部ID (\*)** |
| 264 | + |
| 265 | +Assume Roleにあたって必要な条件キーを入力してください。 |
| 266 | + |
| 267 | +(2~1224 文字、空白のない英数字。一部、記号も利用可) |
| 268 | + |
| 269 | +URLプレフィックス |
| 270 | + |
| 271 | +アップロード先となるディレクトリを入力してください。複数階層の指定が可能です。 |
| 272 | +設定しない場合はS3のルートにメディアが保存されます。 |
| 273 | + |
| 274 | +`media`, `media/path` |
| 275 | + |
| 276 | +カスタムドメイン |
| 277 | + |
| 278 | +配信の際に使いたいドメインを入力してください。 設定しない場合は `{バケット名}.s3.{リージョン}.amazonaws.com` が配信時のドメインとして採用されます。 |
| 279 | + |
| 280 | +`https://my-media.example.com` |
| 281 | + |
| 282 | +メディアのファイル名を固定する |
| 283 | + |
| 284 | +オンにした場合は同じファイル名でのみ再アップロードが可能となり、ファイル名の変更もできなくなります。 |
| 285 | + |
| 286 | +OFF / ON |
| 287 | + |
| 288 | +メモ |
| 289 | + |
| 290 | +接続設定に関するメモを自由に入力することができます。 |
| 291 | + |
| 292 | +(自由入力) |
| 293 | + |
| 294 | +制限/注意事項 |
| 295 | +======= |
| 296 | + |
| 297 | +S3の設定やデータ管理に関する注意事項 |
| 298 | +------------------- |
| 299 | + |
| 300 | +連携先S3の設定、およびバケット内のデータの管理・運用は、お客様の責任範囲となります。 |
| 301 | +**microCMSの管理画面やAPIを経由せずに行われたデータや設定の変更は、サポート対象外**となりますので、あらかじめご了承ください。 |
| 302 | + |
| 303 | +**データ整合性に関するご注意** |
| 304 | + |
| 305 | +microCMSの管理画面やAPIを介さずにお客様が直接S3上のデータを操作(追加・変更・削除)されると、microCMS側の情報との間に不整合が生じ、メディアが正しく表示されないなどの予期せぬエラーの原因となる可能性があります。 |
| 306 | + |
| 307 | +S3とCloudFront等のCDNを連携する場合の注意事項 |
| 308 | +------------------------------ |
| 309 | + |
| 310 | +S3とCloudFront等のCDNを連携し、キャッシュを利用されるケースにおいて、**microCMS管理画面内でメディアを削除しても、キャッシュデータが残り続けてしまう**場合があります。 |
| 311 | + |
| 312 | +上記の対策としては、以下のような方法をご検討ください。 |
| 313 | + |
| 314 | +1. [メディアのWebhook](/manual/medium-webhook-setting)等を利用してメディアの削除を検知し、キャッシュを明示的に削除する |
| 315 | +2. キャッシュのTTLを短く設定する |
| 316 | + |
| 317 | +1のケースについて、利用用途によっては画像のURLにパラメータが付与された状態でキャッシュされている場合があります。そのため、**キャッシュを削除する際はパスの末尾にワイルドカードを指定**していただきますようお願いいたします。 |
| 318 | + |
| 319 | +すでにメディアが存在する場合の対応 |
| 320 | +----------------- |
| 321 | + |
| 322 | +すでにメディアが存在する場合、**本機能が有効となった後にお客様管理の外部S3バケットにメディアが保存される**ようになります。 |
| 323 | + |
| 324 | +なお、**お客様管理****の外部S3バケットにアップロードしたメディアが存在する場合、S3連携機能の設定変更および設定の削除はできません**。 |
| 325 | + |
| 326 | +WRITE APIへの対応 |
| 327 | +------------- |
| 328 | + |
| 329 | +### コンテンツAPI |
| 330 | + |
| 331 | +[POST](/content-api/post-content) / [PUT](/content-api/put-content) / [PATCH](/content-api/patch-content) リクエストにおける、URL指定によるメディアの登録には対応しています。 |
| 332 | + |
| 333 | +### マネジメントAPI |
| 334 | + |
| 335 | +メディアの[POST](/management-api/post-media)および[DELETE](/management-api/delete-media-v2)リクエストには対応していません。 |
| 336 | + |
| 337 | +複数環境での取り扱い |
| 338 | +---------- |
| 339 | + |
| 340 | +[複数環境](/manual/environments)作成時、本機能の設定内容も初期設定としてコピーされます。 |
| 341 | +また、アップロード時の基本的な挙動との違いとして、アップロード先のパスは `対象バケット/{URLプレフィクス}/{複数環境のサービスIDを元にした固有の値}/{ファイル名}` となります。 |
| 342 | + |
| 343 | +その他の仕様は以下の通りとなります。 |
| 344 | + |
| 345 | +* 環境作成時、上記のディレクトリにメディアがコピーされます。 |
| 346 | +* 環境削除時、上記のディレクトリのメディアがすべて削除されます。 |
| 347 | +* 本番環境のS3連携設定と、複数環境(開発・ステージング)のS3連携設定は、どちらかの環境で設定を変更しても相互に影響することはありません。 |
| 348 | + |
| 349 | +その他の注意点 |
| 350 | +------- |
| 351 | + |
| 352 | +* メディアの保存先がお客様管理の外部S3バケットとなるので、メディアデータの転送量やストレージ保存にかかる料金はお客様の負担となります(ただし、microCMSでのデータ転送量はかかりません)。 |
0 commit comments