StorageGRID Webscaleシステムには、バケットとそれらのバケット内のオブジェクトへのア
クセスを制御するのに使用できるS3 REST APIポリシー言語のサブセットが実装されていま す。
概要
StorageGRID Webscaleでは、Amazon Web Services(AWS)のポリシー言語構文を使用してS3 テナントのデータへのアクセスポリシーを作成できます。S3 APIのアクセスポリシーは JSON形式で記述されます。StorageGRID Webscaleでは2種類のアクセスポリシーがサポート されています。
• バケットポリシーは、PUT / GET / DELETE Bucket PolicyのS3 REST APIを使用して設定 します。バケットポリシーはバケットに関連付けられ、バケットとそのオブジェクトへ のバケット所有者アカウントやその他のアカウントのユーザによるアクセスを制御する ために使用されます。バケットポリシーは1つのバケットにのみ適用され、場合によって は複数のグループに適用されます。サポートされる整合性は「ALL」のみです。バケッ トポリシーには「ALL」が適用され、それ以外の整合性はいずれも拒否(PUT bucket
consistency要求のヘッダーで指定されている場合)または無視(バケットレベルで設定
されている場合)されます。
• グループポリシーは、Tenant Management InterfaceまたはAPIを使用して設定します。グ ループポリシーはアカウントの特定のグループに関連付けられ、そのアカウントが所有 する特定のリソースへのアクセスをそのグループに許可するために使用されます。グ ループポリシーは1つのグループにのみ適用され、場合によっては複数のバケットに適用 されます。
StorageGRID Webscaleのバケットとグループのポリシーは、Amazonが定義している特定の文
法に従って記述されます。各ポリシーは一連のステートメントからなり、それぞれのステー トメントは次の要素で構成されます。
• Sid(ステートメントID)(オプション)
• Effect
• Principal / NotPrincipal
• Resource / NotResource
• Action / NotAction
• Condition(オプション)
これらの要素を使用して、次の構文に従って権限を指定するポリシーステートメントが構 築されます。<Effect>を付与して、<Condition>に該当する場合に<Principal>に<Resource>に 対する<Action>の実行を許可または拒否します。
ポリシーの各要素の説明を次に示します。
要素 説明
Sid Sid要素はオプションです。Sidはユーザに対する説明としてのみ使 用されます。StorageGRID Webscaleシステムに格納はされますが、シ ステムで解釈されません。
Effect Effect要素では、指定した処理を許可するか拒否するかを指定します。
Action要素でサポートされるキーワードを使用して、バケットまたは
オブジェクトで許可(または拒否)する処理を指定する必要がありま す。
Principal / NotPrincipal
ユーザ、グループ、またはアカウントを指定して、特定のリソースへ のアクセスや特定の処理の実行を許可できます。要求にS3の署名が 含まれていない場合は、ワイルドカード文字(*)をプリンシパルと して指定することで匿名アクセスが許可されます。デフォルトでは、
アカウントが所有するリソースへのアクセスはrootアカウントにの み許可されます。
Principal要素を指定する必要があるのはバケットポリシーだけです。
グループポリシーの場合は、ポリシーが関連付けられたグループが 暗黙的にプリンシパルになります。
Resource / NotResource
Resource要素では、バケットおよびオブジェクトを指定します。
Uniform Resource Name(URN)を使用してリソースを指定して、バ
ケットやオブジェクトに対する権限を許可または拒否することがで きます。
Action / NotAction 権限はAction要素とEffect要素の2つで構成されます。グループがリ ソースを要求すると、権限に基づいてリソースへのアクセスが許可ま たは拒否されます。権限を明示的に割り当てていなければアクセス は拒否されますが、明示的な拒否を使用して別のポリシーで付与され た権限を拒否することもできます。
Condition Condition要素はオプションです。ポリシーを適用する条件を示す式
を作成できます。
Action要素では、ワイルドカード文字(*)を使用してすべての処理や処理のサブセットを
指定できます。たとえば、次のActionの値は、s3:GetObject、s3:PutObject、s3:DeleteObjectな どの権限に一致します。
s3:*Object
Resource要素では、ワイルドカード文字の「*」と「?」を使用できます。アスタリスク(*)
は0文字以上の文字に一致し、疑問符(?)は任意の1文字に一致します。
Principal要素では、匿名アクセスを設定してすべてのユーザに権限を付与する場合を除き、
ワイルドカード文字はサポートされません。Principalの値としてワイルドカード(*)を設定 する例を次に示します。
"Principal":"*"
次に、Effect、Principal、Action、およびResourceの各要素を使用して記述したステートメン トの例を示します。このバケットポリシーのステートメントでは、Effectで「Allow」を指定 して、Principalで指定したadminグループ(federated-group/admin)とfinanceグループ
(federated-group/finance)に、「mybucket」という名前のバケットに対する
s3:ListBucket処理とそのバケット内のすべてのオブジェクトに対するs3:GetObject処理 を実行する権限を付与しています。
{
"Statement": [ {
"Effect": "Allow", "Principal": { "SGWS": [
"urn:sgws:identity::27233906934684427525:federated-group/admin", "urn:sgws:identity::27233906934684427525:federated-group/finance"
] },
"Action": [ "s3:ListBucket", "s3:GetObject"
],
"Resource": [
"urn:sgws:s3:::mybucket", "urn:sgws:s3:::mybucket/*"
] } ] }
バケットポリシーのサイズの上限は20,480バイトで、グループポリシーのサイズの上限は
5,120バイトです。
グループポリシーやバケットポリシーの更新は、結果整合性です。バケットポリシーの更 新で整合性の保証を変更するには、PUT bucket policyで目的の「Consistency-Control」ヘッ ダーを設定するか、PUT bucket consistency要求を使用して目的の整合性レベルを設定します。
サポートされる整合性は「ALL」のみです。バケットポリシーには「ALL」が適用され、そ れ以外の整合性はいずれも拒否(PUT bucket consistency要求のヘッダーで指定されている場 合)または無視(バケットレベルで設定されている場合)されます。ポリシー変更の整合 性が確保されたあと、ポリシーのキャッシュにより、グループポリシーは有効になるまで にさらに15分、バケットポリシーの場合は8秒必要になることがあります。
ポリシーステートメントでのURNの使用
ポリシーステートメントでは、Principal要素とResource要素で次のようにしてURNを使用し ます。
• S3リソースのURNの指定には次の構文を使用します。
urn:sgws:s3:::bucket_name
urn:SGWS:S3:::bucket_name/ object_key
• アイデンティティリソースのURN(ユーザおよびグループ)の指定には次の構文を使用 します。
urn:SGWS:ID::account_id:root
urn:SGWS:ID::account_id: ユーザ /user_name urn:SGWS:ID::account_id: グループ /group_name
urn:SGWS:ID::account_id: フェデレーションユーザ /user_name urn:SGWS:ID::account_id: フェデレーテッドグループ / group_name その他の考慮事項:
• オブジェクトキーの一部にワイルドカードとしてアスタリスク(*)を使用できます。ア スタリスクは0文字以上の文字に一致します。
• オブジェクトキーで指定できる国際文字は、JSON UTF-8形式またはJSON \uエスケープ シーケンスを使用してエンコードする必要があります。パーセントエンコーディング
(「RFC 2141 URN Syntax」を参照)はサポートされていません。
PUT Bucket policy処理のHTTP要求の本文は、charset=UTF-8でエンコードする必要があり ます。
ポリシーでのリソースの指定
ポリシーステートメントでは、Resource要素を使用して、権限を許可または拒否するバケッ トやオブジェクトを指定できます。
• Resource要素はポリシーの各ステートメントに必要です。ポリシーでは、「Resource」要
素または「NotResource」要素(除外の場合)でリソースを指定します。
• リソースはS3リソースのURNで指定します。
次に例を示します。
"Resource": "urn:sgws:s3:::mybucket/*"
• オブジェクトキーの一部にポリシー変数を使用することもできます。
例:
"Resource": "urn:sgws:s3:::mybucket/home/${sgws:username}/*"
使用できるポリシー変数のリストについては、ポリシーでの変数の指定(47ページ)を 参照してください。
• グループポリシーの作成時は、まだ存在しないバケットもリソースの値で指定すること ができます。
ポリシーでのプリンシパルの指定
ポリシーステートメントでリソースへのアクセスを許可または拒否するユーザ、グループ、
またはテナントアカウントを指定するには、Principal要素を使用します。
• グループポリシーのステートメントを作成する際は、そのグループがプリンシパルとみ なされるため、Principal要素は指定されません。
• Principal要素はポリシーの各ステートメントに含める必要があります(グループポリ
シーの場合は除く)。ポリシーでは、「Principal」要素または「NotPrincipal」要素(除外の 場合)でプリンシパルを指定します。
• IDまたはURNを使用してアカウントベースのアイデンティティを指定する必要がありま す。
プリンシパルは: SGWS:"account_id"}
プリンシパルは: SGWS:"identity_urn"}
• 次の例では、テナントアカウントID 27233906934684427525を使用しています。この場 合、rootアカウントとそのすべてのユーザが含まれます。
"Principal": { "SGWS": "27233906934684427525" }
• rootアカウントのみを指定する場合は次のようになります。
"Principal": { "SGWS": "urn:sgws:identity::
27233906934684427525:root" }
• 特定のフェデレーションユーザ(「Bob」)のみを指定する場合は次のようになります。
"Principal": { "SGWS": "urn:sgws:identity::
27233906934684427525:federated-user/Bob" }
• 特定のフェデレーショングループ(「Managers」)のみを指定する場合は次のようになり ます。
"Principal": { "SGWS": "urn:sgws:identity::
27233906934684427525:federated-group/Managers" }
• 匿名プリンシパルを指定する場合は次のようになります。
"Principal": "*"
• Bobが組織を離れてユーザ名Bobを削除したあとに、新たに加わったBobに同じユーザ名 Bobを割り当てた場合、以前に在籍していたBobに付与されていた権限が意図せずに継承 されることがあります。このようなあいまいさを排除するために、ユーザ名の代わりに UUIDを使用できます。次に例を示します。
urn:sgws:identity::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013
• グループポリシーの作成時は、まだ存在しないグループやユーザの名前もプリンシパル の値で指定することができます。
ポリシーでの権限の指定
ポリシーでは、Action要素を使用してリソースに対する権限を許可または拒否します。ポリ シーで指定できる一連の権限が用意されており、それらを「Action」要素または
「NotAction」要素(除外の場合)で指定します。それぞれがS3 REST APIの特定の処理に対
応しています。
バケットに適用される権限は次のとおりです。
権限 S3 REST APIの処理
s3:CreateBucket PUT Bucket
s3:DeleteBucket DELETE Bucket
s3:DeleteBucketPolicy DELETE Bucket policy
s3:GetBucketAcl GET Bucket ACL
s3:GetBucketConsistency GET Bucket Consistency
s3:GetBucketLastAccessTime GET Bucket Last Access Time