製品アップデート情報
製品のお知らせ
qcs:ipを使用してユーザーアクセスIPを制限します。すべてのリクエストに適用可能です。192.168.1.0/24ネットワークセグメントにある場合およびIPが101.226.100.185または101.226.100.186である場合に、オブジェクトのアップロードおよびオブジェクトのダウンロード権限を許可するものです。{"version": "2.0","principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"statement": [{"effect": "allow","action": ["name/cos:PutObject","name/cos:GetObject"],"resource": ["qcs::cos:ap-beijing:uid/1250000000:examplebucket-bj-1250000000/*","qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-gz-1250000000/exampleobject"],"condition": {"ip_equal": {"qcs:ip": ["192.168.1.0/24","101.226.100.185","101.226.100.186"]}}}]}
versionidはオブジェクトのバージョン番号を表します。バージョン管理に関する内容は、バージョン管理の概要をご参照ください。オブジェクトのダウンロード(GetObject)、オブジェクトの削除(DeleteObject)の際に、リクエストパラメータversionidを使用して、アクションを行いたいオブジェクトのバージョンを指定することができます。versionidが含まれないリクエストパラメータの場合、リクエストはデフォルトでオブジェクトの最新バージョンに作用します。versionidリクエストパラメータを空の文字列にすると、versionidが含まれないリクエストパラメータの場合と同じになります。versionidリクエストパラメータが文字列"null"の場合、あるバケットにバージョン管理を有効にする前にオブジェクトをアップロードし、その後バージョン管理を有効にすると、それらのオブジェクトのバージョン番号はすべて文字列"null"となります。cos:versionidはリクエストパラメータversionidの制限に用いられます。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetObject"],"condition":{"string_equal":{"cos:versionid":"MTg0NDUxNTc1NjIzMTQ1MDAwODg"}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]}]}
{"statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetObject"],"condition":{"string_equal":{"cos:versionid":"MTg0NDUxNTc1NjIzMTQ1MDAwODg"}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:GetObject"],"condition":{"string_not_equal_if_exist":{"cos:versionid":"MTg0NDUxNTc1NjIzMTQ1MDAwODg"}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]}],"version":"2.0"}
versionidが含まれない場合、またはversionidが空の文字列の場合、GetObjectはデフォルトで最新バージョンのオブジェクトを取得します。このため、条件の中でstring_equal_if_existを使用することができます。“”の場合も同様にallowポリシーにヒットし、最新バージョンのオブジェクト取得に対するリクエストのみ権限が承認されます。"condition":{"string_equal_if_exist":{"cos:versionid": ""}}
{"statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetObject"],"condition":{"string_equal_if_exist":{"cos:versionid":""}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:GetObject"],"condition":{"string_not_equal":{"cos:versionid":""}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]}],"version":"2.0"}
{"statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:DeleteObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:DeleteObject"],"condition":{"string_equal":{"cos:versionid":"null"}},"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"]}],"version":"2.0"}
cos:content-lengthによってリクエストヘッダーContent-Lengthを制限することができます。それによりアップロードするオブジェクトのファイルサイズを制限することで、ストレージスペースをより柔軟に管理し、大きすぎるファイルや小さすぎるファイルのアップロードによる、ストレージスペースやネットワーク帯域幅の浪費防止に役立ちます。cos:content-length条件キーによってサブユーザー(uin:100000000002)のアップロードリクエストのContent-Lengthヘッダーのサイズを制限することができます。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:PutObject","name/cos:PostObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_less_than_equal":{"cos:content-length":10}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:PutObject","name/cos:PostObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_greater_than_if_exist":{"cos:content-length":10}}}]}
{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:PutObject","name/cos:PostObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_greater_than_equal":{"cos:content-length":2}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:PutObject","name/cos:PostObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_less_than_if_exist":{"cos:content-length":2}}}]}
application/xmlやimage/jpegなどです。詳細については、リクエストヘッダーリストをご参照ください。cos:content-typeを使用すると、リクエストのContent-Typeヘッダーを制限することができます。cos:content-type条件キーによってサブユーザー(uin:100000000002)のアップロードリクエストのContent-Typeヘッダーの具体的な内容を制限することができます。string_equal_ignore_caseとstring_not_equal_ignore_caseの使用を推奨します。その理由はstring_equal やstring_not_equalを使用した場合、text/htmlタイプのアップロードを禁止する目的であっても、 Content-Typeをtext/HtmlやtExt/htmlに設定した場合に厳密な制限ができないからです。大文字と小文字を区別しない演算子を使用すれば、より厳密な制限が可能です。詳細については、条件演算子 をご参照ください。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_equal_ignore_case":{"cos:content-type":"image/jpeg"}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_not_equal_ignore_case_if_exist":{"cos:content-type":"image/jpeg"}}}]}
response-content-typeを追加し、レスポンスのContent-Typeヘッダーの値を設定するために用いることができます。cos:response-content-typeを使用すると、リクエストにリクエストパラメータresponse-content-typeのパラメータ値を必ず含めるかどうかを制限することができます。response-content-typeはリクエストパラメータであるため、リクエストの送信時にurlencodeを経る必要があり、response-content-type=image%2Fjpegとなります。そのため、Policyを設定する際は、「image/jpeg」にもurlencodeを行って「image%2Fjpeg」と入力する必要があります。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_equal":{"cos:response-content-type":"image%2Fjpeg"}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:GetObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_not_equal_if_exist":{"cos:response-content-type":"image%2Fjpeg"}}}]}
cos:secure-transportを使用して、リクエストが必ずHTTPSプロトコルを使用するよう制限することができます。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"bool_equal":{"cos:secure-transport":"true"}}}]}
{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["*"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"bool_equal":{"cos:secure-transport":"false"}}}]}
x-cos-storage-classによって、オブジェクトをアップロードする際にストレージタイプを指定したり、オブジェクトのストレージタイプを変更したりすることができます。cos:x-cos-storage-classによって、リクエストヘッダーx-cos-storage-classを制限し、それによりストレージタイプを変更する可能性のあるリクエストを制限することができます。STANDARD、MAZ_STANDARD, STANDARD_IA、MAZ_STANDARD_IA、INTELLIGENT_TIERING、MAZ_INTELLIGENT_TIERING、ARCHIVE、DEEP_ARCHIVEがあります。STANDARDとするよう制限します。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_equal":{"cos:x-cos-storage-class":"STANDARD"}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_not_equal_if_exist":{"cos:x-cos-storage-class":"STANDARD"}}}]}
x-cos-aclを使用すると、オブジェクトのアップロード、バケットの作成時にアクセス制御リスト(ACL)を指定するか、またはオブジェクト、バケットACLを変更することができます。ACLに関する説明については、ACLの概要をご参照ください。private、public-read、public-read-write、authenticated-read。default、private、public-read、authenticated-read、bucket-owner-read、bucket-owner-full-control。cos:x-cos-aclによって、リクエストヘッダーx-cos-aclを制限し、それによりオブジェクトまたはバケットACLを変更する可能性のあるリクエストを制限することができます。privateとするよう要求します。{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_equal":{"cos:x-cos-acl":"private"}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:PutObject"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_not_equal_if_exist":{"cos:x-cos-acl":"private"}}}]}
cos:prefixによってリクエストパラメータprefixを制限することができます。/など)の場合は、バケットポリシーに書き込む前にurlencodeを経る必要があります。folder1/である必要があります。prefixの値には特殊文字/が含まれるため、バケットポリシーに記述する前にurlencodeする必要があります。したがって、ポリシー内の記述はfolder1%2Fとなります。{"statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["name/cos:GetBucket"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_equal":{"cos:prefix":"folder1%2F"}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["name/cos:GetBucket"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"string_not_equal_if_exist":{"cos:prefix":"folder1%2F"}}}],"version":"2.0"}
cos:tls-versionによってHTTPSリクエストのTLSバージョンを制限することができます。この条件キーはNumricタイプであり、1.0、1.1、1.2などの浮動小数点数の入力が可能です。リクエストのシナリオ | 予測 |
HTTPSリクエスト、TLSバージョンは1.0 | 403、失敗 |
HTTPSリクエスト、TLSバージョンは1.2 | 200、成功 |
{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["*"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_equal":{"cos:tls-version":1.2}}}]}
リクエストのシナリオ | 予測 |
HTTPSリクエスト、TLSバージョンは1.0 | 403、失敗 |
HTTPSリクエスト、TLSバージョンは1.2 | 200、成功 |
{"version":"2.0","statement":[{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"allow","action":["*"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_greater_than_equal":{"cos:tls-version":1.2}}},{"principal":{"qcs":["qcs::cam::uin/100000000001:uin/100000000002"]},"effect":"deny","action":["*"],"resource":["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition":{"numeric_less_than_if_exist":{"cos:tls-version":1.2}}}]}
qcs:request_tagによって、ユーザーがPutBucket、PutBucketTaggingリクエストを送信する際に、必ず指定したバケットタグを含めるよう制限することができます。<a,b>および<c,d>を設定した場合にのみ権限を取得できるよう制限するものです。for_any_value:string_equalはAとBに共通部分が存在する場合に発効することを表します。for_any_value:string_equalはAがBのサブセットである場合に発効することを表します。for_any_value:string_equalを使用する場合、対応するポリシーとリクエストは次のように表されます。リクエストのシナリオ | 予測 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b&c=d | 200、成功 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b | 200、成功 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b&c=d&e=f | 200、成功 |
{"version": "2.0","statement":[{"principal":{"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "allow","action":["name/cos:PutBucket"],"resource": "*","condition":{"for_any_value:string_equal":{"qcs:request_tag": ["a&b","c&d"]}}}]}
for_all_value:string_equalを使用する場合、対応するポリシーとリクエストは次のように表されます。リクエストのシナリオ | 予測 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b&c=d | 200、成功 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b | 200、成功 |
PutBucket、リクエストヘッダー x-cos-tagging: a=b&c=d&e=f | 403、失敗 |
{"version": "2.0","statement":[{"principal":{"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "allow","action":["name/cos:PutBucket"],"resource": "*","condition":{"for_all_value:string_equal": {"qcs:request_tag": ["a&b","c&d"]}}}]}
x-cos-forbid-overwriteを付与し、その値が文字列trueである必要があります。{"version": "2.0","statement": [{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "allow","action": ["name/cos:PutObject"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition": {"string_equal": {"cos:x-cos-forbid-overwrite": "true"}}},{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "deny","action": ["name/cos:PutObject"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition": {"string_not_equal_if_exist": {"cos:x-cos-forbid-overwrite": "true"}}}]}
{"version": "2.0","statement": [{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "deny","action": ["*"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition": {"string_equal": {"cos:host": "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com"}}},{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "allow","action": ["*"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"],"condition": {"string_not_equal": {"cos:host": "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com"}}}]}
{"version": "2.0","statement": [{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "allow","action": ["name/cos:GetObject"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/folder1/*"],"condition": {"string_equal": {"cos:host": "mydomain1.com"}}},{"principal": {"qcs": ["qcs::cam::uin/100000000001:uin/100000000002"]},"effect": "deny","action": ["name/cos:GetObject"],"resource": ["qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/folder1/*"],"condition": {"string_not_equal": {"cos:host": "mydomain1.com"}}}]}
cos:object-lock-modeを使用することで、ユーザーがオブジェクトをアップロードする際に必ずオブジェクトロックを設定し、指定したロックモードを使用するように制限できます。{"statement": [{"action": ["name/cos:PutObject","name/cos:InitiateMultipartUpload","name/cos:PutObjectRetention"],"effect": "allow","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"string_equal": {"cos:object-lock-mode": "COMPLIANCE"}}}],"version": "2.0"}
cos:object-lock-remaining-retention-daysを使用することで、ユーザーがオブジェクトをアップロードする際に必ずオブジェクトロックを設定し、一定のロック日数を設定するように制限できます。ロック日数(B)= 切り捨て[(ts1 - ts2)/(3600*24)]
{"statement": [{"action": ["name/cos:PutObject","name/cos:InitiateMultipartUpload","name/cos:PutObjectRetention"],"effect": "allow","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"numeric_greater_than": {"cos:object-lock-remaining-retention-days": 3}}}],"version": "2.0"}
条件キー | 意味 | リクエスト時の現在時刻 | 入力パラメータ:retain-until-dateの有効な日時 | 備考 |
"numeric_equal": { "cos: x-cos-object-lock-remaining-retention-days": 3 } | 3日に等しい | 2022-11-01T12:00:00Z | [ 2022-11-04T12:00:00Z, 2022-11-05T11:59:59Z ] | 閉区間 |
"numeric_greater_than": { "cos: x-cos-object-lock-remaining-retention-days": 3 } | 3日より大きい(3日を含まない) | 2022-11-01T12:00:00Z | [ 2022-11-05T12:00:00Z, 以降 ] | 閉区間 |
"numeric_less_than": { "cos: x-cos-object-lock-remaining-retention-days": 3 } | 3日未満(3日を含まない) | 2022-11-01T12:00:00Z | [ 2022-11-01T12:00:01Z, 2022-11-04T11:59:59Z ] | 閉区間 |
cos:object-lock-retain-until-dateを使用することで、ユーザーがオブジェクトをアップロードする際に必ずオブジェクトロックを設定し、秒単位で指定された保持期限を設定するように制限することができます。2022-11-11T12:00:00Zより後に設定する必要があることを示しています。{"statement": [{"action": ["name/cos:PutObject","name/cos:InitiateMultipartUpload","name/cos:PutObjectRetention"],"effect": "allow","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"date_greater_than": {"cos:object-lock-retain-until-date": "2022-11-11T12:00:00Z"}}}],"version": "2.0"}
条件キー | 対応リクエストヘッダー |
cos:x-cos-grant-full-control | x-cos-grant-full-control |
cos:x-cos-grant-read | x-cos-grant-read |
cos:x-cos-grant-write | x-cos-grant-write |
cos:x-cos-grant-read-acp | x-cos-grant-read-acp |
cos:x-cos-grant-write-acp | x-cos-grant-write-acp |
"記号が含まれる場合があり、ポリシー記述時には文字列として指定する必要があるため、エスケープ\\"を使用してください。{"statement": [{"action": ["name/cos:PutObject","name/cos:PostObject","name/cos:AppendObject","name/cos:InitiateMultipartUpload"],"effect": "allow","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"string_equal": {"cos:x-cos-grant-full-control": "id=\\"100000000001\\""}}},{"action": ["name/cos:PutObject","name/cos:PostObject","name/cos:AppendObject","name/cos:InitiateMultipartUpload"],"effect": "deny","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"string_not_equal_if_exist": {"cos:x-cos-grant-full-control": "id=\\"100000000001\\""}}}],"version": "2.0"}
{"statement": [{"action": ["name/cos:PutObject","name/cos:PostObject","name/cos:AppendObject","name/cos:InitiateMultipartUpload"],"effect": "allow","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"string_equal_if_exist": {"cos:x-cos-grant-full-control": ""}}},{"action": ["name/cos:PutObject","name/cos:PostObject","name/cos:AppendObject","name/cos:InitiateMultipartUpload"],"effect": "deny","principal": {"qcs": ["qcs::cam::uin/1250000000:uin/1250000001"]},"resource": ["qcs::cos:ap-beijing:uid/1250000000:bjtest-1250000000/*"],"condition": {"string_not_equal": {"cos:x-cos-grant-full-control": ""}}}],"version": "2.0"}
フィードバック