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

Tablestore:アクセス認証情報を構成する

最終更新日:Dec 28, 2024

Tablestore SDK for Java を使用してリクエストを開始するには、アクセス認証情報を構成する必要があります。Alibaba Cloud サービスは、アクセス認証情報を使用して ID 情報とアクセス許可を確認します。認証と承認の要件に基づいて、さまざまな種類のアクセス認証情報を選択できます。

前提条件

Tablestore SDK for Java がインストールされていること。詳細については、Tablestore SDK for Java をインストールする を参照してください。

初期化方法を選択する

認証情報プロバイダーを選択する

Tablestore は、認証情報プロバイダーを初期化する複数の方法をサポートしています。実際のシナリオの認証と承認の要件に基づいて、適切な方法を選択できます。

初期化方法

シナリオ

AccessKey ペアまたは STS トークンが必要

基盤となるロジック

認証情報の有効期間

認証情報のローテーションまたは更新方法

方法 1: AccessKey ペアを使用する

アプリケーションは、外部攻撃を受けにくい安全で安定した環境にデプロイおよび実行され、頻繁な認証情報のローテーションなしでクラウドサービスに長期間アクセスする必要があります。

はい

AccessKey ペア

長期

手動ローテーション

方法 2: 自動的にローテーションする AccessKey ペアを使用する

アプリケーションは、AccessKey ペアが漏洩する可能性のある環境にデプロイおよび実行され、クラウドサービスに長期間アクセスするためにアクセス認証情報を頻繁にローテーションする必要があります。

いいえ

AccessKey ペア

長期

自動ローテーション

方法 3: STS トークンを使用する

アプリケーションは、信頼されていない環境にデプロイおよび実行されます。この場合、認証情報の有効期間とアクセスできるリソースを管理する必要があります。

はい

STS トークン

一時的

手動更新

方法 4: AccessKey ペアと RAM ロールを使用する

アプリケーションは、アカウント間のアクセスなど、クラウドサービスにアクセスするための承認を受ける必要があります。

はい

STS トークン

一時的

自動更新

方法 5: ECS インスタンスの RAM ロールを使用する

アプリケーションは、Elastic Compute Service (ECS) インスタンス、エラスティックコンテナインスタンス、または Container Service for Kubernetes (ACK) ワーカーノードにデプロイおよび実行されます。

いいえ

STS トークン

一時的

自動更新

方法 6: OIDC IdP の RAM ロールを使用する

信頼されていないアプリケーションは、ACK ワーカーノードにデプロイおよび実行されます。

いいえ

STS トークン

一時的

自動更新

方法 7: Function Compute のコンテキストで Credentials パラメーターを使用する

アプリケーションの関数は、Function Compute にデプロイおよび実行されます。

いいえ

STS トークン

一時的

更新不要

方法 8: 認証情報 URI を使用する

アプリケーションは、外部システムからのアクセス認証情報を必要とします。

いいえ

STS トークン

一時的

自動更新

方法 9: カスタムアクセス認証情報を使用する

上記のいずれの方法も要件を満たしていない場合は、カスタムメソッドを指定してアクセス認証情報を取得できます。

カスタム

カスタム

カスタム

カスタム

方法 1: AccessKey ペアを使用する

アプリケーションが外部攻撃を受けにくい安全で安定した環境にデプロイされ、頻繁な認証情報のローテーションなしで Tablestore に長期間アクセスする必要がある場合は、Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ペアを使用して認証情報プロバイダーを初期化できます。AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。この方法では、AccessKey ペアを手動で管理する必要があることに注意してください。これにより、セキュリティリスクが発生し、メンテナンスの複雑さが増します。AccessKey ペアの取得方法の詳細については、RAM ユーザーの AccessKey ペアを使用してリクエストを開始する を参照してください。

警告

Alibaba Cloud アカウントは、アカウント内のリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアの漏洩は、システムに重大な脅威をもたらします。そのため、最小限の権限の原則に基づいて権限が付与された RAM ユーザーの AccessKey ペアを使用して、認証情報プロバイダーを初期化することをお勧めします。

