Skip to content

アクセス制御(2) - ポリシーによる制御

バケットやオブジェクトに設定するACLとは別に、バケットやクラウドストレージアカウントに対する「アクセス制御ポリシー」を設定することができます。これにより、ACLでは設定できないようなアクセス制御が可能です。

「アクセス制御ポリシー」には「バケットポリシー」を使用します。

  • バケットポリシー: バケットに対して、アクセス制御ポリシーを設定します。

デフォルトのアクセス許可

デフォルトでは、バケットやオブジェクトにACLが特に設定されていなければ、自身のクラウドストレージアカウントのみデータにフルアクセス(読み書き両方)できる設定となっています。

デフォルトのまま使う場合には、以降に説明するポリシーの追加設定を行う必要はありません。特定のクラウドストレージアカウントを読み取りしかできないようする、あるバケットにアクセスできるのは一部のクラウドストレージアカウントだけにするなど、細かい制御が必要な場合には、以下を参考にポリシーを設定してください。

アクセス制御ポリシー共通の注意点

バケットポリシーの注意点を挙げます。

  • エンドポイントは https://s3.v3.abci.ai です。
  • 順番に関係なく、DenyルールがAllowルールよりも優先されます。同一ポリシー内でなくとも、別のポリシーにDenyルールがあればそれが優先されます。
  • ポリシーの名前(--policy-nameに指定する名前)は、大文字を用いてもエラーにはなりませんが、問題になるケースがあるため、小文字英字と数字、およびハイフン(0x2d)で構成してください。

バケットポリシーの設定

バケットポリシーではバケットに対してアクセス制御ポリシーを設定します。これにより、バケット単位でアクセス制御が可能です。

バケットポリシーの設定では、JSON形式でアクセス許可の定義を書きます。Effect, Action, Resource, Principal の組み合わせにより、何を許可するか、何を拒否するかなどを記述します。

Effect には、"Allow" または "Deny" が設定できます。許可するルールなのか、拒否するルールなのかを記します。

Action には、どのようなリクエスト(動作)に対する制限なのかを記述します。例えば、オブジェクトのダウンロードについては、s3:GetObject を指定します。ワイルドカード (s3:*) を使うこともできます。

アクションの一覧:

アクション 説明
s3:ListBucket バケットの一覧表示
s3:GetObject オブジェクトのダウンロード
s3:PutObject オブジェクトのアップロード
s3:DeleteObject オブジェクトの削除
s3:GetObjectACL オブジェクトに設定されたACLを取得
s3:PutObjectACL オブジェクトにACLを適用
s3:AbortMultipartUpload 進行中のすべてのマルチパートアップロードを中止する操作
s3:ListMultipartUploadParts 進行中のマルチパートアップロードを一覧表示する操作
s3:* or * (ALL OBJECT OPERATIONS) 上記全ての操作

Resource には、アクセス対象となるリソースを記述します。例えば、"Resource": "sensor8"は、sensor8 という名前のバケットを示しています。

Principal には、アクセス権を設定するユーザーのUUIDを記述します。ワイルドカード (*) を指定して誰からでもアクセスできる(パブリックアクセス)設定を行うこともできます。なお、NotPrincipal はサポートされていません。

Caution

誰からでも読み取りアクセスができる設定を行う場合は、下記をよくお読みいただき、データを公開することが適切であるかご確認の上、設定をお願いします。

Caution

第三者によって意図しない利用がなされる恐れがありますので、誰からでも書き込みアクセスができる設定はしないでください。

Note

バケットポリシーのConditionではIPアドレスのみサポートします。

例1:ABCIユーザー間でバケットを共有する

ABCIユーザー間でバケットを共有する方法について説明します。この例では、ユーザーAが所有する share-bucket というバケットを bbb00000.1、bbb00001.1 という2人のクラウドストレージアカウントにアクセスを許可します。

まず、アクセスを許可するアカウント bbb00000.1 と bbb00001.1 の UUID の値をアクセス許可を受けるユーザが aws s3api list-buckets でID(UUID)を確認します。

[username@login1 ~]$ aws --endpoint-url https://s3.v3.abci.ai s3api list-buckets
{
    "Buckets": [
        {
            "Name": "<>",
            "CreationDate": "2025-06-24T22:37:19.000Z"
        },
    ],
    "Owner": {
        "DisplayName": "<バケット所有者のUUID>",
        "ID": "<バケット所有者のUUID>"
    }
}

次に、ユーザーAが以下の内容の cross-access-pc.json というファイルを作成します。説明上、cross-access-pc.json としますが、任意のファイル名を使うことができます。

$cat cross-access-pc.json
{
    "Version": "2008-10-17",
    "Id": "AllowUser",
    "Statement": [
      {
        "Sid": "statement1_Allow",
        "Effect": "Allow",
        "Principal": {
          "DDN": [
            "<bbb00000.1のUUID>",
            "<bbb00001.1のUUID>",
          ]
        },
        "Action": [
          "s3:ListBucket",
          "s3:GetObject",
        ],
        "Resource": "share-bucket"
      }
    ]
}

上記では、bbb00000.1 と bbb00001.1 に share-bucket バケットに対する読み取り専用のアクセスを許可するポリシーを定義しています。

このポリシーを share-bucket バケットに適用します。

[username@login1 ~]$ aws --endpoint-url https://s3.v3.abci.ai s3api put-bucket-policy --bucket share-bucket --policy file://cross-access-pc.json

上記により bbb00000.1 と bbb00001.1 は、share-bucket バケットにアクセスし、オブジェクトのダウンロードができるようになります。

バケットに適用されたポリシーを確認する場合は、aws --endpoint-url https://s3.v3.abci.ai s3api get-bucket-policy --bucket share-bucket を実行してください。

また、ポリシーを削除する場合は、aws --endpoint-url https://s3.v3.abci.ai s3api delete-bucket-policy --bucket share-bucket を実行してください。