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

Object Storage Service:バケットポリシーを使用して他のユーザーにOSSへのアクセスを許可する

最終更新日:Feb 12, 2025

バケットポリシーを設定して、バケット内のリソースへのアクセスを許可できます。 バケットポリシーを使用して、現在のAlibaba Cloudアカウントまたは他のAlibaba Cloudアカウントに属する1人以上のRAMユーザーまたはRAMロールに、バケット内の特定のリソースへのアクセスを許可できます。 GUIを使用するか、コードエディターでポリシーステートメントを指定して、バケットのバケットポリシーを設定し、ビジネスシナリオに基づいて承認を高速化できます。

使用上の注意

  • デフォルトでは、Alibaba Cloudアカウントにはバケットポリシーを設定する権限があります。 RAMユーザーとして、またはSecurity Token Service (STS) を使用してバケットポリシーを設定するには、oss:PutBucketPolicy権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • バケットの所有者は、GUIを使用するか、コードエディターでポリシーステートメントを指定して、Object Storage Service (OSS) コンソールでバケットのバケットポリシーを設定できます。 ポリシーステートメントを指定してバケットポリシーを設定する前に、バケットポリシーのアクション、リソース、および条件要素を理解する必要があります。 詳細については、「RAMポリシー」をご参照ください。

  • [許可ユーザー] パラメーターに匿名アカウントを含むすべてのアカウント (*) を選択し、バケットポリシーを設定するときに [条件] パラメーターを設定しない場合、バケットポリシーはバケット所有者を除くすべてのユーザーに適用されます。 [許可ユーザー] パラメーターに匿名アカウントを含むすべてのアカウント (*) を選択し、バケットポリシーを設定するときに [条件] パラメーターを設定すると、バケットポリシーはバケット所有者を含むすべてのユーザーに対して有効になります。

  • 1つのバケットに複数のバケットポリシーを設定できます。 バケットポリシーの合計サイズは16 KBを超えることはできません。

シナリオ

バケットポリシーは、次のシナリオでユーザーにアクセス権限を付与するために使用できます。

  • 別のAlibaba Cloudアカウントまたは特定のユーザーに、バケット内のリソースにアクセスまたは管理する権限を付与する必要があります。

  • 同じAlibaba Cloudアカウントに属するRAMユーザーに、読み取り専用、読み取りと書き込み、またはフルアクセスなどのさまざまな権限を付与して、ユーザーがバケット内のリソースにアクセスまたは管理できるようにする必要があります。

方法

OSSコンソールの使用

