Security Token Service (STS) を使用して、一時的なアクセス許可を付与し、RAMユーザーパスワードの漏洩によるセキュリティリスクを防ぐことができます。 このトピックでは、RAMユーザーとRAMロールを作成する方法、およびSTSを使用して一時的なアクセス許可を付与する方法について説明します。

始める前に

リソースアクセス管理 (RAM) が有効になります。

このタスクについて

RAMユーザーに付与された権限は無期限に使用される可能性があり、セキュリティリスクにつながる可能性があります。 セキュリティ上の理由から、カスタム有効期間を持つSTSの一時的なAccessKeyペアを生成し、RAMユーザーに最小限の権限のみを付与する複雑なポリシーをアタッチすることを推奨します。

RAM ユーザーの作成

  1. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。 [ユーザー] ページで、[ユーザーの作成] をクリックします。
    ユーザー管理
  2. [ユーザーの作成] ページで、[ログイン名][表示名] を指定します。
    [ログイン名] フィールドに [vod] と入力します。
  3. [アクセスモード] セクションで、[OpenAPIアクセス] を選択し、[OK] をクリックします。
    ユーザーを作成する
    [OK] をクリックすると、SMS検証ウィンドウが表示されます。 確認コードを入力すると、RAMユーザーのAccessKeyペアが自動的に生成されます。 AccessKeyペアを生成します。
  4. [操作] 列の [コピー] をクリックして、ログイン名、ログインパスワード、AccessKeyペア (AccessKey IDとAccessKey Secret) などのユーザー情報をクリップボードにコピーします。
    将来の使用に備えて、ユーザー情報を安全な場所に保存することをお勧めします。
  5. [ユーザー] ページに戻ります。 作成したRAMユーザーがユーザーリストに表示されます。 RAMユーザーの作成後、RAMユーザーには権限がありません。 [操作] 列の [権限の追加] をクリックして、作成したRAMユーザーに権限を付与します。
    許可を追加する
  6. [ポリシーの選択] セクションで、ポリシー名フィールドにAliyunSTSAssumeRoleAccessと入力し、フィールドの下の表に表示されるポリシーを選択します。 そして、[OK] をクリックします。
    ポリシーの選択

RAM ロールの作成

  1. RAM コンソールにログインします。
    RAM ロールの作成
  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。 [ロール] ページで、[ロールの作成] をクリックします。
  3. [ロールの作成] ページで、[Alibaba Cloudアカウント] を選択し、[次へ] をクリックします。
    RAMロールの作成-1
  4. RAMロールの名前を入力し、[現在のAlibaba Cloudアカウント] を選択します。 [OK] をクリックします。
    RAMロールの作成-2
    RAMロールの作成後、次のメッセージが表示されます。作成されたRAMロール
  5. [ロール] ページに戻ります。 作成したロールを見つけ、[操作] 列の [権限の追加] をクリックして、作成したロールに権限を付与します。
    許可を追加する
  6. [ポリシーの選択] セクションで、ポリシー名フィールドにAliyunVODFullAccessと入力し、フィールドの下の表に表示されるポリシーを選択します。 そして、[OK] をクリックします。
    権限の付与
    セキュリティリスクを軽減するために、RAMユーザーに最低限必要な権限のみを付与することを推奨します。
    権限が付与されると、レコードが生成されます。 付与された権限

STSを使用したアクセス許可

対応するプログラミング言語のSTS SDKをダウンロードしてインストールするか、ロールの引き受け(AssumeRole)操作を呼び出す必要があります。 次の例は、Javaのロールとポリシーの設定を示しています。

