ポリシーの例

このセクションでは、StorageGRID Webscaleのバケットとグループのアクセス ポリシーを作成する例を示します。

バケット ポリシーの例

バケット ポリシーでは、そのポリシーが関連付けられたバケットに対するアクセス権限を指定します。バケット ポリシーは、S3 PutBucketPolicy APIを使用して設定します。

バケット ポリシーを設定するには、AWS CLIで次のコマンドを使用します。

> aws s3api put-bucket-policy --bucket examplebucket --policy file://policy.json

例:すべてのユーザにバケットへの読み取り専用アクセスを許可する

この例では、匿名ユーザを含むすべてのユーザにバケットのList処理とバケット内のすべてのオブジェクトのGet処理を許可しています。それ以外の処理はすべて拒否されます。バケットへの書き込みがrootアカウントにしか許可されないため、このポリシーは限定的な状況でしか使用されないことに注意してください。
{ 
  "Statement": [
    {
      "Sid": "AllowEveryoneReadOnlyAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [ "s3:GetObject", "s3:ListBucket" ],
      "Resource": ["urn:sgws:s3:::examplebucket","urn:sgws:s3:::examplebucket/*"],
    }
  ]
}

例:特定のアカウントのすべてのユーザにフル アクセスを許可し、別のアカウントのすべてのユーザにバケットへの読み取り専用アクセスを許可する

この例では、指定したアカウントのすべてのユーザにバケットへのフル アクセスを許可しています。さらに、アカウントをもう1つ指定し、そのアカウントのすべてのユーザには、バケットのList処理と「shared/」というオブジェクト キー プレフィックスで始まるバケット内のオブジェクトのGet処理のみを許可しています。
注:StorageGRID Webscaleでは、非所有者アカウント(匿名アカウントを含む)によって作成されたオブジェクトが、バケット所有者アカウントによって所有されます。これらのオブジェクトにはバケット ポリシーが適用されます。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "SGWS": "95390887230002558202"
      },
      "Action": "s3:*",
      "Resource": [
        "urn:sgws:s3:::examplebucket",
        "urn:sgws:s3:::examplebucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "SGWS": "31181711887329436680"
      },
      "Action": "s3:GetObject",
      "Resource": "urn:sgws:s3:::examplebucket/shared/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "SGWS": "31181711887329436680"
      },
      "Action": "s3:ListBucket",
      "Resource": "urn:sgws:s3:::examplebucket",
      "Condition": {
        "StringLike": {
          "s3:prefix": "shared/*"
        }
      }
    }  
  ]
}

例:すべてのユーザにバケットへの読み取り専用アクセスを許可し、指定したグループにフル アクセスを許可する

この例では、指定したアカウントの匿名ユーザを含むすべてのユーザにバケットのList処理とバケット内のすべてのオブジェクトのGet処理を許可し、そのうちのMarketingグループに属するユーザにのみフル アクセスを許可しています。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "SGWS": "urn:sgws:identity::95390887230002558202:federated-group/Marketing"
      },
      "Action": "s3:*",
      "Resource": [
        "urn:sgws:s3:::examplebucket",
        "urn:sgws:s3:::examplebucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": ["s3:ListBucket","s3:GetObject"],
      "Resource": [
        "urn:sgws:s3:::examplebucket",
        "urn:sgws:s3:::examplebucket/*"
      ]
    }
  ]
}

例:クライアントのIP範囲を限定して、すべてのユーザにバケットへの読み取り / 書き込みアクセスを許可する

この例では、指定したIP範囲(54.240.143.0~54.240.143.255で54.240.143.188を除く)からの要求についてのみ、匿名ユーザを含むすべてのユーザにバケットのList処理とバケット内のすべてのオブジェクトの全処理を許可しています。それ以外の処理やIP範囲外からの要求はすべて拒否されます。
注:「Condition」キーワードは、テナント管理インターフェイス(StorageGRID Webscaleバージョン10.4以降)でのみサポートされます。
{ 
  "Statement": [
    {
      "Sid": "AllowEveryoneReadWriteAccessIfInSourceIpRange",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [ "s3:*Object", "s3:ListBucket" ],
      "Resource": ["urn:sgws:s3:::examplebucket","urn:sgws:s3:::examplebucket/*"],
      "Condition": {
        "IpAddress": {"sgws:SourceIp": "54.240.143.0/24"},
        "NotIpAddress": {"sgws:SourceIp": "54.240.143.188"} 
      }
    }
  ]
}

