皆さん、初めまして。SBクラウド エンジニアのTKと申します。
DropboxやGoogle Driveなどのクラウドストレージプロダクトが一般的に普及し始めた昨今、ビジネスシーンやプライベートにおいて様々なデータが共有して活用されております。
Alibaba CloudでもObject Storage Service(OSS)が提供されており、Dropbox的に誰でも共有して使用することが可能です。 ただ、データ共有によって、不特定多数のユーザーから情報が見えることで、情報漏洩などのセキュリティ観点での懸念を持たれている方もいらっしゃるのではないでしょうか。
本記事では、特定ユーザーだけが特定フォルダを操作できる対処方法について、 OSSのACLとRAMのアクセス制御を組み合わせた設定を通じてご紹介いたします。
Object Storage Service(OSS)とは Alibaba Cloudによって提供されるプロダクトの一つで、大規模で安全性/コスト効率/信頼性の高いクラウドストレージプロダクトになります。 OSSはプラットフォームから独立したAPIを使用し、99.99999999%のプロダクト永続性をサポートし、任意のタイプのデータをいつでも、どこでも、どんなアプリケーションでも格納してアクセスできます。 OSSでは一般的なファイルやディレクトリをオブジェクトと呼び、オブジェクトをフラット構造で管理するオブジェクトストアの仮想部分(メインディレクトリ)をバケットと呼びます。
Resource Access Management(RAM)とは ユーザーIDの管理とアクセス制御のためのAlibaba Cloudのプロダクトです。 RAMを使用すると、ユーザーアカウント(従業員、システム、アプリケーションなど)を作成および管理し、Alibaba Cloudアカウントのリソースに対してそのユーザーアカウントが所有する操作権限を制御できます。
従いまして、企業の複数ユーザーが共同でリソースを操作する必要がある状況においても、Alibaba Cloudアカウントのアクセスキーを他のユーザーと共有する必要がなくなります。 ユーザーには作業に必要な最小限の権限を付与できるため、企業のセキュリティリスクが軽減されます。
具体的な制限を実現する為の、OSS、RAMユーザーを作成し、OSSのACL設定方法、RAMユーザーへのポリシーの適用方法についてご説明していきます。
アクセス制限内容 | 設定方法 |
全ユーザーがバケットへ アクセスできなくする | 【OSS側設定】 ACLを非公開にする |
特定のユーザーのみがバケットの ファイルを読み書き・削除可能にする | 【OSS側設定】 ACLを非公開にする |
【RAM側設定】 特定のユーザーに対してバケットへの 読み書き・削除許可権限を付与する | |
特定のユーザーのみがバケットの ファイルを読み取りのみ可能にする | 【OSS側設定】 ACLを非公開にする |
【RAM側設定】 特定のユーザーに対してバケットへの 読み取り許可権限を付与する | |
特定のユーザーのみが特定ファイルを 読み書き・削除可能にする | 【OSS側設定】 ACLを非公開にする |
【RAM側設定】 特定のユーザーに対して特定オブジェクトへの 読み書き・削除許可権限を付与する |
今回は、下図の様な環境を構築していきます。
1.アクセス制御テスト環境の作成 1-1.OSS作成 まずはOSS管理のトップページから[バケット作成]をクリックして、バケットを作成します。 その際、ACLは非公開にして作成します。 ※ACLを非公開にすると、バケットの作成者のみがバケット内のファイルの読み書き・削除操作を実行することができ、他のユーザーはファイルにアクセスできなくなります。
1-2.RAMユーザーの作成 RAM管理のユーザータブから[新規ユーザー作成]をクリックして、RAMユーザーを作成します。
2.アクセス制限用ポリシーの作成 RAMユーザーに適用するポリシーは、[権限付与ポリシー管理]上で管理されています。
バケットへのアクセス許可をする標準ポリシーも存在しますが、今回は、特定のバケットとオブジェクトへのアクセス許可をする必要がある為、ポリシーを新規で作成していきます。
[カスタマイズ権限付与ポリシー]タブから[権限付与ポリシーを作成]をクリックします。
[空白のテンプレート]をクリックします。
ポリシー名、ポリシー内容を入力して、[権限付与ポリシーを作成]をクリックします。
ポリシーの基本要素は下表の通りとなります。
要素 | 設定内容 |
Effect | Allow および Deny |
Resource | 対象となるリソース |
Action | リソースに対する操作 |
Condition | 権限付与が有効になる条件 |
今回は以下3つのポリシーを作成しました。 ・ポリシー1:バケットへの読み書き、削除許可(バケット フル権限) ・ポリシー2:バケットへの読み取りのみ許可(バケット Read only権限) ・ポリシー3:オブジェクトへの読み書き、削除許可(オブジェクト フル権限)
ポリシー1:バケットへの読み書き、削除許可ポリシーは以下の記述となります。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":"oss:ListBuckets", "Resource":"acs:oss:*:*:*" }, { "Effect":"Allow", "Action":["oss:ListObjects","oss:GetBucketAcl"], "Resource":"acs:oss:*:*:oss-access-test" }, { "Effect":"Allow", "Action":"oss:*", "Resource":"acs:oss:*:*:oss-access-test/*" } ] }
以上でアクセス制御用ポリシーの作成は完了となります。
3.アクセス制限テスト 今回のアクセス制限テストでは、バケットを非公開にした状態でRAMユーザーに対して各アクセス許可ポリシーを適用した場合、バケットおよびオブジェクトへのアクセス制御がどの様に変化するかを確認していきます。
3-1.バケットへのアクセス制限テスト 3-1-1.バケットへのアクセス可否を確認 RAMユーザーでログインし、OSSへアクセスします。
バケットが非公開になっている為、バケットが何も表示されない(アクセスできない)ことが確認できます。
3-1-2.バケットへの読み書き、削除可否を確認 RAM管理画面の[ユーザー]タブからRAMユーザーの[許可]をクリックして、バケットへの読み書き、削除許可するポリシーを適用します。
適用後に再度、RAMユーザーでログインし、OSSへアクセスします。 アクセス許可ポリシーの適用により、バケットが表示される(アクセスできる)ことが確認できます。
次に、[アップロード]をクリックして、ファイルのアップロードをします。
バケット上にオブジェクト(ファイル)が追加されている(書き込みできる)ことが確認できます。
次に、ファイルを選択(ファイル左のチェックを入れる)して、[削除]をクリックします。
バケット上のファイルが削除されたことを確認できました。
3-1-3.バケットへの読み取り可否を確認 RAM管理画面の[ユーザー]タブからRAMユーザーの[許可]をクリックして、バケットへの読み取りのみ許可するポリシーを適用します。
RAMユーザーでログインし、OSSへアクセスします。
アクセス許可ポリシーの適用により、バケットが表示される(アクセスできる)ことが確認できます。
次に、[アップロード]をクリックして、ファイルのアップロードをします。 アップロードタスクが失敗し、ファイルがアップロードできない(書き込みできない)ことが確認できます。
次に、ファイルを選択(ファイル左のチェックを入れる)して、[削除]をクリックします。
エラーメッセージが表示されて、削除できないことを確認できました。
3-2.オブジェクト(ディレクトリ)へのアクセス制限テスト 3-2-1.オブジェクト(ディレクトリ1)への読み書き、削除可否を確認 RAM管理画面の[ユーザー]タブからRAMユーザーの[許可]をクリックして、ディレクトリ1への読み書き、削除許可するポリシーを適用します。
RAMユーザーでログインし、OSSへアクセスします。
アクセス許可ポリシーの適用により、バケットが表示される(アクセスできる)ことが確認できます。
次に、[アップロード]をクリックして、ファイルのアップロードをします。 アップロードタスクが失敗し、バケットへアップロードできない(書き込みできない)ことが確認できます。削除も同様に失敗します。
次に、オブジェクト[directory1]をクリックして、ディレクトリ1へ移動します。
[アップロード]をクリックして、ファイルのアップロードをします。
オブジェクト(ディレクトリ1)上にオブジェクト(ファイル)が追加されている(書き込みできる)ことが確認できます。削除も同様にできます。
次に、オブジェクト[directory2]をクリックして、ディレクトリ2へ移動します。
[アップロード]をクリックして、ファイルのアップロードをします。
アップロードタスクが失敗し、ファイルがアップロードできない(書き込みできない)ことが確認できます。削除も同様に失敗します。
以上のテスト結果をまとめますと下表の通りとなります。
対象 | ポリシー 未適用 | 読み書き、削除ポリシー適用 | 読み取りのみ ポリシー適用 | |
バケットへ許可 | ディレクトリ1へ 許可 | バケットへ許可 | ||
バケット | アクセス 不可能 | 読み書き、削除 可能 | 読み取りのみ 可能 | 読み取りのみ 可能 |
ディレクトリ1 | アクセス 不可能 | 読み書き、削除 可能 | 読み書き、削除 可能 | 読み取りのみ 可能 |
ディレクトリ2 | アクセス 不可能 | 読み書き、削除 可能 | 読み取りのみ 可能 | 読み取りのみ 可能 |
まとめ ・Alibaba Cloudでは、OSSを非公開にしてRAMユーザー単位で許可ポリシーを適用することで、OSSへのアクセスを制御できることを紹介しました。 ユーザー単位以外でも、グループや役割に対してもアクセス制御をすることができますが、そちらについてはまたの機会にご紹介します。