API操作の呼び出し方法については、「概要」をご参照ください。

  • Javaのサンプルコード

    RAMユーザーとRAMロールの作成後、STSを使用してアクセス許可を付与できます。

    次の例では、RAMユーザーにアクセス権限を付与する方法について説明します。 この例には、パラメーターの説明と関連するサンプルコードが含まれています。

    • RoleArn: 引き受けられるロールのID。 RoleArnの値を取得するには、RAMコンソールの [ロール] ページに移動します。 RAMロールの名前をクリックし、[基本情報] セクションでARNの値を確認します。
    • RoleSessionName: ロールのセッション名。 ビジネス要件に基づいて、このパラメーターの値をカスタマイズします。 ほとんどの場合、RoleSessionNameは、RAMユーザーのユーザー名など、操作を呼び出すユーザーのIDに設定されます。 ActionTrailログでは、RoleSessionNameを使用して、同じRAMロールを引き受けて操作を実行するユーザーを区別できます。 これにより、RAMユーザーに基づいてアクセス要求を監査できます。 RoleSessionNameの値は2 ~ 64文字で、英数字、ピリオド (.) 、アットサイン (@) 、ハイフン (-) 、アンダースコア (_) を使用できます。
    • ポリシー: ユーザーがロールを引き受けるときに追加される権限制限。
      • Policyパラメーターは、ユーザーがロールを引き受けた後、一時的なアクセス資格情報の権限を制限するために渡されます。 一時的なアクセス資格情報によって取得される最終的な権限は、ロールの権限とPolicyパラメーターで指定された権限の共通部分です。
      • Policyパラメーターは、柔軟性を向上させるために渡されます。 たとえば、このパラメーターを設定して、CreateUploadVideo操作のみを呼び出すことができます。
    • DurationSeconds: 一時的なアクセス資格情報の有効期間。 (単位:秒) 有効値:900 〜 3600。
    • AccessKeyIdとAccessKeySecret: ロールとそのAccessKeyペアを引き受けるRAMユーザー。
    パッケージポップ;
    
    com.aliyuncs.DefaultAcsClientをインポートします。com.aliyuncs.exceptions.ClientExceptionをインポートします。com.aliyuncs.http.MethodTypeをインポートします。com.aliyuncs.profile.DefaultProfileをインポートします。com.aliyuncs.profile.IClientProfileをインポートします。com.aliyuncs.sts.mo del.v20150401.AssumeRoleRequestをインポートします。com.aliyuncs.sts.mo del.v20150401.AssumeRoleResponseをインポートします。com.aliyuncs.vod.mo del.v20170321.CreateUploadVideoRequestをインポートします。com.aliyuncs.vod.mo del.v20170321.CreateUploadVideoResponseをインポートします。/**
     * @ 著者ジャック
     * @ date 2018/5/25
     * /
    パブリッククラスTestStsService {
    
        public static void main(String[] args) {
            // AssumeRole操作を呼び出すことができるのはRAMユーザーのみです。
            // Alibaba CloudアカウントのAccessKeyペアを使用してAssumeRoleリクエストを開始することはできません。
            // RAMコンソールでRAMユーザーを作成し、そのユーザーのAccessKeyペアを作成します。
            String accessKeyId = "<access-key-id>";
            String accessKeySecret = "<access-key-secret>";
            // AssumeRole操作のリクエストパラメーターには、RoleArn、RoleSessionName、Policy、およびDurationSecondsが含まれます。
            // RAMコンソールでRoleArnの値を取得する必要があります。
            String roleArn = "<role-arn>";
            // RoleSessionName: ロールのセッション名。 You can customize this parameter.
            String roleSessionName = "session-name";// セッション名を指定します。
            // ポリシーを指定します。
            String policy = "{\n" +
                    " \" バージョン \": \" 1\",\n" +
                    " \" ステートメント \": [\n" +
                    " {\n" +
                    " \" アクション \": \" vod:*\",\n" +
                    " \" リソース \": \" *\",\n" +
                    " \" 効果 \": \" 許可 \"\n" +
                    " }\n" +
                    " ]\n" +
                    "}";
            try {
                AssumeRoleResponseレスポンス=assumeRole(accessKeyId、accessKeySecret、roleArn、roleSessionName、ポリシー);
                System.out.println("Expiration: " + response.getCredentials().getExpiration());
                System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
                System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
                System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
                System.out.println("RequestId: " + response.getRequestId());
    
                createUploadVideo(response.getCredentials().getAccessKeyId() 、response.getCredentials().getAccessKeySecret() 、response.getCredentials().getSecurityToken());
            } catch (ClientException e) {
                System.out.println("Failed to get a token.");
                System.out.println("Error code: " + e.getErrCode());
                System.out.println("Error message: " + e.getErrMsg());
            }
        }
    
        静的AssumeRoleResponse assumeRole(String accessKeyId、String accessKeySecret、String roleArn、String roleSessionName、Stringポリシー) はClientException {
            try {
                // デフォルトのプロファイルを作成します。 regionIdパラメーターは空のままにします。
                /*
                注: SysEndpoint t o sts.aliyuncs.comを設定した場合、regionIdはオプションです。 それ以外の場合は、使用中のサービスリージョンにregionIdを設定する必要があります。 例: cn-shanghai.
                異なるリージョンのSTSエンドポイントのリストについては、「サービスリージョン」をご参照ください。 
                 */
                IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
                // プロファイルを使用してクライアントを構築します。
                DefaultAcsClient client = new DefaultAcsClient(profile);
                // AssumeRoleリクエストを作成し、リクエストパラメーターを設定します。
                final AssumeRoleRequest request = new AssumeRoleRequest();
                request.setSysEndpoint("sts.aliyuncs.com");
                request.setSysMethod(MethodType.POST);
                request.setRoleArn(roleArn);
                request.setRoleSessionName(roleSessionName);
                request.setPolicy(policy);
                // リクエストを開始し、レスポンスを取得します。
                final AssumeRoleResponse response = client.getAcsResponse(request);
                return response;
            } catch (ClientException e) {
                throw e;
            }
        }
    
        static void createUploadVideo(String accessKeyId, String accessKeySecret, String token) {
            // ApsaraVideo VODのリージョンを指定します。 たとえば、サービスリージョンが上海の場合、regionIdをcn-Shanghaiに設定します。
            String regionId = "cn-shanghai";
            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient client = new DefaultAcsClient(profile);
    
            CreateUploadVideoRequest request = new CreateUploadVideoRequest();
            request.setSecurityToken (トークン);
            request.setTitle("t5");
            request.setFileName("D :\\ TestVideo\\t4.mp4");
            request.setFileSize(10240L);
    
            try {
                CreateUploadVideoResponseレスポンス=client.getAcsResponse (リクエスト);
                System.out.println("CreateUploadVideoRequest" + request.getUrl());
                System.out.println("CreateUploadVideoRequest, requestId:" + response.getRequestId());
                System.out.println("UploadAddress", + response.getUploadAddress());
                System.out.println("UploadAuth", + response.getUploadAuth());
                System.out.println("VideoId", + response.getVideoId());
            } catch (ClientException e) {
                System.out.println("action, error:" + e);
                e.printStackTrace();
            }
        }
    }
                    
  • SDK のダウンロード
  • インストール
  • SDK のダウンロード
  • インストール

リクエストが開始された後、レスポンスが返されます。 詳細については、「戻り値の処理」をご参照ください。