ユーザー、グループ、ポリシー

RustFS の IAM ユーザーとグループの管理、ポリシードキュメントの JSON 形式、条件演算子、組み込みポリシーを説明します。

このページでは、日常的な IAM 管理として、ユーザーとグループの作成、ポリシーの割り当て、カスタムポリシードキュメントの記述を説明します。

要件

  • RustFS の管理コマンドを使う前に、rc をインストールします。
  • 対応する admin:* アクションを許可する認証情報で、エイリアスを設定します。

ユーザーの管理

ユーザーは Console(左ナビゲーションの Identity)、rc admin、または管理用 REST API から管理できます。ネイティブの管理エンドポイントは /rustfs/admin/v3 プレフィックスの下にあります。リクエストは、対応する admin:* アクションをポリシーで許可された認証情報によって署名する必要があります(AWS Signature V4)。

操作メソッドとパス説明
ユーザーの作成または更新PUT /rustfs/admin/v3/add-user?accessKey=<name>JSON 本文は {"secretKey": "...", "status": "enabled"} です。policy は任意です。admin:CreateUser が必要です。
ユーザーの一覧GET /rustfs/admin/v3/list-usersadmin:ListUsers が必要です。
ユーザーの詳細GET /rustfs/admin/v3/user-info?accessKey=<name>admin:GetUser が必要です。
ユーザーの有効化または無効化PUT /rustfs/admin/v3/set-user-status?accessKey=<name>&status=<enabled|disabled>呼び出しに使っている認証情報自身の状態は変更できません。
ユーザーの削除DELETE /rustfs/admin/v3/remove-user?accessKey=<name>admin:DeleteUser が必要です。
IAM データのエクスポートGET /rustfs/admin/v3/export-iamユーザー、グループ、ポリシー、対応付けを出力します。
IAM データのインポートPUT /rustfs/admin/v3/import-iamエクスポートしたデータセットを復元します。

ユーザー名(アクセスキー)に空白を含めることはできず、ルートアクセスキーと同じ値にもできません。ユーザー作成時にはシークレットキーが必要です。

グループの管理

グループはユーザーをまとめ、1 つのポリシー割り当てを全メンバーに適用します。グループのメンバーシップと状態は、次のエンドポイントで管理します(Console では Identity に対応する操作があります)。

操作メソッドとパス説明
グループの一覧GET /rustfs/admin/v3/groupsadmin:ListGroups が必要です。
グループの詳細GET /rustfs/admin/v3/group?group=<name>admin:GetGroup が必要です。
メンバーの追加または削除PUT /rustfs/admin/v3/update-group-membersJSON 本文は下記のとおりです。存在しないグループにメンバーを追加すると、そのグループが作成されます。admin:AddUserToGroup または admin:RemoveUserFromGroup が必要です。
グループの有効化または無効化PUT /rustfs/admin/v3/set-group-status?group=<name>&status=<enabled|disabled>admin:EnableGroup または admin:DisableGroup が必要です。
グループの削除DELETE /rustfs/admin/v3/group/{group}グループにメンバーが残っている間は失敗します。

メンバーシップ更新の本文は次のとおりです。

{
  "group": "developers",
  "members": ["alice", "bob"],
  "isRemove": false
}

isRemove を true にすると、列挙したメンバーを追加ではなく削除します。一時ユーザー(STS)とルート認証情報は、グループに追加できません。

ポリシーの割り当て

ポリシーの割り当ては、名前付きポリシーをユーザーまたはグループに接続します。

操作メソッドとパス説明
ユーザーまたはグループへのポリシー設定PUT /rustfs/admin/v3/set-user-or-group-policy?policyName=<policy>&userOrGroup=<name>&isGroup=<true|false>割り当てを置き換えます。/rustfs/admin/v3/set-policy でも受け付けます。admin:AttachUserOrGroupPolicy が必要です。
ポリシーのアタッチPOST /rustfs/admin/v3/idp/builtin/policy/attachJSON 本文は {"policies": ["readonly"], "user": "alice"}(または "group")です。既存の割り当てに追加します。
ポリシーのデタッチPOST /rustfs/admin/v3/idp/builtin/policy/detach本文の形は同じです。割り当てからポリシーを外します。
ポリシー割り当ての一覧GET /rustfs/admin/v3/idp/builtin/policy-entitiesどのユーザーまたはグループがどのポリシーを持つかを表示します。

ポリシードキュメントの管理