方法1: GUIを使用したバケットポリシーの設定

  1. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  2. 左側のナビゲーションツリーで、権限管理 > バケット承認ポリシー を選択します。

  3. バケット承認ポリシー タブで、GUI で追加 をクリックし、新規権限 をクリックします。

  4. 新規権限 パネルでパラメーターを設定し、OK をクリックします。 下表に、各パラメーターを説明します。

    パラメーター

    説明

    関連リソース

    他のユーザーにアクセス権限を付与するリソースを選択します。

    • バケット全体: バケットポリシーは、バケット内のすべてのリソースに適用されます。

    • 指定されたリソース: バケットポリシーは、バケット内の特定のリソースにのみ適用されます。 バケット内の特定のリソースに対して複数のバケットポリシーを設定できます。

      • ディレクトリレベルの権限付与

        バケットポリシーを設定して、ディレクトリ内のすべてのサブディレクトリとオブジェクトにアクセスする権限をユーザーに付与するには、ディレクトリ名の後にアスタリスク (*) を追加します。 たとえば、abcという名前のディレクトリ内のすべてのサブディレクトリとオブジェクトにアクセスする権限をユーザーに付与するには、abc/* と入力します。

      • オブジェクトレベルの権限付与

        特定のオブジェクトにアクセスする権限をユーザーに付与するようにバケットポリシーを設定するには、オブジェクトのフルパスを入力します。 フルパスにバケット名を含めることはできません。 たとえば、abcディレクトリのmyphoto.pngという名前のオブジェクトにアクセスする権限をユーザーに付与するには、abc/myphoto.pngと入力します。

    承認済みユーザー

    権限を付与するアカウントのタイプを選択します。

    • [すべてのアカウント (*)]: 指定したリソースにアクセスする権限をすべてのユーザーに付与する場合は、このオプションを選択します。

    • RAMユーザー: 現在のAlibaba CloudアカウントのRAMユーザーに、指定されたリソースにアクセスする権限を付与する場合は、このオプションを選択します。 次に、ドロップダウンリストからRAMユーザーを選択します。 複数のRAMユーザーに権限を付与する場合は、検索ボックスにRAMユーザー名のキーワードを入力してあいまい一致を実行することをお勧めします。

      重要

      RAMユーザーを選択する前に、Alibaba Cloudアカウントを使用するか、バケットを管理する権限を持ち、RAMコンソールでListUsers権限を持つRAMユーザーとしてOSSコンソールにログインしてください。 それ以外の場合、現在のAlibaba CloudアカウントのRAMユーザーを表示できません。 RAMユーザーにListUsers権限を付与する方法の詳細については、「RAMユーザーに権限を付与する」をご参照ください。

    • その他のアカウント: 他のAlibaba Cloudアカウント、RAMユーザー、またはRAMロールに、指定されたリソースへのアクセス許可を付与する場合は、このオプションを選択します。

      • 他のAlibaba CloudアカウントまたはRAMユーザーに指定されたリソースへのアクセス権限を付与するには、Alibaba CloudアカウントまたはRAMユーザーの一意識別子 (UID) を入力します。

      • RAMロールに指定されたリソースへのアクセス権限を付与するには、次の形式でIDを入力します。arn:sts :{ RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName} 。 たとえば、ロールはtestrole、ロールを所有するAlibaba CloudアカウントのUIDは137918634953xxxx、指定されたRoleSessionNameはtestsessionです。 この場合、arn:sts::137918634953xxxx:assumed-role/testrole/testsessionと入力します。 すべてのRAMロールに指定されたリソースへのアクセス権限を付与するには、アスタリスク (*) をワイルドカード文字として使用します。 たとえば、arn:sts::*:*:*/*/* と入力します。 詳細については、「AssumeRole」をご参照ください。

      重要

      RAMロールにOSSリソースへのアクセス権限を付与した場合、RAMロールはOSSコンソールを使用してOSSリソースにアクセスできません。 ただし、RAMロールはossutil、OSS API、またはOSS SDKを使用してOSSリソースにアクセスできます。 たとえば、ossutilを使用して許可されたリソースにアクセスする場合、アクセス資格情報を設定し、OSSリソースを要求して、バケットポリシーが有効かどうかを確認する必要があります。 詳細については、「STSから取得した一時的なアクセス資格情報を使用したデータへのアクセス」をご参照ください。

    許可された操作

    許可された操作を指定するには、[基本設定] および [詳細設定] のいずれかの方法を使用できます。

    • 基本設定

      このオプションを選択する場合は、ビジネス要件に基づいて次の権限を設定します。 各アクセス許可の右側のアイコンの上にmarkポインターを移動して、アクセス許可に対応するアクションを表示できます。

      • 読み取り専用 (ListObject を除く): 許可されたユーザーが指定されたリソースを表示およびダウンロードできます。

      • 読み取り専用 (ListObject を除く): 許可されたユーザーが指定されたリソースを表示、一覧表示、およびダウンロードできます。

      • 読み書き: 許可されたユーザーが指定されたリソースを読み書きできるようにします。

      • フルコントロール: 許可されたユーザーは、指定されたリソースに対するすべての操作を実行できます。

      • アクセス拒否: 許可されたユーザーが指定されたリソースに対して操作を実行することを禁止します。

      重要
      • へのアクセスを維持するには. dlsdata /ディレクトリとディレクトリ内のオブジェクト、アクセス拒否のため許可された操作OSS-HDFSが有効になっているバケットのバケットポリシーを設定すると、

      • ユーザーに複数のバケットポリシーが設定されている場合、そのユーザーはポリシーで設定されているすべての権限を持ちます。 ただし、Authorized Operationパラメーターがアクセス拒否に設定されているバケットポリシーが存在する場合、このバケットポリシーが優先されます。 たとえば、許可された操作が読み取り専用に設定されている最初のバケットポリシーを設定し、許可された操作が読み取り /書き込みに設定されている2番目のバケットポリシーを設定した場合、読み取り /書き込み権限がユーザーに付与されます。 許可された操作がアクセス拒否に設定されているサードバケットポリシーを設定した場合、ユーザーはリソースへのアクセスを拒否されます。

      • 読み取り専用 (ListObjectを除く) 、読み取り専用 (ListObjectを含む) 、読み取り /書き込み、およびフルアクセスの権限付与効果は許可、アクセス拒否の権限付与効果は拒否です。

    • 高度な設定

      このオプションを選択すると、次のパラメーターを設定します。

      • 効果: [許可] または [拒否] を選択します。

      • 操作: 許可または拒否するアクションを指定します。 サポートされているアクションの種類の詳細については、「RAMポリシー」をご参照ください。

    条件 (オプション)

    基本設定と詳細設定でこのパラメーターを設定して、ユーザーがOSSリソースにアクセスする前に満たす必要がある条件を指定できます。

    • アクセス方法: デフォルトでは、許可されたユーザーはHTTPおよびHTTPS経由でOSSリソースにアクセスできます。 許可されたユーザーがHTTPS経由でバケット内の指定されたリソースにアクセスする場合は、[HTTPS] を選択します。 許可されたユーザーがHTTP経由でバケット内の指定されたリソースにアクセスする場合は、[HTTP] を選択します。 HTTPと比較して、HTTPSはより安全です。

      HTTPSなどの1つのプロトコルを使用して、すべてのリクエストにバケット内のリソースへのアクセスを強制する場合は、ポリシーステートメントを指定してバケットポリシーを設定する必要があります。 詳細については、「HTTPSリクエストとSSL証明書を設定する方法を教えてください。 」をご参照ください。

    • IP =: OSSリソースへのアクセスに使用できるIPアドレスまたはCIDRブロックを指定します。 複数の IP アドレスはカンマ (,) で区切ります。

    • IP ≠: OSSリソースへのアクセスに使用できないIPアドレスまたはCIDRブロックを指定します。 複数の IP アドレスはカンマ (,) で区切ります。

    • VPC =: ユーザーがOSSリソースにアクセスできるVPCのIDを指定します。 ドロップダウンリストから、現在のAlibaba Cloudアカウントに属するVPCのIDを選択できます。 現在のAlibaba Cloudアカウントまたは別のAlibaba Cloudアカウントを使用して作成したVPCのIDをフィールドに入力することもできます。 VPCの作成方法については、「VPCの作成と管理」をご参照ください。

    • VPC ≠: ユーザーがOSSリソースにアクセスできないVPCのIDを指定します。 ドロップダウンリストから、現在のAlibaba Cloudアカウントに属するVPCのIDを選択できます。 現在のAlibaba Cloudアカウントまたは別のAlibaba Cloudアカウントを使用して作成したVPCのIDをフィールドに入力することもできます。 VPCの作成方法については、「VPCの作成と管理」をご参照ください。

    説明

    バケットポリシーでVPC (VPC=またはVPC ≠) とIP (IP=またはIP ≠) の両方の条件を指定する場合、バケットポリシーは指定されたVPCとIPアドレスの両方の要件を満たす必要があります。

  5. [OK] をクリックします。

方法2: ポリシーステートメントを指定してバケットポリシーを設定

  1. 左側のナビゲーションツリーで、権限管理 > バケット承認ポリシー を選択します。

  2. バケット承認ポリシー タブで、[構文で追加] をクリックし、[編集] をクリックします。

  3. コードエディターで、バケットポリシーを入力します。

    きめ細かいアクセス制御を実現するには、ビジネス要件に基づいてポリシーステートメントを指定します。 次のサンプルコードでは、UIDが174649585760xxxxのリソース所有者がさまざまなシナリオでバケットポリシーを構成する方法の例を示します。

    • 例1: すべてのユーザーがexamplebucketという名前のバケット内のすべてのオブジェクトを一覧表示できるようにします。

      {
          "Statement": [
              {
                  "Action": [
                      "oss:ListObjects",
                      "oss:ListObjectVersions"
      
                  ],
                  "Effect": "Allow",            
                  "Principal": [
                      "*"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              },
      
          ],
          "Version": "1"
      }
    • 例2: IPアドレスが192.168.0.0/16 CIDRブロックにないすべてのユーザーがexamplebucketという名前のバケットを管理することを拒否します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Deny",
                  "Action": "oss:*",
                  
                  "Principal": [
                      "*"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ],
                  "Condition":{
                      "NotIpAddress": {
                          "acs:SourceIp": ["192.168.0.0/16"]
                      }
                  }
              }
          ]
      }
    • 例3: UIDが20214760404935xxxxであるRAMユーザーが、examplebucketという名前のバケット内のhangzhou/2020ディレクトリとhangzhou/2015ディレクトリのみを読み取ることを許可します。

      {
          "Statement": [
              {
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl",
                      "oss:GetObjectVersion",
                      "oss:GetObjectVersionAcl"
      
                  ],
                  "Effect": "Allow",             
                  "Principal": [
                      "20214760404935xxxx"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                      "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*"
                  ]
              },
              {
                  "Action": [
                      "oss:ListObjects",
                      "oss:ListObjectVersions"
                  ],
                  "Condition": {
                      "StringLike": {
                          "oss:Prefix": [
                              "hangzhou/2020/*",
                              "hangzhou/2015/*"
                          ]
                      }
                  },
                  "Effect": "Allow",
                  "Principal": [
                      "20214760404935xxxx"
                  ],
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              }
          ],
          "Version": "1"
      }
  4. [保存] をクリックします。 表示されたメッセージボックスで [OK] をクリックします。

ossbrowserの使用

ossbrowserを使用して、OSSコンソールで実行できるのと同じバケットレベルの操作を実行できます。 ossbrowserの画面上の指示に従って、バケットポリシーを変更します。 ossbrowserの使用方法の詳細については、「ossbrowserの使用」をご参照ください。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してバケットポリシーを設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットポリシーを設定する方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in the examplebucket bucket. 
            String policyText = "{\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"oss:GetObject\", \"oss:ListObjects\"], \"Principal\": [\"20214760404935xxxx\"], \"Resource\": [\"acs:oss:*:174649585760xxxx:examplebucket/*\"]}], \"Version\": \"1\"}";

            // Configure the bucket policy. 
            ossClient.setBucketPolicy(bucketName, policyText);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
$provider = new EnvironmentVariableCredentialsProvider();
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket. Example: examplebucket. 
$bucket= "examplebucket";

// In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in the examplebucket bucket. 
$policy = <<< BBBB
{
  "Version":"1",
  "Statement":[
  {
    "Action":[
    "oss:GetObject",
    "oss:ListObjects"
  ],
    "Principal": [
    "20214760404935xxxx"           
  ],
    "Effect":"Allow",
    "Resource":["acs:oss:*:174649585760xxxx:examplebucket/*"]
  }
  ]
}
BBBB;

try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    // Configure the bucket policy. 
    $ossClient->putBucketPolicy($bucket, $policy);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss')

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. Example: examplebucket. 
  bucket: 'examplebucket'
});
// In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in the examplebucket bucket. 
const policy = {
  Version: '1',
  Statement: [
  {
      Action: ['oss:ListObjects', 'oss:GetObject'],
      Effect: 'Allow',
      Principal: ['20214760404935xxxx'],
      Resource: ['acs:oss:*:174649585760xxxx:examplebucket']
    }
  ]
};

async function putPolicy() {
  const result = await client.putBucketPolicy('examplebucket', policy);
  console.log(result)
}

putPolicy()
# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import json

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in examplebucket.
policy_text = '{"Statement": [{"Effect": "Allow", "Action": ["oss:GetObject", "oss:ListObjects"], "Principal": ["20214760404935xxxx"], "Resource": ["acs:oss:*:174649585760xxxx:examplebucket/*"]}], "Version": "1"}'

# Configure the bucket policy.
bucket.put_bucket_policy(policy_text)
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. 
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";
            
// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();
            
// Use the signature algorithm V4.
 conf.SignatureVersion = SignatureVersion.V4;
            
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
    // In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in the examplebucket bucket. 
    string policy = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:ListObjects\",\"oss:GetObject\"], \"Principal": \"20214760404935xxxx"\, \"Resource\": \"acs:oss:*:174649585760xxxx:examplebucket\*",\"Effect\": \"Allow\"}]}\n";
    var request = new SetBucketPolicyRequest(bucketName, policy);
    client.SetBucketPolicy(request);
    Console.WriteLine("Set bucket:{0} Policy succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize the information about the account that is used to access OSS. */
            
    /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the name of the bucket. Example: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize resources, such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* In the following example, the bucket owner whose UID is 174649585760xxxx uses a bucket policy to authorize a RAM user whose UID is 20214760404935xxxx to list all objects in the examplebucket bucket. */
    std::string policy = 
        R"(
        {
            "Statement": [
            {
                "Action": [
                    "oss:GetObject",
                    "oss:ListObjects"
                ],
                "Principal": [
                    "20214760404935xxxx"           
                ],
                "Effect" : "Allow",
                "Resource" : ["acs:oss:*:174649585760xxxx:examplebucket/*"]
            }
            ],
                "Version": "1"
        }
        )";
    SetBucketPolicyRequest request(BucketName);
    request.setPolicy(policy);
    auto outcome = client.SetBucketPolicy(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "Set Bucket Policy fail" <<
            ",code:" << outcome.error().Code() <<
            ",message:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
    }

    /* Release resources, such as network resources. */
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Define global variables.
var (
	region     string // Region in which the bucket is located.
	bucketName string // Name of the bucket.
)

