すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:bucket-policy

最終更新日:Dec 23, 2024

バケットポリシーは、リソースベースの権限付与ポリシーです。 バケット所有者は、バケットポリシーを使用して、他のユーザーにObject Storage Service (OSS) の特定のリソースへのアクセスを許可できます。 このトピックでは、bucket-policyコマンドを実行してバケットポリシーを追加、変更、クエリ、または削除する方法について説明します。

使用上の注意

  • バケットポリシーを追加または変更するには、oss:PutBucketPolicy権限が必要です。 バケットポリシーをクエリするには、oss:GetBucketPolicy権限が必要です。 バケットポリシーを削除するには、oss:DeleteBucketPolicy権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • ossutil 1.6.16以降の場合、コマンドラインでossutilをバイナリ名として直接使用できます。 オペレーティングシステムに基づいてバイナリ名を更新する必要はありません。 1.6.16より前のossutilの場合、オペレーティングシステムに基づいてバイナリ名を更新する必要があります。 詳細は、「ossutilコマンドリファレンス」をご参照ください。

バケットポリシーの追加または変更

バケットポリシーを追加または変更する前に、ローカルコンピューターにJSONファイルを作成し、JSONファイルでバケットポリシーを設定する必要があります。 1つのJSONファイルで複数のバケットポリシーを設定できます。 ただし、バケットポリシーの合計サイズは16 KBを超えることはできません。

バケットポリシーを追加または変更すると、ossutilはJSONファイルからバケットポリシーを読み取り、指定されたバケットにポリシーを追加します。 バケットポリシーを追加すると、既存のバケットポリシーが上書きされます。

  • コマンド構文

    ossutil bucket-policy --method put oss://bucketname local_json_file

    次の表に、上記のパラメーターを示します。

    パラメーター

    説明

    bucketname

    バケットポリシーを追加または変更するバケットの名前。

    local_json_ファイル

    バケットポリシーを設定するローカルJSONファイルの名前。

    1. ローカルコンピューターにlocal_json_fileという名前のファイルを作成し、さまざまなシナリオに基づいてさまざまなバケットポリシーを設定します。

      次の例は、共通のバケットポリシーを設定する方法を示しています。

      説明

      次の例は、ResourceパラメーターでUIDが174649585760xxxxのバケット所有者がバケットポリシーを構成して、PrincipalパラメーターでUIDが202147604935xxxxのRAMユーザーや匿名ユーザー * など、RAMユーザーに異なる権限を付与する方法を示しています。

      • 指定されたIPアドレスからの匿名リクエストのみが、examplebucketという名前のバケット内のすべてのリソースにアクセスできるように指定します。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:GetObject",
                        "oss:GetObjectAcl",
                        "oss:ListObjects",
                        "oss:RestoreObject",
                        "oss:GetVodPlaylist",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Condition": {
                        "IpAddress": {
                            "acs:SourceIp": [
                                "10.10.10.10"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "*"
                            ]
                        },
                        "IpAddress": {
                            "acs:SourceIp": [
                                "10.10.10.10"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
      • examplebucketという名前のバケットのhangzhou/2020およびhangzhou/2015ディレクトリに対するRAMユーザーの読み取り専用権限を付与します。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:GetObject",
                        "oss:GetObjectAcl",
                        "oss:ListObjects",
                        "oss:RestoreObject",
                        "oss:GetVodPlaylist",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Effect": "Allow",
                    "Principal": [
                        "20214760404935xxxx"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "hangzhou/2020/*",
                                "hangzhou/2015/*"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "20214760404935xxxx"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
      • examplebucketという名前のバケットのhangzhou/2021/ ディレクトリ内のすべてのオブジェクトへの匿名リクエストを拒否します。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:RestoreObject",
                        "oss:ListObjects",
                        "oss:AbortMultipartUpload",
                        "oss:PutObjectAcl",
                        "oss:GetObjectAcl",
                        "oss:ListParts",
                        "oss:DeleteObject",
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:GetVodPlaylist",
                        "oss:PostVodPlaylist",
                        "oss:PublishRtmpStream",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Effect": "Deny",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2021/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "hangzhou/2021/*"
                            ]
                        }
                    },
                    "Effect": "Deny",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
    2. examplebucketバケットにバケットポリシーを追加します。

      ossutil bucket-policy --method put oss://examplebucket local_json_file

      次の出力が表示された場合、バケットポリシーがexamplebucketバケットに追加されます。

      1.125101(s) elapsed

バケットポリシーの照会

  • コマンド構文

    ossutil bucket-policy --method get oss://bucketname local_json_file

    パラメーター

    説明

    bucketname

    バケットポリシーを照会するバケットの名前。

    local_json_ファイル

    照会されたバケットポリシーを格納するために使用されるローカルJSONファイル。 このパラメーターが指定されていない場合、クエリされたバケットポリシーはJSONファイルに保存されずに表示されます。

  • 次のコマンドを実行して、examplebucketという名前のバケットポリシーを照会します。

    ossutil bucket-policy --method get oss://examplebucket local_json_file

    次の出力が表示されると、examplebucketのバケットポリシーが照会され、ローカルJSONファイルに書き込まれます。

    0.212407(s) elapsed

バケットポリシーの削除

バケットポリシーを使用して他のユーザーにOSSリソースへのアクセスを許可する必要がなくなった場合は、設定済みのバケットポリシーを削除します。

  • コマンド構文

    ossutil bucket-policy --method delete oss://bucketname
  • 次のコマンドを実行して、examplebucketという名前のバケットのすべてのバケットポリシーを削除します。

    ossutil bucket-policy --method delete oss://examplebucket

    次の出力が表示されると、examplebucketのすべてのバケットポリシーが削除されます。

    0.530750(s) elapsed

一般的なオプション

ossutilを使用して別のリージョンにあるバケットに切り替える場合は、-eオプションを追加して、バケットが配置されているリージョンのエンドポイントを指定します。 ossutilを使用して別のAlibaba Cloudアカウントに属するバケットに切り替える場合、-iオプションを追加して指定されたアカウントのAccessKey IDを指定し、-kオプションを追加して指定されたアカウントのAccessKey secretを指定します。

たとえば、次のコマンドを実行して、中国 (杭州) リージョンにあり、別のAlibaba Cloudアカウントが所有するexamplebucketという名前のバケットのバケットポリシーを設定できます。

ossutil bucket-policy --method put oss://examplebucket local_json_file -e oss-cn-hangzhou.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzAxxxx  -k 67DLVBkH7EamOjy2W5RVAHUY9Hxxxx

共通オプションの詳細については、「共通オプション」をご参照ください。