操作メソッドとパス説明
ポリシーの一覧GET /rustfs/admin/v3/list-canned-policies詳細を得るには admin:GetPolicy の範囲が必要です。
ポリシーの詳細GET /rustfs/admin/v3/info-canned-policy?name=<policy>JSON ドキュメントを返します。
ポリシーの作成または置換PUT /rustfs/admin/v3/add-canned-policy?name=<policy>リクエスト本文はポリシーの JSON ドキュメントです。admin:CreatePolicy が必要です。
ポリシーの削除DELETE /rustfs/admin/v3/remove-canned-policy?name=<policy>admin:DeletePolicy が必要です。

ポリシードキュメントの形式

ポリシードキュメントは、Version と Statement フィールドを持つ JSON オブジェクトです。受け付ける Version の値は 2012-10-17 だけです。

各ステートメントで使えるフィールドは次のとおりです。

フィールド必須説明
Sidいいえステートメントの識別子です。
EffectはいAllow または Deny です。
Actionはい(または NotAction)アクション名です。ワイルドカードを使えます(例: s3:Get*)。
NotActionいいえ列挙したアクション以外のすべてに一致します。
ResourceS3 アクションでははい(または NotResource)arn:aws:s3:::bucket または arn:aws:s3:::bucket/prefix/* の形式の ARN です。
NotResourceいいえ列挙したリソース以外のすべてに一致します。
Conditionいいえコンテキスト値をキーとする条件演算子です。

アクション名には名前空間があります。オブジェクトとバケットの操作は s3:*(例: s3:GetObject、s3:PutObject、s3:DeleteObject、s3:ListBucket、s3:GetBucketLocation、s3:ListAllMyBuckets)、管理操作は admin:*、STS は sts:AssumeRole、キー管理は kms:* です。

対応する条件演算子には、次が含まれます。StringEquals、StringNotEquals、StringEqualsIgnoreCase、StringNotEqualsIgnoreCase、StringLike、StringNotLike、ArnEquals、ArnNotEquals、ArnLike、ArnNotLike、BinaryEquals、IpAddress、NotIpAddress、Null、Bool、NumericEquals、NumericNotEquals、NumericLessThan、NumericLessThanEquals、NumericGreaterThan、NumericGreaterThanEquals、DateEquals、DateNotEquals、DateLessThan、DateLessThanEquals、DateGreaterThan、DateGreaterThanEquals。任意の演算子には IfExists を付けられます(参照するコンテキストキーが存在しない場合、その条件は成立します)。

例: 1 つのバケットへの読み取り専用アクセス

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetBucketLocation", "s3:ListBucket"],
      "Resource": ["arn:aws:s3:::reports"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::reports/*"]
    }
  ]
}

例: プレフィックスに制限した読み書き

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::app-data"],
      "Condition": {
        "StringLike": {
          "s3:prefix": ["tenant-42/*"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": ["arn:aws:s3:::app-data/tenant-42/*"]
    }
  ]
}

例: フルアクセスだが削除は拒否

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": ["arn:aws:s3:::archive", "arn:aws:s3:::archive/*"]
    },
    {
      "Effect": "Deny",
      "Action": ["s3:DeleteObject", "s3:DeleteObjectVersion", "s3:DeleteBucket"],
      "Resource": ["arn:aws:s3:::archive", "arn:aws:s3:::archive/*"]
    }
  ]
}

明示的な Deny は常に Allow より優先されるため、s3:* が削除操作に一致しても、削除については 2 つ目のステートメントが適用されます。評価の意味を参照してください。

組み込みポリシー

RustFS には、事前に作成しなくても割り当てられる 5 つの組み込みポリシーがあります。

ポリシー付与内容
readwriteすべてのリソースに対するすべての S3 アクション(s3:*)と、sts:AssumeRole。
readonlyすべてのリソースに対する s3:GetBucketLocation、s3:GetObject、s3:GetBucketQuota と、sts:AssumeRole。
writeonlyすべてのリソースに対する s3:PutObject と、sts:AssumeRole。
diagnostics診断用の管理アクション(admin:Profiling、admin:ServerTrace、admin:ConsoleLog、admin:ServerInfo、admin:TopLocksInfo、admin:OBDInfo、admin:Prometheus、admin:BandwidthMonitor)と、sts:AssumeRole。
consoleAdminすべての管理アクション(admin:*)、すべての KMS アクション(kms:*)、すべての S3 アクション(s3:*)と、sts:AssumeRole。

組み込みの readonly ポリシーには、s3:ListBucket と s3:ListAllMyBuckets は含まれません。このポリシーの s3:GetBucketLocation 権限により RustFS でバケット名を確認でき、s3:GetObject 権限により既知のオブジェクトキーを指定してオブジェクトを取得できます。バケット内のオブジェクトを一覧表示するには、そのバケットに対する s3:ListBucket 権限を付与するカスタムポリシーを追加します。

On this page