1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM CloudAdvent Calendar 2024

Day 4

IBM Cloud Object Storage(ICOS)に定義された権限

Last updated at Posted at 2024-12-11

はじめに

こちらの記事は下記Advent Calendar 2024で紹介しているIBM Cloud権限設定における Cloud Object Storage(ICOS) になります。

共通権限は割愛

こちらの記事に記載しているように、プラットフォーム・アクセス、サービス・アクセスの権限でそれぞれどのようなものが共通して設定されているかを紹介させて頂きました。

こちらの記事では共通部分で出現する権限を除いた各サービス毎の権限設定を紹介します。

ICOSで指定可能な権限のアクセス範囲

image.png
image.png

  • リソース・グループ
  • サービス・インスタンス
  • リソースID
  • リソース・タイプ
  • Prefix
  • Delimiter
  • Path

リソース・グループの指定

これは指定されたリソース・グループに所属するICOSのみに対してアクセス権限を適用します。異なるリソース・グループのICOSに対しては別途権限を設定する必要があります。

サービス・インスタンスの指定

これは既に作成されたICOSのインスタンスを指定して許可を与えることが可能です。勝手に新しいインスタンスを作成しないようにする、予期せぬインスタンスに保管しないようにするといった対策が必要な場合は利用しても良いですね。

リソースID リソース・タイプの指定

これはちょっとトリッキーでセットになっています。リソース・タイプに bucketを指定して、リソースIDにbucket名を指定することで、特定のBucketのみに権限を与えることが可能です。

Prefixの指定

これは指定された文字列から開始されるオブジェクトのみに権限が与えられます。
例えばファイルサーバのように folder1/subfolder1/test.txtといった階層管理のようにICOSに保管をしている場合、Prefixに folder1/を指定すると、その階層を含む環境でしかファイルの配置、削除ができなくなります。

Delimierの指定

これは先のPrefixと組合せで利用します。先のPrefixで folder1/を指定し、かつDelimiterで /を指定すると、 folder1/sample.txtはアクセス可能ですが、folder1/subfolder1/test.txtといったもう1階層深い部分にはアクセスできなくなります。この場合、Prefixで folder1/subfolder1/を追加するか、Delimiterの指定をしない、といった対応が必要です。

Pathの指定

これは条件指定に*(ワイルドカード)が利用可能になります。条件指定で stringMatchもしくは stringMatchAnyOfを選択して値を設定することで柔軟な条件指定が可能になります。

ICOSの権限範囲の指定は複雑さがかなり高い(自由度が高いとも言える)ので、下記で公開されている方法を念入りに確認することをお勧めします。

ICOSに設定された権限

プラットフォーム・アクセスの権限

※Admin : Administrator, KM : Key Manager, SCR : Service Configuration Reader

権限 Viewer Operator Editor Admin KM SCR
cloud-object-storage.cip.read

プラットフォーム・アクセスとして設定されているICOSの権限はService Configuration Readerの権限のみで、基本的には共通する権限部分に準ずるという形ですね。

サービス・アクセスの権限

ICOSのサービス・アクセスの権限はかなり多いです。いったんまとめて記載します。

権限 Reader Writer Manager Object Reader Content Reader Object Writer
cloud-object-storage.bucket.get
cloud-object-storage.bucket.head
cloud-object-storage.bucket.put_bucket
cloud-object-storage.bucket.post_bucket
cloud-object-storage.bucket.delete_bucket
cloud-object-storage.account.delete_fasp_connection_info
cloud-object-storage.account.get_account_buckets
cloud-object-storage.bucket.get_acl
cloud-object-storage.bucket.put_acl
cloud-object-storage.bucket.get_activity_tracking
cloud-object-storage.bucket.put_activity_tracking
cloud-object-storage.bucket.get_basic
cloud-object-storage.bucket.get_cors
cloud-object-storage.bucket.put_cors
cloud-object-storage.bucket.delete_cors
cloud-object-storage.bucket.get_fasp_connection_info
cloud-object-storage.bucket.get_firewall
cloud-object-storage.bucket.put_firewall
cloud-object-storage.bucket.get_lifecycle
cloud-object-storage.bucket.put_lifecycle
cloud-object-storage.bucket.get_location
cloud-object-storage.bucket.get_metrics_monitoring
cloud-object-storage.bucket.put_metrics_monitoring
cloud-object-storage.bucket.get_object_lock_configuration
cloud-object-storage.bucket.put_object_lock_configuration
cloud-object-storage.bucket.get_protection
cloud-object-storage.bucket.put_protection
cloud-object-storage.bucket.get_protection_management
cloud-object-storage.bucket.put_protection_management
cloud-object-storage.bucket.get_public_access_block
cloud-object-storage.bucket.put_public_access_block
cloud-object-storage.bucket.delete_public_access_block
cloud-object-storage.bucket.get_quota
cloud-object-storage.bucket.put_quota
cloud-object-storage.bucket.get_replication
cloud-object-storage.bucket.put_replication
cloud-object-storage.bucket.delete_replication
cloud-object-storage.bucket.get_uploads
cloud-object-storage.bucket.get_versioning
cloud-object-storage.bucket.put_versioning
cloud-object-storage.bucket.get_versions
cloud-object-storage.bucket.get_website
cloud-object-storage.bucket.put_website
cloud-object-storage.bucket.delete_website
cloud-object-storage.bucket.list_bucket_crn
cloud-object-storage.bucket.list_crk_id
cloud-object-storage.object.get
cloud-object-storage.object.head
cloud-object-storage.object.post
cloud-object-storage.object.put
cloud-object-storage.object.delete
cloud-object-storage.object.copy
cloud-object-storage.object.copy_get
cloud-object-storage.object.copy_get_version
cloud-object-storage.object.copy_part
cloud-object-storage.object.copy_part_get
cloud-object-storage.object.copy_part_get_version
cloud-object-storage.object.get_acl
cloud-object-storage.object.put_acl
cloud-object-storage.object.get_acl_version
cloud-object-storage.object.put_acl_version
cloud-object-storage.object.get_legal_hold
cloud-object-storage.object.get_object_lock_legal_hold
cloud-object-storage.object.get_object_lock_legal_hold_version
cloud-object-storage.object.get_object_lock_retention
cloud-object-storage.object.get_object_lock_retention_version
cloud-object-storage.object.get_tagging
cloud-object-storage.object.put_tagging
cloud-object-storage.object.delete_tagging
cloud-object-storage.object.get_tagging_version
cloud-object-storage.object.put_tagging_version
cloud-object-storage.object.delete_tagging_version
cloud-object-storage.object.get_uploads
cloud-object-storage.object.delete_upload
cloud-object-storage.object.get_version
cloud-object-storage.object.head_version
cloud-object-storage.object.delete_version
cloud-object-storage.object.post_complete_upload
cloud-object-storage.object.post_extend_retention
cloud-object-storage.object.post_initiate_upload
cloud-object-storage.object.post_legal_hold
cloud-object-storage.object.post_md
cloud-object-storage.object.post_multi_delete
cloud-object-storage.object.put_object_lock_legal_hold
cloud-object-storage.object.put_object_lock_legal_hold_version
cloud-object-storage.object.put_object_lock_retention
cloud-object-storage.object.put_object_lock_retention_version
cloud-object-storage.object.put_part
cloud-object-storage.object.restore
cloud-object-storage.object.restore_version

