S3バケット ポリシーの例

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

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

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

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

この例では、匿名ユーザを含むすべてのユーザにバケット内のオブジェクトのリストとバケット内のすべてのオブジェクトのGet Object処理を許可しています。それ以外の処理はすべて拒否されます。バケットへの書き込みが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 Object処理を許可し、そのうちの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」キーワードは、Tenant Manager(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/*"
      ]
    }
  ]
}