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

Object Storage Service:RAM ユーザーの AccessKey ペアを使用した OSS リソースへのアクセス

最終更新日:Mar 21, 2026

Alibaba Cloud のルートアカウント(root アカウント)の認証情報を使用するよりも、Resource Access Management (RAM) ユーザーの AccessKey ペアを用いて OSS にアクセスする方がセキュリティ面で優れています。これは、RAM ユーザーに対して必要な最小限の権限のみを付与できるためです。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • RAM 管理者権限を持つ Alibaba Cloud アカウント

  • オブジェクトをアップロードするための OSS バケット

手順 1:RAM ユーザーの作成

  1. Alibaba Cloud アカウントまたは RAM 管理者として、RAM コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、ID > ユーザー を選択します。

  3. ユーザー ページで、ユーザーの作成 をクリックします。

  4. ユーザー アカウント情報 セクションで、以下のフィールドを設定します。

    説明

    複数の RAM ユーザーを一度に作成する場合は、ユーザーの追加 をクリックします。

    フィールド説明
    ログイン名最大 64 文字。英字、数字、ピリオド (.)、ハイフン (-)、アンダースコア (_) を使用できます。
    表示名最大 128 文字。
    タグ編集アイコンをクリックして、タグキーとタグ値を入力します。タグは、RAM ユーザーの分類および管理に役立ちます。
  5. アクセスモード セクションで、永続的な AccessKey を使用したアクセス を選択し、OK をクリックします。

  6. コピー をクリックして、AccessKey ペアを保存します。

    重要

    AccessKey Secret は、AccessKey ペアが初めて作成されたときのみ表示されます。その後は取得できません。AccessKey ID と AccessKey Secret の両方を、安全な場所にコピーしてください。Secret を紛失した場合、新しい AccessKey ペアを作成する必要があります。

手順 2:RAM ユーザーにオブジェクトのアップロード権限を付与

カスタムポリシーの作成

  1. 左側のナビゲーションウィンドウで、権限 > ポリシー を選択します。

  2. ポリシー ページで、ポリシーの作成 をクリックします。

  3. ポリシーの作成 ページで、JSON タブをクリックし、以下のポリシードキュメントを入力します。この例では、oss:PutObject 権限を、exampledir ディレクトリ(examplebucket 内)に付与しています。

    警告

    この例は参考用です。過剰な権限を付与しないよう、実際の要件に応じて詳細な RAM ポリシーを設定してください。詳細については、「例 9:RAM または STS を使用した OSS リソースへのユーザー権限付与」をご参照ください。

       {
         "Version": "1",
         "Statement": [
           {
             "Effect": "Allow",
             "Action": "oss:PutObject",
             "Resource": "acs:oss:*:*:examplebucket/exampledir/*"
           }
         ]
       }
  4. OK をクリックします。

  5. ポリシー名RamTestPolicy に設定し、OK をクリックします。

RAM ユーザーへのポリシーのアタッチ

  1. 左側のナビゲーションウィンドウで、ID > ユーザー を選択します。

  2. ユーザー ページで、対象の RAM ユーザーを検索し、[操作] 列の 権限の追加 をクリックします。

  3. 権限の付与 パネルで、カスタムポリシー タブをクリックし、RamTestPolicy を選択して、OK をクリックします。

手順 3:RAM ユーザーの AccessKey ペアを用いたオブジェクトのアップロード

以下の例では、Java SDK(署名バージョン 4)を用いて、ローカルファイル (examplefile.txt) を、exampledir/exampleobject.txtexamplebucket 内)にアップロードします。

環境変数の設定

SDK がコード内にハードコーディングせずに認証情報を読み込めるよう、AccessKey ペアを環境変数として設定します。

Linux/macOS:

setx OSS_ACCESS_KEY_ID "<お使いのアクセスキー ID>"
setx OSS_ACCESS_KEY_SECRET "<お使いのアクセスキー シークレット>"

Windows(コマンドプロンプト):

setx OSS_ACCESS_KEY_ID "<your-accesskey-id>"
setx OSS_ACCESS_KEY_SECRET "<your-accesskey-secret>"

<your-accesskey-id> および <your-accesskey-secret> は、手順 1 でコピーした値に置き換えてください。

オブジェクトのアップロード

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;

public class Demo {

    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();
        // バケット名。
        String bucketName = "examplebucket";
        // バケット内のオブジェクトのフルパス。バケット名は含めません。
        String objectName = "exampledir/exampleobject.txt";
        // アップロードするローカルファイルのフルパス。
        String filePath = "D:\\localpath\\examplefile.txt";
        // バケットが配置されているリージョン。
        String region = "cn-hangzhou";

        // 署名バージョン 4 を使用して OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)
            .build();

        try {
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("OSS がリクエストを拒否しました: " + oe.getErrorMessage());
            System.out.println("エラーコード: " + oe.getErrorCode());
            System.out.println("リクエスト ID: " + oe.getRequestId());
            System.out.println("ホスト ID: " + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("クライアントエラー(例:ネットワーク障害): " + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

他の言語の例については、以下をご参照ください。

よくある質問

AccessKey ID はどこで確認できますか? AccessKey Secret は後から取得できますか?

RAM ユーザーの AccessKey ID を表示するには、「RAM ユーザーの AccessKey ペアに関する情報を表示する」をご参照ください。

AccessKey Secret は、ペアが初めて作成されたときにのみ表示されます。紛失した場合は、RAM コンソールに移動して新しい AccessKey ペアを作成してください。「AccessKey ペアの作成」をご参照ください。

アップロード時に AccessDenied エラーが発生しました。何を確認すればよいですか?

AccessDenied エラーは、通常、AccessKey ペアが不正であるか、RAM ユーザーにアップロード権限が付与されていないことを意味します。

  1. AccessKey ペアを確認します。詳しくは、「RAM ユーザーの AccessKey ペアの情報を表示する」をご参照ください。シークレットを紛失した場合は、[RAM コンソール] で新しい AccessKey ペアを作成します。

  2. RAM コンソール で、RAM ユーザーが対象バケットに対して oss:PutObject 権限を持っているか確認してください。権限がない場合は、適切なポリシーをアタッチしてください。

特定のエラー種別を判別するにはどうすればよいですか?

OSS は、エラーを特定するための エラーコード リファレンス を提供しています。認証関連のエラーについては、「02-AUTH」をご参照ください。

NoSuchBucket エラーが発生しました。原因は何ですか?

コード内のバケット名が、指定されたリージョンに存在するバケットと一致していないためです。バケット名を確認し、該当のバケットが実際に存在することを確認してください。

「The bucket you are attempting to access must be addressed using the specified endpoint.」というエラーが発生しました。原因は何ですか?

コード内のエンドポイントが、バケットが配置されているリージョンと一致していないためです。「リージョンとエンドポイント」で、バケットのリージョンに対応する正しいエンドポイントを確認し、コードを更新してください。

次のステップ

認証情報を公開せずに第三者とアップロード済みオブジェクトを共有するには、一時的なアクセスを許可する署名付き URL を生成します。「署名付き URL を使用したオブジェクトのダウンロード」をご参照ください。