// Specify the init function used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// Parse command line parameters.
	flag.Parse()

	// Check whether the name of the bucket is specified.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check whether the region is specified.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Load the default configurations and specify the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Define the bucket policy.
	policy := `{
		"Version": "1",
		"Statement": [
			{
				"Action": [
					"oss:PutObject",
					"oss:GetObject"
				],
				"Effect": "Deny",
				"Principal": ["1234567890"],
				"Resource": ["acs:oss:*:1234567890:*/*"]
			}
		]
	}`

	// Create a request to configure a bucket policy.
	request := &oss.PutBucketPolicyRequest{
		Bucket: oss.Ptr(bucketName),       // Name of the bucket.
		Body:   strings.NewReader(policy), // The bucket policy.
	}

	// Perform the operation to configure the bucket policy.
	result, err := client.PutBucketPolicy(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket policy %v", err)
	}

	// Display the result.
	log.Printf("put bucket policy result:%#v\n", result)
}

ossutilの使用

ossutilを使用してバケットのポリシーを設定できます。 インストールの詳細については、「ossutilのインストール」をご参照ください。

次の例では、examplebucketのアクセス制御ポリシーを設定して、IDがPutObjectおよびGetObject操作を実行する権限を1234567890 RAMユーザーを拒否します。

ossutil api put-bucket-policy --bucket examplebucket --body "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:oss:*:1234567890:*/*\"]}]}"