環境変数

  1. AccessKey ペアを使用して環境変数を指定します。

    Mac OS X、Linux、および Unix
    export TABLESTORE_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export TABLESTORE_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    Windows

    コマンドプロンプトを開き、管理者として次のコマンドを実行します。

    setx TABLESTORE_ACCESS_KEY_ID <ALIBABA_CLOUD_ACCESS_KEY_ID> /m
    setx TABLESTORE_ACCESS_KEY_SECRET <ALIBABA_CLOUD_ACCESS_KEY_SECRET> /m
  2. 環境変数を使用して認証情報を渡します。

    説明

    環境変数を指定した後、統合開発環境 (IDE) などの関連サービスまたは開発ツールを再起動して、新しい設定が想定どおりに適用されていることを確認する必要がある場合があります。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProviderFactory;
    import com.alicloud.openservices.tablestore.core.auth.EnvironmentVariableCredentialsProvider;
    
    public class AkDemoTest {
        public static void main(String[] args) throws Exception {
            // 環境変数からアクセス認証情報を取得します。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 後続の操作に credentialsProvider を使用します。
        }
    }

静的認証情報

コードで変数を指定することで、認証情報を参照できます。ランタイム環境では、変数は環境変数、構成ファイル、またはその他の外部データソースからの実際の認証情報値によって渡されます。

