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

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

最終更新日:Feb 26, 2024

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

使用上の注意

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

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

  • 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は137918634953 **** 、指定されたRoleSessionNameはtestsessionです。 この場合、arn:sts::137918634953 ****: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を含む) 、読み取り /書き込み、およびフルアクセスの権限付与効果は許可、アクセス拒否の権限付与効果は拒否です。

    • 高度な設定

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

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

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

    条件 (オプション)

    基本設定と詳細設定でこのパラメーターを設定して、ユーザーが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",            
                  "プリンシパル": [
                      "*"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              },
      
          ],
          "バージョン": "1"
      } 
    • 例2: IPアドレスが192.168.0.0/16 CIDRブロックにないすべてのユーザーがexamplebucketという名前のバケットを管理することを拒否します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Deny",
                  "Action": "oss:*",
                  
                  "プリンシパル": [
                      "*"
                  ],            
                  "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",             
                  "プリンシパル": [
                      "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",
                  "プリンシパル": [
                      "20214760404935xxxx"
                  ],
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              }
          ],
          "バージョン": "1"
      } 
  4. [保存] をクリックします。 表示されるメッセージで、[OK] をクリックします。

ossbrowserの使用

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

OSS SDKの使用

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 次のサンプルコードは、バケット内のすべてのオブジェクトを一覧表示する権限をRAMユーザーに付与するために、バケット所有者がバケットポリシーを構成する方法の例を示しています。 サンプルコードでは、バケット所有者のUIDは174649585760xxxx、RAMユーザーのUIDは20214760404935xxxx、バケットの名前はexamplebucketです。 
            String policyText = "{\" Statement\": [{\" Effect\": \" Allow\", \" Action\": [\" oss:GetObject\", \" oss:ListObjects\"], \" Principal\": [\" 20214760404935xxxx\"], \" Resource\": [\" acs:oss:*:174649585760xxxx:examplebucket/*\"]}, \" Version\": \" 1\"}";

            // バケットポリシーを設定します。 
            ossClient.setBucketPolicy(bucketName、policyText);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            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';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数を指定していることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);

// バケットポリシーを設定します。 
$policy = <<< BBBB
{
  "バージョン":"1" 、
  "ステートメント":[
  {
    "Action":[
    &quot;OSS:のputObject&quot;、
    "oss:GetObject"
  ],
    "効果":"許可" 、
    "Resource":["acs:oss:*:174649585760xxxx:examplebucket/*"]
  }
  ]
}
BBBB;

try {
    // バケットポリシーをバケットに割り当てます。 
    $ossClient->putBucketPolicy($bucket、$policy);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  region: 'yourregion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});
// バケットポリシーを設定します。 
const policy = {
  バージョン: '1' 、
  ステートメント: [
  {
      アクション: ['oss:PutObject' 、'oss:GetObject'] 、
      効果: 'Deny',
      プリンシパル: ['27737962156157xxxx'] 、
      リソース: ['acs:oss:*:174649585760xxxx:examplebucket']
    }
  ]
};

async関数putPolicy() {
  const result = await client.putBucketPolicy('yourbucketname', policy);
  console.log (結果)
}

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

oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
jsonのインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'http:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')

# policy_textを指定します。 
policy_text = '{"Statement": [{"Effect": "Allow", "Action": ["oss:GetObject", "oss:ListObjects"], "Resource": ["acs:oss: oss:*:174649585760xxxx:examplebucket/*"]}], "Version": "1"}'

# バケットポリシーを設定します。 
Aliyun.OSSを使用したbucket.put_bucket_policy(policy_text)
;
Aliyun.OSS.Common; を使用
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 
var bucketName = "examplebucket";
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    // バケットポリシーを設定します。 
    string policy = "{\" Version\": \" 1\",\" Statement\":[{\" Action\":[\" oss:PutObject\",\" oss:GetObject\"]],\" Resource\": \" acs:oss:*:*:*:*\"、\" Effect\": \" 拒否 \"}]}\n";
    var request = new SetBucketPolicyRequest(bucketName、ポリシー);
    client.SetBucketPolicy (要求);
    Console.WriteLine("Set bucket:{0} Policy successed", bucketName);
}
キャッチ (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
    Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
} 
パッケージメイン

import (import (import)
    "fmt"
    "os"

    「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
    /// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // ポリシーを設定します。 
    policyConfig := '
    {
        "Statement": [
            {
                "Action": [
                    &quot;oss:GetObject&quot;、
                    "oss:ListObjects"
                ],
                "Effect" : "Allow",
                "Resource" : ["acs:oss:*:174649585760xxxx:examplebucket/*"]
            }
        ],
        "Version": "1"
    }`

    // ポリシーをバケットに割り当てます。 
    // バケットの名前を指定します。 
    err = client.SetBucketPolicy("yourBucketName", policyConfig)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println (「SetBucketPolicyの成功」)
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    /* ポリシーを設定します。 */
    std::string policy= 
        R "(
        {
            "Statement": [
            {
                "Action": [
                    &quot;oss:GetObject&quot;、
                    "oss:ListObjects"
                ],
                    "Effect" : "Allow",
                        "Resource" : ["acs:oss:*:174649585760xxxx:examplebucket/*"]
            }
            ],
                "Version": "1"
        }
        )";
    SetBucketPolicyRequestリクエスト (BucketName);
    request.setPolicy(policy);
    auto outcome = client.SetBucketPolicy (リクエスト);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "バケットポリシーの設定に失敗" <<
            ",code:" << outcome.error().Code() <<
            ",message:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

ossutilの使用

ossutilを使用して、バケットポリシーを設定または変更できます。 詳細は、「bucket-policy」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketPolicy」をご参照ください。

許可された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を使用して、ポリシーで指定されているリソースにアクセスできます: JavaPHPNode.jsPythonBrowser.js。NETAndroidGoiOSC ++ 、およびC

参考資料