長い!

Readerの権限は、GET,HEAD要求に限定しているのに対して、Writer、ManagerからPOST,PUT,DELETE要求が可能と当たり前になっています。

便利な点として役割に Object Reader, Content Reader, Object Writerがある点でしょうか。

Object Readerの権限

  • cloud-object-storage.object.get
  • cloud-object-storage.object.head
  • cloud-object-storage.object.copy_get_version
  • cloud-object-storage.object.copy_part_get_version
  • cloud-object-storage.object.get_version
  • cloud-object-storage.object.head_version

ICOS上に配置されたObjectの取得のみに焦点をおいた権限なので、バッチ処理的にICOS上のファイルを取得して処理するようなプログラム実行時に渡す権限は、Reader権限まで渡さずともObject Readerのみで十分かもしれません。先のアクセス範囲の指定で対象のBucketまで指定するとかなり最小限の権限付与が出来そうですね。

Content Readerの権限

  • cloud-object-storage.bucket.get
  • cloud-object-storage.bucket.head
  • cloud-object-storage.bucket.get_location
  • cloud-object-storage.bucket.get_versions
  • cloud-object-storage.object.get
  • cloud-object-storage.object.head
  • cloud-object-storage.object.copy_get_version
  • cloud-object-storage.object.copy_part_get_version
  • cloud-object-storage.object.get_version
  • cloud-object-storage.object.head_version

Object Readerと比べるとBucketの情報自体にアクセスできる点が異なります。

Object Writerの権限

  • cloud-object-storage.object.post
  • cloud-object-storage.object.put
  • cloud-object-storage.object.put_tagging
  • cloud-object-storage.object.delete_tagging
  • cloud-object-storage.object.put_tagging_version
  • cloud-object-storage.object.delete_tagging_version
  • cloud-object-storage.object.get_uploads
  • cloud-object-storage.object.delete_upload
  • cloud-object-storage.object.post_complete_upload
  • cloud-object-storage.object.post_initiate_upload
  • cloud-object-storage.object.post_md
  • cloud-object-storage.object.put_object_lock_legal_hold
  • cloud-object-storage.object.put_object_lock_legal_hold_version
  • cloud-object-storage.object.put_object_lock_retention
  • cloud-object-storage.object.put_object_lock_retention_version
  • cloud-object-storage.object.put_part

Object Readerの真逆でObjectの書込みに特化した権限になります。参照系の権限はほぼ無いのでファイルの書込み専用になります。
先のように定期的にファイルを書き込む処理がある場合にWriter権限を与えてしまうと、Bucket自体を新規作成したり削除したりBucketの設定を一部書き換えたり、割と強い権限を与える形になります。Object Writerの権限をうまく利用できれば、不必要に強いWriterの権限を付与せずにすみます。

さいごに

ICOSで定義可能なサービス・アクセスの権限は多いほうだったと思います。
ただ、指定可能な役割がICOS独自に拡張しているので、不用意にReader,Writerといった何でも参照できたり、いろいろ削除してしまえるような権限を付与することなく必要最低限の権限を付与できそうなところが良いですね。

またICOSで指定可能なアクセス範囲は応用ができそうで、IBM Cloudの提供するサービスの中でもかなり細かく定義できる部類になります。

ICOSは利用者も多く、権限設定も手間なのでReader,Writerといった権限を付与しがちですが、最低限の権限付与を目指すのであれば、今回紹介した役割やアクセス範囲を活用して権限設定して頂けたらと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?