フォルダレベルでアクセスを分離する方法

ユースケース

状況によっては、フォルダレベルでユーザーのアクセスを分離したい場合があります。この場合、ユーザーは共通のバケットを共有しますが、各ユーザーがそれぞれフォルダを持ち、このフォルダには同一バケット内の他のユーザーはアクセスできなくなります。

 

概要としては以下のようなステップが含まれます。

  1. Wasabi ルートアカウントの作成またはアカウントへログイン
  2. ユーザーが共有できるストレージバケットを作成
  3. サブユーザーを作成
  4. サブユーザーのストレージバケット内でのアクセスを特定のフォルダに制限する IAM ポリシーを各サブユーザーにつき作成
  5. サブユーザーに IAM ポリシーを添付

この記事では、複数の企業のストレージを管理している Wasabi のアカウントで、1つの企業に複数のクライアントがいる場合を考えてみましょう。各企業は独自のストレージバケットを持ち、企業内の各クライアントは、そのバケット内にプライベートアクセスが必要なフォルダを持っています。例えば、A社には Dollar Bill と Dave Starsky という2人のクライアントがいるとします。この2人のクライアントはお互いのデータを見ることができないので、企業のバケット内の自分のフォルダへのアクセス権限が付与されます。

 

バケット名 :

bucket-company-a

サブユーザー :

dollar-bill

dave-starsky

 

実行ステップ

まずは、サブユーザー「dollar-bill 」のフォルダアクセスを分離することから始めましょう。

1) バケットを作成

A社のバケット「bucket-company-a 」を作成します。

mceclip0.png

 

2) サブユーザー「dollar-bill 」のフォルダをバケット内に作成します。

ここでは、フォルダ名を「dollar-bills-folder」とします。

mceclip5.png

 

3) ユーザーを作成

フォルダへのアクセスを付与するサブユーザー「dollar-bill」を作成します。

mceclip1.png

 

4) IAMポリシーを作成

Wasabi ウェブコンソール UI で[ポリシー] -> [ポリシーを作成] を選択し、以下の例を使用してポリシーを作成します。

サブユーザー「dollar-bill 」のアクセスをバケット「bucket-company-a」内の自身のフォルダ「dollar-bills-folder」に限定するポリシー構文は以下のとおりです (使用の際には、この構文内のバケット名とフォルダ名を編集する必要があります)。

{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketCompliance"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-company-a"],
"Condition":{"StringEquals":{"s3:prefix":["","dollar-bills-folder/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-company-a"],
"Condition":{"StringLike":{"s3:prefix":["dollar-bills-folder/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::bucket-company-a/dollar-bills-folder/*"]
}
]
}

mceclip2.png

 

注 : コンソールでバケットやオブジェクトの操作を行うには、サブユーザーに「ListAllMyBuckets」許可が必要となります。この記事で説明したフォルダレベルのアクセス分離ポリシーでは「ListAllMyBuckets」許可が使用できないため、サブユーザーのコンソール経由でのアクセスはできなくなります

 

5) 上記で作成したポリシーを、サブユーザー「dollar-bill 」に添付します。

[ユーザー] --> 対象のサブユーザー (この場合は dollar-bill) ---> [ポリシー] の順に移動し、上記で作成したポリシーをサブユーザーに添付します。

mceclip3.png

 

これで、このサブユーザーは対象のバケット内の自分のフォルダのみにアクセスできるようになります。

 

------------------------------------------------------------------------------------------------------

 

次はサブユーザー「dave-starsky」に移ります。

上記と全く同じプロセスを繰り返します。

1. バケット「bucket-company-a 内にフォルダ (この例では「dave-starskys-folder」を作成します。

2. サブユーザー「dave-starsky」を作成します。

3. このサブユーザーにバケット内で適切なフォルダへのアクセスを付与する IAM ポリシーを作成します。以下のポリシーの例ではフォルダ名が異なっています。

{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketCompliance"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-company-a"],
"Condition":{"StringEquals":{"s3:prefix":["","dave-starskys-folder/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket-company-a"],
"Condition":{"StringLike":{"s3:prefix":["dave-starskys-folder/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::bucket-company-a/dave-starskys-folder/*"]
}
]
}

 

4. 最後に、このポリシーを「dave-starsky 」サブユーザーに添付します。

 

サブユーザーの要件が数百から数千件存在する企業の場合には、以下の自動化アプローチを使用することができます。

Wasabi でインフラストラクチャ設計を自動化する方法

 

他にご質問がございましたら、リクエストを送信してください