許可されたOSSリソースへのアクセス方法

バケットにバケットポリシーを設定した後、次のいずれかの方法を使用して、バケットポリシーで指定されたリソースにアクセスできます。

  • オブジェクトURL (すべてのユーザーがリソースへのアクセスを許可されている場合のみ)

    ポリシーで指定されたオブジェクトのURLをブラウザに入力して、オブジェクトにアクセスします。 オブジェクトのURLは、バケットのデフォルトドメイン名、またはバケットにマップされたカスタムドメイン名とオブジェクトのパスで構成されます。 例: http://mybucket.oss-cn-beijing.aliyuncs.com/file/myphoto.png 。 詳細については、「OSSドメイン名」をご参照ください。

  • OSS コンソール

    OSS コンソールにログインします。 左側のナビゲーションウィンドウで、[お気に入りのパス] の右側にある [+] アイコンをクリックします。 [お気に入りパスの追加] ダイアログボックスで、バケットポリシーで指定されたバケットとオブジェクトパスを追加します。 詳細は、「OSSアクセスパス」をご参照ください。

  • ossutil

    バケットポリシーで指定された承認済みアカウントを使用してossutilにログインし、ポリシーで指定されたリソースにアクセスします。 詳細については、「ossutil」をご参照ください。

  • ossbrowser

    バケットポリシーで指定されている承認済みアカウントを使用して、ossbrowserにログインします。 [プリセットOSSパス] フィールドに、ポリシーで指定されたオブジェクトのパスを入力します。 詳細については、「ossbrowser」をご参照ください。

  • OSS SDK

    次のプログラミング言語のOSS SDKを使用して、ポリシーで指定されているリソースにアクセスできます。Java,PHP,Node.js,Python,Browser.js,. NET,アンドロイド,行く,iOS,C ++、およびC.

関連するAPI操作

上記のメソッドは基本的にRESTful APIに基づいて実装されており、ビジネスで高レベルのカスタマイズが必要な場合に直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketPolicy」をご参照ください。

関連ドキュメント