未解決
35 メッセージ
1
718
【ECS解説第10回】ECS3.5の新しい機能(2) - オブジェクトタギング(Object Tagging)
皆さん、こんにちは。
第8回でECS V3.5の新しい機能をご紹介しS3 IAMの動作についてお伝えし、前回、V3.5のCommunity Editionのリリースについてご案内しました。今回も引き続きV3.5の機能の一つをご紹介したく思います。
第8回でオブジェクトタギングについて次のようにご紹介していました。
『「オブジェクトタギング」はオブジェクトファイルに付与できるメタデータの一つですが、オブジェクトタギングは付与するオブジェクトファイルのバージョンを変更しないという特性があります。S3の従来のメタデータがオブジェクトファイルのバージョンをアップデートするため、バージョニングをイネーブルにしているバケットなどでは、既存のオブジェクトファイルにメタデータを付与すると、新しいバージョンのオブジェクトファイルが作成されることになります。
また、IAM ポリシーを使ってオブジェクトに付与されたオブジェクトタグを見て、アクセスを許可するなどオブジェクトの管理を緻密にコントロールすることにも利用できます。』
Amazon S3では2016年に機能実装されご利用の方もいらっしゃると思います。主な特徴は以下のようになります。
- ObjectごとにMetadataのようにKey:Value形式で付与できる
- ライフサイクルポリシーがバケット内すべてのオブジェクトに適用されるが、オブジェクトタギングを用いてライフサイクルポリシーを設定できる
- クロスリージョンのレプリケーション対象の選択に利用できる
- マルチパートアップロードにも対応
- アクセス許可ポリシーにタグを用いた権限設定を行える(IAM Policy)
[参考] https://dev.classmethod.jp/articles/s3-object-tagging/
エンタープライズ製品の位置づけにあるECSには原則的にローカルデータセンターで完結するリージョンのような実装はなく、そのためリージョン間でのコピーという実装がないため、c.項のクロスリージョンレプリケーションという機能実装がありません。代わりに、ストレージ実装として標準的な、サイト間でデータ一貫性を保つレプリケーション(GeoReplication)機能を実装しています。このため、ECSのオブジェクトタギングでは機能実装されていません。
[参考] 【Ask the Expert 】エキスパートに聞こう!ECS のイロハ - Dell Community
制限事項は下記のようになります。
- オブジェクトあたり10タグまで付与可能
- キーとしてUnicodeで128文字以内
- バリューとして256文字以内
AWS S3と互換性のある機能ですので、aws S3apiのObject Tagging関連のコマンドが利用可能です。オブジェクトにオブジェクトタグをつけてみましょう。
> aws s3api put-object-tagging --bucket bucket2 --key rn1_DetailedErrMsg.txt --endpoint-url http://ecs1-1500.ecs.com --tagging 'TagSet=[{Key=objtag,Value=test}]'
付与されたオブジェクトタグを表示すると次のように表示されます。
> aws s3api get-object-tagging --bucket bucket2 --key rn1_DetailedErrMsg.txt --endpoint-url http://ecs1-1500.ecs.com
{
"TagSet": [
{
"Key": "objtag",
"Value": "test"
}
]
}
S3 Browserで表示させると次のように表示されます。
ListObjectsコマンド(aws s3api list-objects)では、ヘッダー情報が表示されますが、オブジェクトタグは表示されません。試されたという記事の中でも触れられているところがあり、オブジェクトの分類などに使用する際の工夫に言及されている記事もありますので、ご興味をお持ちの方はぜひ調べていただければと思います。
ここまではECSのLegacy Userとして設定したns2userの管理下で処理をしました。それではns2userがOwnerのbucket2ならびにオブジェクトタグを付与したrn1_DetailedErrMsg.txt へのアクセス権を他のユーザーに付与してみます。オブジェクトタギングを使用したアクセス権のコントロールの動作確認となります。
S3 IAMユーザーのns2iamlogs3にPolicy “bucket2”を設定し、実行してみました。
IAMユーザーにはPolicy設定が可能で、いろいろと設定方法はありますが、ここではECS管理用のポータル画面からPolicyを設定しました。ここで設定しているIAMFullAccess権限を外せば、ns2iamlogs3ユーザーは自身ではアクセス権に対して何もできなくなりますので、確実にコントロール可能になります。また、この設定ではlistObjectsコマンドもAccessDeniedになります。実行可能な権限付与については後述します。設定したbucket2というPolicyは条件に合うオブジェクトタグを持つオブジェクトのGETだけが可能な設定となっています。
この状態で拡張子がtxtのオブジェクトだけを一覧させてみても、AccessDeniedで表示ができません。ユーザーをns2userからns2iamlogs3に変更するため、aws configureでアクセスキーとシークレットアクセスキーをns2iamlogs3に払い出したものに変更し、以下のListObjectsV2コマンドを実行しました。
> aws s3api --endpoint http://ecs1-1500.ecs.com list-objects-v2 --bucket bucket2 --query "Contents[?contains(Key, 'txt')]
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
直接、オブジェクトをGETすると成功します。
> aws s3api --endpoint http://ecs1-1500.ecs.com get-object --bucket bucket2 --key rn1_DetailedErrMsg.txt temp.txt
{
"LastModified": "2020-09-07T08:54:58+00:00",
"ContentLength": 340,
"ETag": "\"62257844a6abbe14ccb5bbe563bf6d20\"",
"ContentType": "application/octet-stream",
"Metadata": {
"geodrive.common.encoding": " none default none
ncryption> 340 ",
"geodrive.windows.attr": "ZQAEAABKAAAABAAACgAAAInsSkyb84TWAQUEAQAKAAAAiaZMyWr0hNYBBQQCAAoAAACJJ+nGavSE1gEFBAMACgAAAImVCfhz9ITWAQVpICQAAAUEAQ
AsAAAABAAACgAAAIkAEAAAAAAAAAUEAQAKAAAAiVQBAAAAAAAABWkBAAAAKQApAAUF",
"geodrive.windows.secdesc": "ZQCsD0RFU0tUT1AtVEo1QlZNQ6kYAQQAAAAAAAUVAAAApdt195VqxYXve2pDqbwBABSEFAAAADAAAAAAAAAATAAAAAEFAAAAAAAFFQAAAKXbdfe
VasWF73tqQ+kDAAABBQAAAAAABRUAAACl23X3lWrFhe97akPpAwAAAgBwAAQAAAAAECQA/wEfAAEFAAAAAAAFFQAAAKXbdfeVasWF73tqQ+kDAAAAEBQA/wEfAAEBAAAAAAAFEgAAAAAQGAD/AR8
AAQIAAAAAAAUgAAAAIAIAAAAQGACpABIAAQIAAAAAAAUgAAAAIQIAAAU="
},
"TagCount": 1
}
出力ファイルを確認し、出力しました。
> dir temp.txt
ディレクトリ: C:\Users\Administrator
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/06/13 16:27 340 temp.txt
> cat temp.txt
Site=DESKTOP-44HFI8J File=atmos.cpp Line=8373 Revision=-v2.1.1.4
Severity=WARNING Category=0 Process=Server Error=3221225523:3221225523 - Object Name invalid.
<後略>
次にオブジェクトタグを持たないオブジェクトをGETできるか確認しました。
> aws s3api --endpoint http://ecs1-1500.ecs.com get-object --bucket bucket2 --key rn1_ECS_VDC2_Install-20191219.log temp.tx
t
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
GETはAccessDeniedで成功しませんでしたので、アクセスコントロールされていることがわかります。
さて、aws s3api list-objects (S3:listObjects) が使えないと不便なので、listbucket2というポリシーを追加してみました。ListObjectsそのものの権限はないので、bucket2に対してListBucket権限を付与するPolicyになります。
bucket2内のオブジェクトの一覧は表示可能になり、かつ、object tagが指定通りセットされていないオブジェクトにはアクセスができなくなります。
> aws s3api --endpoint http://ecs1-1500.ecs.com list-objects-v2 --bucket bucket2 --query "Contents[?contains(Key, 'txt')]"
[
{
"Key": "BenchTest/IOR/src/C/Result-Multi16ParaNode-1TB-h500-SingleIP.txt",
"LastModified": "2020-09-10T07:11:16.442000+00:00",
"ETag": "\"450cc1acf8882385e53131b1f398453e\"",
"Size": 5675,
"StorageClass": "STANDARD"
},
{
"Key": "BenchTest/IOR/src/C/Result-Multi16ParaNode-1TB-h500.txt",
"LastModified": "2020-09-10T07:11:16.108000+00:00",
"ETag": "\"5427a066f62eb8e6ab6a699bfd47cf57\"",
"Size": 5673,
"StorageClass": "STANDARD"
},
<後略>
オブジェクトタグを設定していないオブジェクト rn1_ECS_VDC2_Install-20191219.log をGETしてみるとAccessDeniedで成功しません。
> aws s3api --endpoint http://ecs1-1500.ecs.com get-object --bucket bucket2 --key rn1_ECS_VDC2_Install-20191219.log temp.txt
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
このようにオブジェクトタグを使用することでオブジェクトの分類やライフサイクル管理のみならず、S3 IAMユーザーに対するオブジェクト共有のためのアクセス管理という観点でも利用することが可能なことがわかります。
ECSにはMetadataとMetadata Searchという機能が以前より実装されています。ドキュメントデータ(オブジェクト)管理をご検討のお客様からもお問い合わせをいただくことがありますが、ドキュメントデータに対するタグ付けとアクセス管理という観点で、オブジェクトストレージの採用をご検討のお客様もいらっしゃいます。今回ご紹介したECS V3.5の新機能である、オブジェクトタギングは同じくS3IAMユーザーのポリシーとの組み合わせで、このようなご利用を可能にする機能と言えます。
今回、ここまでお付き合いいただきありがとうございます。ご興味を持っていただけましたら何よりです。
杉本 直之
デルテクノロジーズ株式会社
UDS事業本部SE部