次の手順では、構成ファイルを使用して認証情報を渡す方法について説明します。

  1. config.ini という名前の構成ファイルを作成します。

    [credentials]
    accessKeyId = <ALIBABA_CLOUD_ACCESS_KEY_ID>
    accessKeySecret = <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
  2. 構成ファイルを使用して認証情報を渡します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
    import java.io.FileInputStream;
    import java.util.Properties;
    
    public class AkDemoTest {
        public static void main(String[] args) throws Exception {
            Properties properties = new Properties();
            // 構成ファイルのパスを指定します。
            String configFilePath = "config.ini";
    
            // 構成ファイルを読み取ります。
            FileInputStream input = new FileInputStream(configFilePath);
            properties.load(input);
            input.close();
    
            // 構成ファイルから AccessKey ペアを取得します。
            String accessKeyId = properties.getProperty("accessKeyId");
            String accessKeySecret = properties.getProperty("accessKeySecret");
    
            CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
    
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 2: 自動的にローテーションする AccessKey ペアを使用する

アプリケーションが長期間 Tablestore にアクセスする必要がある一方で、ランタイム環境で AccessKey ペアがリスクにさらされている場合は、AccessKey ペアを手動で頻繁にローテーションする必要があります。この場合、クライアントキーを使用して認証情報プロバイダーを初期化できます。この方法の基盤となるロジックは、AccessKey ペアを使用して Tablestore リソースにアクセスすることです。クライアントキーを使用すると、Key Management Service (KMS) は管理対象 RAM ユーザーの AccessKey ペアを定期的にローテーションし、RAM ユーザーの静的 AccessKey ペアを動的に変更します。これにより、AccessKey ペアの漏洩のリスクが軽減されます。KMS は即時ローテーションもサポートしており、漏洩した AccessKey ペアを迅速に置き換えることができます。これにより、AccessKey ペアを手動で管理する必要がなくなり、セキュリティリスクとメンテナンスの複雑さが軽減されます。クライアントキーの取得方法の詳細については、AAP を作成する を参照してください。

  1. 認証情報クライアントの依存関係を追加します。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>alibabacloud-secretsmanager-client</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>4.7.0</version>
    </dependency>
  2. secretsmanager.properties という名前の構成ファイルを作成します。

    # 認証情報タイプを client_key に設定します。
    credentials_type=client_key
    
    # クライアントキーの復号化パスワードを指定します。復号化パスワードは、環境変数または構成ファイルから取得できます。
    client_key_password_from_env_variable=<クライアントキーの秘密キーのパスワードの環境変数名>
    client_key_password_from_file_path=<クライアントキーの秘密キーのパスワードファイルのパス>
    
    # クライアントキーの秘密キーファイルのパスを指定します。
    client_key_private_key_path=<クライアントキーの秘密キーファイルのパス>
    
    # KMS を使用するリージョンの ID を指定します。
    cache_client_region_id=[{"regionId":"<regionId>"}]
  3. 構成ファイルを使用して認証情報を渡します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
    import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;
    import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo;
    import org.codehaus.jettison.json.JSONException;
    import org.codehaus.jettison.json.JSONObject;
    
    public class ClientKeyDemoTest {
    
        public static void main(String[] args) throws CacheSecretException {
            final SecretCacheClient client = SecretCacheClientBuilder.newClient();
            CredentialsProvider credentialsProvider = new CredentialsProvider() {
                @Override
                public void setCredentials(ServiceCredentials credentials) {
                }
    
                @Override
                public ServiceCredentials getCredentials() {
                    try {
                        SecretInfo secretInfo = client.getSecretInfo("<secretName>");
                        JSONObject jsonObject = new JSONObject(secretInfo.getSecretValue());
    
                        String accessKeyId = jsonObject.getString("AccessKeyId");
                        String accessKeySecret = jsonObject.getString("AccessKeySecret");
    
                        return new DefaultCredentials(accessKeyId, accessKeySecret);
                    } catch (CacheSecretException | JSONException e) {
                        return null;
                    }
                }
            };
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 3: STS トークンを使用する

アプリケーションが一時的に Tablestore にアクセスする必要がある場合は、AccessKey ペアと Security Token Service (STS) トークンで構成される一時的なアクセス認証情報を使用して認証情報プロバイダーを初期化できます。この方法では、STS トークンを手動で管理する必要があることに注意してください。これにより、セキュリティリスクが発生し、メンテナンスの複雑さが増します。Tablestore に複数回アクセスする場合は、STS トークンを手動で更新する必要があります。STS トークンの取得方法の詳細については、STS トークンを使用してリクエストを開始する を参照してください。

環境変数

  1. 一時的なアクセス認証情報を使用して環境変数を指定します。

    Mac OS X、Linux、および Unix
    export TABLESTORE_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    export TABLESTORE_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    export TABLESTORE_SESSION_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>
    Windows

    コマンドプロンプトを開き、管理者として次のコマンドを実行します。

    setx TABLESTORE_ACCESS_KEY_ID <ALIBABA_CLOUD_ACCESS_KEY_ID> /m
    setx TABLESTORE_ACCESS_KEY_SECRET <ALIBABA_CLOUD_ACCESS_KEY_SECRET> /m
    setx TABLESTORE_SESSION_TOKEN <ALIBABA_CLOUD_SECURITY_TOKEN> /m
  2. 環境変数を使用して認証情報を渡します。

    説明

    環境変数を指定した後、IDE などの関連サービスまたは開発ツールを再起動して、新しい設定が想定どおりに適用されていることを確認する必要がある場合があります。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProviderFactory;
    import com.alicloud.openservices.tablestore.core.auth.EnvironmentVariableCredentialsProvider;
    
    public class StsDemoTest {
        public static void main(String[] args) throws Exception {
            // 環境変数からアクセス認証情報を取得します。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 後続の操作に credentialsProvider を使用します。
        }
    }

静的認証情報

コードで変数を指定することで、認証情報を参照できます。ランタイム環境では、変数は環境変数、構成ファイル、またはその他の外部データソースからの実際の認証情報値によって渡されます。

次の手順では、構成ファイルを使用して認証情報を渡す方法について説明します。

  1. config.ini という名前の構成ファイルを作成します。

    [credentials]
    accessKeyId = <ALIBABA_CLOUD_ACCESS_KEY_ID>
    accessKeySecret = <ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    securityToken = <ALIBABA_CLOUD_SECURITY_TOKEN>
  2. 構成ファイルを使用して認証情報を渡します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
    import java.io.FileInputStream;
    import java.util.Properties;
    
    public class StsDemoTest {
        public static void main(String[] args) throws Exception {
            Properties properties = new Properties();
            // 構成ファイルのパスを指定します。
            String configFilePath = "config.ini";
    
            // 構成ファイルを読み取ります。
            FileInputStream input = new FileInputStream(configFilePath);
            properties.load(input);
            input.close();
    
            // 構成ファイルから AccessKey ペアと STS トークンを取得します。
            String accessKeyId = properties.getProperty("accessKeyId");
            String accessKeySecret = properties.getProperty("accessKeySecret");
            String securityToken = properties.getProperty("securityToken");
    
            CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret, securityToken);
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 4: AccessKey ペアと RAM ロールを使用する

アプリケーションが Tablestore にアクセスするための承認を受ける必要がある場合 (別の Alibaba Cloud アカウントの Tablestore リソースにアクセスする場合など) は、AccessKey ペアと RAM ロールを使用して認証情報プロバイダーを初期化できます。この方法の基盤となるロジックは、STS トークンを使用してアクセス認証情報を構成することです。Credentials ツールは、指定された RAM ロールの Alibaba Cloud Resource Name (ARN) に基づいて STS トークンを取得し、セッションの期限が切れる前に STS トークンを自動的に更新します。Policy パラメーターを指定して、RAM ロールに付与される権限を制限できます。この方法では AccessKey ペアが必要になることに注意してください。これにより、セキュリティリスクが発生し、メンテナンスの複雑さが増します。AccessKey ペアの取得方法の詳細については、CreateAccessKey を参照してください。RAM ロールの ARN の取得方法の詳細については、CreateRole を参照してください。

  1. credentials の依存関係を追加します。

    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>
  2. AccessKey ペアと RAM ロールの ARN をアクセス認証情報として使用します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
    import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;
    import com.aliyun.credentials.models.CredentialModel;
    
    public class RamRoleArnAkDemoTest {
    
        public static void main(String[] args) {
    
            com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config();
            // 認証情報タイプを ram_role_arn に設定します。
            config.setType("ram_role_arn");
            // 環境変数から RAM ロールの ARN を取得します。
            config.setRoleArn(System.getenv().get("ALIBABACLOUD_STS_ROLE_ARN"));
            // 環境変数から AccessKey ID を取得します。
            config.setAccessKeyId(System.getenv().get("OTS_AK_ENV"));
            // 環境変数から AccessKey シークレットを取得します。
            config.setAccessKeySecret(System.getenv().get("OTS_SK_ENV"));
            // RAM ロールのセッション名を指定します。
            config.setRoleName("roleSessionName");
            // オプション。RAM ロールの制限付き権限を指定します。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}。
            config.setPolicy("<Policy>");
            // オプション。ロールセッションの有効期間を指定します。
            config.setRoleSessionExpiration(3600);
    
            final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config);
    
            CredentialsProvider credentialsProvider = new CredentialsProvider(){
                @Override
                public void setCredentials(ServiceCredentials credentials) {
                }
    
                @Override
                public ServiceCredentials getCredentials() {
                    CredentialModel credential = credentialsClient.getCredential();
                    return  new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken());
                }
            };
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 5: ECS インスタンスの RAM ロールを使用する

アプリケーションが ECS インスタンス、エラスティックコンテナインスタンス、または ACK ワーカーノードで実行されている場合は、ECS インスタンスの RAM ロールを使用して認証情報プロバイダーを初期化することをお勧めします。この方法の基盤となるロジックは、STS トークンを使用してアクセス認証情報を構成することです。ECS インスタンス、エラスティックコンテナインスタンス、または ACK ワーカーノードに RAM ロールをアタッチして、インスタンス上の STS トークンを自動的に更新できます。この方法により、AccessKey ペアまたは STS トークンを手動で管理する場合に発生する可能性のあるリスクがなくなります。RAM ロールの取得方法の詳細については、CreateRole を参照してください。

  1. credentials の依存関係を追加します。

    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>
  2. RAM ロールを使用してアクセス認証情報を提供します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
    import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;
    import com.aliyun.credentials.models.CredentialModel;
    
    public class EcsRamRoleDemoTest {
    
        public static void main(String[] args) {
    
            com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config();
            // 認証情報タイプを ecs_ram_role に設定します。
            config.setType("ecs_ram_role");
            // オプション。ECS インスタンスにアタッチされている RAM ロール名を指定します。このパラメーターを指定しない場合、システムは自動的に RAM ロールを検索します。リクエスト数を減らすために、このパラメーターを指定することをお勧めします。
            config.setRoleName("ECSRAMRole");
            // オプション。ECS インスタンスのメタデータのセキュリティ強化モードを有効にします。システム全体のセキュリティを向上させるために、このパラメーターを指定することをお勧めします。
            config.setEnableIMDSv2(true);
    
            final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config);
    
            CredentialsProvider credentialsProvider = new CredentialsProvider(){
                @Override
                public void setCredentials(ServiceCredentials credentials) {
                }
    
                @Override
                public ServiceCredentials getCredentials() {
                    CredentialModel credential = credentialsClient.getCredential();
                    return  new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken());
                }
            };
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 6: OIDC IdP の RAMロールを使用する

RAM ロールが ACK ワーカーノードで構成された後、ノード上のポッド内のアプリケーションは、ECS インスタンスにデプロイされたアプリケーションと同じ方法で、メタデータサーバーを使用してアタッチされたロールの STS トークンを取得できます。ただし、信頼されていないアプリケーション (顧客が送信したアプリケーションや、コードを利用できないアプリケーションなど) がワーカーノードにデプロイされている場合は、アプリケーションがメタデータサーバーを使用してワーカーノードにアタッチされた RAM ロールの STS トークンを取得することを許可しない場合があります。クラウドリソースのセキュリティを確保し、信頼されていないアプリケーションが必要な STS トークンを安全に取得できるようにし、アプリケーションレベルの権限を最小限に抑えるには、RAM Roles for Service Account (RRSA) 機能を使用できます。この方法の基盤となるロジックは、STS トークンを使用してアクセス認証情報を構成することです。ACK は、異なるアプリケーションポッドに対応する OpenID Connect (OIDC) トークンファイルを作成およびマウントし、関連する構成情報を環境変数に渡します。Credentials ツールは、環境変数から構成情報を取得し、STS の AssumeRoleWithOIDC オペレーションを呼び出して、アタッチされたロールの STS トークンを取得します。この方法により、AccessKey ペアまたは STS トークンを手動で管理する場合に発生する可能性のあるリスクがなくなります。詳細については、RRSA を使用して異なるポッドに異なるクラウドサービスへのアクセスを承認する を参照してください。

  1. credentials の依存関係を追加します。

    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>>
  2. RAM ロールを使用してアクセス認証情報を提供します。

    public class OidcRoleArnDemoTest {
    
        public static void main(String[] args) {
            com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config();
            // 認証情報タイプを oidc_role_arn に設定します。
            config.setType("oidc_role_arn");
            // 環境変数から一時的な AccessKey ID を取得します。
            config.setAccessKeyId(System.getenv().get("OTS_AK_ENV"));
            // 環境変数から一時的な AccessKey シークレットを取得します。
            config.setAccessKeySecret(System.getenv().get("OTS_SK_ENV"));
            // 環境変数から一時的な STS トークンを取得します。
            config.setSecurityToken(System.getenv().get("OTS_SESSION_TOKEN"));
            // 引き受ける RAM ロールの ID である RAM ロールの ARN を指定します。
            config.setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"));
            // OIDC IdP の ARN を指定します。
            config.setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"));
            // OIDC トークンが格納されているファイルのパスを指定します。
            config.setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"));
            // ロールセッション名を指定します。
            config.setRoleSessionName("<RoleSessionName>");
            // オプション。RAM ロールの制限付き権限を指定します。例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}。
            config.setPolicy("<Policy>");
            // オプション。RAM ロールの外部 ID を指定します。
            // 外部 ID は、認証情報プロバイダーによって提供され、プロキシの混同を防ぎます。
            config.setExternalId("<ExternalId>");
            // セッションの有効期間を指定します。
            config.setRoleSessionExpiration(3600);
    
            final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config);
    
            CredentialsProvider credentialsProvider = new CredentialsProvider() {
                @Override
                public void setCredentials(ServiceCredentials credentials) {
                }
    
                @Override
                public ServiceCredentials getCredentials() {
                    CredentialModel credential = credentialsClient.getCredential();
                    return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken());
                }
            };
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 7: Function Compute のコンテキストで Credentials パラメーターを使用する

アプリケーションの関数が Function Compute にデプロイおよび実行されている場合は、Function Compute のコンテキストで Credentials パラメーターを使用して認証情報プロバイダーを初期化できます。この方法の基盤となるロジックは、STS トークンを使用してアクセス認証情報を構成することです。Function Compute は、関数に構成されているロールに基づいてサービスロールを引き受けることで STS トークンを取得します。次に、STS トークンは、Function Compute のコンテキストで Credentials パラメーターを使用してアプリケーションに渡されます。STS トークンは 36 時間有効です。有効期間を変更することはできません。関数の最大実行時間は 24 時間です。そのため、関数が実行されているときに STS トークンの期限が切れないため、STS トークンを更新する必要はありません。この方法により、AccessKey ペアまたは STS トークンを手動で管理する場合に発生する可能性のあるリスクがなくなります。Function Compute に Tablestore へのアクセス許可を付与する方法の詳細については、Function Compute に他のクラウドサービスへのアクセス許可を付与する を参照してください。

  1. Function Compute コンテキストの依存関係を追加します。

    <!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core -->
    <dependency>
        <groupId>com.aliyun.fc.runtime</groupId>
        <artifactId>fc-java-core</artifactId>
        <version>1.4.1</version>
    </dependency>
  2. Function Compute コンテキストの Credentials パラメーターを使用して認証情報プロバイダーを初期化します。

    package example;
    
    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
    import com.aliyun.fc.runtime.Context;
    import com.aliyun.fc.runtime.Credentials;
    import com.aliyun.fc.runtime.StreamRequestHandler;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class App implements StreamRequestHandler {
    
        @Override
        public void handleRequest(
                InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
    
            // キー情報を取得します。関数を実行する前に、関数が属するサービスにロールが構成されており、そのロールに Tablestore にアクセスするための権限が付与されていることを確認してください。AliyunFCDefaultRole ロールを使用することをお勧めします。
            Credentials creds = context.getExecutionCredentials();
    
            // 取得した認証情報を使用して、認証情報プロバイダーインスタンスを作成します。
            CredentialsProvider credentialsProvider = new DefaultCredentialProvider(creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());
    
            // 後続の操作に credentialsProvider を使用します。
    
            outputStream.write(new String("done").getBytes());
        }
    }

方法 8: 認証情報 URI を使用する

アプリケーションが外部システムから Alibaba Cloud 認証情報を取得して柔軟な認証情報管理とキーレスアクセスを実装する必要がある場合は、認証情報 URI を使用して認証情報プロバイダーを初期化できます。この方法の基盤となるロジックは、STS トークンを使用してアクセス認証情報を構成することです。Credentials ツールは、認証情報クライアントを初期化するために指定した URI を使用して STS トークンを取得します。この方法により、AccessKey ペアまたは STS トークンを手動で管理する場合に発生する可能性のあるリスクがなくなります。認証情報 URI レスポンスを提供するバックエンドサービスは、アプリケーションが常に有効な認証情報を取得できるように STS トークンを自動的に更新する必要があることに注意してください。

  1. Credentials ツールが STS トークンを正しく解析して使用できるようにするには、URI が次のレスポンスプロトコルに準拠している必要があります。

    • レスポンスステータスコード: 200

    • レスポンスボディ構造:

      {
          "Code": "Success",
          "AccessKeySecret": "AccessKeySecret",
          "AccessKeyId": "AccessKeyId",
          "Expiration": "2021-09-26T03:46:38Z",
          "SecurityToken": "SecurityToken"
      }
  2. credentials の依存関係を追加します。

    <!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>credentials-java</artifactId>
        <version>0.3.4</version>
    </dependency>
  3. アクセス認証情報として認証情報 URI を構成します。

    import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
    import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
    import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;
    import com.aliyun.credentials.models.CredentialModel;
    
    public class CredentialsUriDemoTest {
        public static void main(String[] args) {
    
            com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config();
            // 認証情報タイプを credentials_uri に設定します。
            config.setType("credentials_uri");
            // http://local_or_remote_uri/ 形式で認証情報を取得する URI を指定します。
            config.setCredentialsUri("<local_or_remote_uri>");
    
            final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config);
    
            CredentialsProvider credentialsProvider = new CredentialsProvider() {
                @Override
                public void setCredentials(ServiceCredentials credentials) {
                }
    
                @Override
                public ServiceCredentials getCredentials() {
                    CredentialModel credential = credentialsClient.getCredential();
                    return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken());
                }
            };
            // 後続の操作に credentialsProvider を使用します。
        }
    }

方法 9: カスタムアクセス認証情報を使用する

上記のいずれの方法も要件を満たしていない場合は、CredentialsProvider オペレーションを呼び出すことで、カスタムメソッドを指定してアクセス認証情報を取得できます。基盤となるロジックが STS トークンである場合は、認証情報の更新サポートを提供する必要があることに注意してください。

import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;

public class CustomCredentialProviderDemoTest {

    public static void main(String[] args) {

        CredentialsProvider credentialsProvider = new CredentialsProvider(){

            // 変数を初期化します。
            String accessKeyId = null;
            // 変数を初期化します。
            String accessKeySecrect = null;
            // 変数を初期化します。
            // String token = null;

            @Override
            public void setCredentials(ServiceCredentials credentials) {
            }

            @Override
            public ServiceCredentials getCredentials() {
                //TODO
                // アクセス認証情報を取得するカスタムメソッドを指定します。

                // AccessKey ID と AccessKey シークレットで構成される長期アクセス認証情報を返します。
                return new DefaultCredentials(accessKeyId, accessKeySecrect);

                // AccessKey ID、AccessKey シークレット、および STS トークンで構成される一時的なアクセス認証情報を返します。
                // 有効期限に基づいて一時的なアクセス認証情報を更新します。
                // return new DefaultCredentials(accessKeyId, accessKeySecrect, token);
            }
        };
        // 後続の操作に credentialsProvider を使用します。
    }
}

次のステップ

認証情報プロバイダーを初期化した後、認証情報プロバイダーを使用して OTSClient インスタンスを作成する必要があります。詳細については、OTSClient インスタンスを初期化する を参照してください。