例:指定したフェデレーション ユーザにのみバケットへのフル アクセスを許可する

この例では、Bobというフェデレーション ユーザにexamplebucketバケットとそのオブジェクトへのフル アクセスを許可しています。「root」を含む他のユーザについては、すべての処理を明示的に拒否しています。ただし、この場合も「root」によるPut/Get/DeleteBucketPolicyは拒否されません。
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "SGWS": "urn:sgws:identity::95390887230002558202:federated-user/Bob"
      },
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "urn:sgws:s3:::examplebucket",
        "urn:sgws:s3:::examplebucket/*"
      ]
    },
    {
      "Effect": "Deny",
      "NotPrincipal": {
        "SGWS": "urn:sgws:identity::95390887230002558202:federated-user/Bob"
      },
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "urn:sgws:s3:::examplebucket",
        "urn:sgws:s3:::examplebucket/*"
      ]
    }
  ]
}

グループ ポリシーの例

グループ ポリシーでは、そのポリシーが関連付けられたグループに対するアクセス権限を指定します。プリンシパルは暗黙的に決まるため、このポリシーにはPrincipal要素はありません。グループ ポリシーは、テナント管理インターフェイスまたはAPIを使用して設定します。

例:テナント管理インターフェイスを使用したグループ ポリシーの設定

テナント管理インターフェイスを使用してグループを追加または編集する場合は、[S3 Policy]ダイアログ ボックスで有効なJSON形式の文字列を使用してグループ ポリシーを作成および更新します。
サンプルのJSONポリシーを示すスクリーンショット

例:グループにすべてのバケットへのフル アクセスを許可する

この例では、バケット ポリシーで明示的に拒否されている場合を除き、グループのすべてのメンバーにテナント アカウント所有のすべてのバケットへのフル アクセスが許可されます。
{
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "urn:sgws:s3:::*"
    }
  ]
}

例:グループにすべてのバケットへの読み取り専用アクセスを許可する

この例では、バケット ポリシーで明示的に拒否されている場合を除き、グループのすべてのメンバーにすべてのバケットへの読み取り専用アクセスが許可されます。このアカウントで所有しているバケットへのアクセスは、ターゲット バケット ポリシーで明示的に拒否されていない場合に限り許可されます。
{
  "Statement": [
    {
      "Sid": "AllowGroupReadOnlyAccess",
      "Effect": "Allow",
      "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetObject" ],
      "Resource": "urn:sgws:s3:::*"
    }
  ]
}

例:グループ メンバーにバケット内の各自の「フォルダ」のみへのフル アクセスを許可する

この例では、指定したバケット内の固有のフォルダ(キー プレフィックス)の参照とアクセスだけがグループのメンバーに許可されます。それらのフォルダのプライバシー設定を決めるときは、他のグループ ポリシーやバケット ポリシーのアクセス権限を考慮する必要があることに注意してください。
注:「Condition」キーワードとsgws:username変数は、テナント管理インターフェイス(StorageGRID Webscaleバージョン10.4以降)でのみサポートされます。
{
  "Statement": [
    {
      "Sid": "AllowListBucketOfASpecificUserPrefix",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "urn:sgws:s3:::department_bucket",
      "Condition": {
        "StringLike": {
          "s3:prefix": "${sgws:username}/*"
        }
      }
    },
    {
      "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
      "Effect": "Allow",
      "Action": "s3:*Object",
      "Resource": "urn:sgws:s3:::department_bucket/${sgws:username}/*"
    }
  ]
}

例:PutOverwriteObject権限

この例では、PutOverwriteObjectとDeleteObjectのEffectをDenyに設定して、オブジェクトのデータとメタデータが削除または変更されないように保護しています。

詳細については、PutOverwriteObject権限の使用およびWrite-Once-Read-Many(WORM)による保護を参照してください。

{
"Sid": "WORMExamplePolicy",
"Effect": "Deny",
"Action": ["s3:PutOverwriteObject", "s3:DeleteObject"],
"Resource": ["urn:sgws:s3:::*"],
}