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

Tablestore:アクセス資格情報の構成

最終更新日:Mar 18, 2025

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: OpenID Connect ( 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 ペアを使用して Tablestore にアクセスする」をご参照ください。

警告

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

環境変数

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

    Mac OS X/Linux/Unix
    # AccessKey ID を指定します。
    export TABLESTORE_ACCESS_KEY_ID=your_access_key_id
    # AccessKey シークレットを指定します。
    export TABLESTORE_ACCESS_KEY_SECRET=your_access_key_secret
    Windows

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

    # AccessKey ID を指定します。
    setx TABLESTORE_ACCESS_KEY_ID your_access_key_id /m
    # AccessKey シークレットを指定します。
    setx TABLESTORE_ACCESS_KEY_SECRET your_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 {
            {
                // 例 1: 環境変数からアクセス資格情報を取得します。
                EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
                // 後続の操作を実行するために credentialsProvider を使用します。
            }
            {
                // 例 2: 環境変数から AccessKey ID と AccessKey シークレットを取得します。
                final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
                final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
                // 後続の操作を実行するために AccessKey ID と AccessKey シークレットを使用します。
            }
        }
    }

静的資格情報

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

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

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

    [credentials]
    accessKeyId = your_access_key_id
    accessKeySecret = your_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 ペアと STS トークンで構成され、資格情報プロバイダーを初期化するために使用されます。この方法では、STS トークンを手動で管理する必要があることに注意してください。これはセキュリティリスクをもたらし、メンテナンスの複雑さを増大させます。Tablestore に複数回アクセスする場合は、STS トークンを手動で更新する必要があります。STS トークンの取得方法については、「STS から取得した一時的なアクセス資格情報を使用して Tablestore にアクセスする」をご参照ください。

環境変数

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

    Mac OS X/Linux/Unix
    # STS から取得した一時的な AccessKey ID を指定します。
    export TABLESTORE_ACCESS_KEY_ID=your_sts_access_key_id
    # STS から取得した一時的な AccessKey シークレットを指定します。
    export TABLESTORE_ACCESS_KEY_SECRET=your_sts_access_key_secret
    # STS トークンを指定します。
    export TABLESTORE_SESSION_TOKEN=your_sts_token
    Windows

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

    # STS から取得した一時的な AccessKey ID を指定します。
    setx TABLESTORE_ACCESS_KEY_ID your_sts_access_key_id /m
    # STS から取得した一時的な AccessKey シークレットを指定します。
    setx TABLESTORE_ACCESS_KEY_SECRET your_sts_access_key_secret /m
    # STS トークンを指定します。
    setx TABLESTORE_SESSION_TOKEN your_sts_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 {
            {
                // 例 1: 環境変数からアクセス資格情報を取得します。
                EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
                // 後続の操作を実行するために credentialsProvider を使用します。
            }
            {
                // 例 2: 環境変数から一時的な AccessKey ID、一時的な AccessKey シークレット、および STS トークンを取得します。
                final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
                final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
                final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
                // 後続の操作を実行するために、一時的な AccessKey ID、一時的な AccessKey シークレット、および STS トークンを使用します。
            }
        }
    }

静的資格情報

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

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

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

    [credentials]
    accessKeyId = your_sts_access_key_id
    accessKeySecret = your_sts_access_key_secret
    securityToken = your_sts_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/comaliyun/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 ユーザーがアシュームする RAM ロールの ARN を指定します。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して RAM ロールの ARN を指定できます。例: acs:ram::123456789012****:role/adminrole。
            config.setRoleArn("<RoleArn>");
            // 環境変数から AccessKey ID を取得します。
            config.setAccessKeyId(System.getenv().get("TABLESTORE_ACCESS_KEY_ID"));
            // 環境変数から AccessKey シークレットを取得します。
            config.setAccessKeySecret(System.getenv().get("TABLESTORE_ACCESS_KEY_SECRET"));
            // 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 トークンを使用してアクセス資格情報を構成することです。RAM ロールを ECS インスタンス、エラスティックコンテナインスタンス、または ACK ワーカーノードにアタッチして、インスタンス上の STS トークンを自動的に更新できます。この方法では、AccessKey ペアまたは STS トークンは必要ありません。そのため、これらの資格情報の手動管理に伴うリスクがなくなります。CreateRole オペレーションを呼び出すことで、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. 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 ロールを使用する

ACK ワーカーノードで RAM ロールが構成された後、ノード上のポッド内のアプリケーションは、ECS インスタンスにデプロイされたアプリケーションが STS トークンを取得するのと同じ方法で、メタデータサーバーを使用してアタッチされたロールの STS トークンを取得できます。ただし、信頼されていないアプリケーション (顧客が送信したアプリケーションや、コードを利用できないアプリケーションなど) がワーカーノードにデプロイされている場合は、アプリケーションがメタデータサーバーを使用してワーカーノードにアタッチされている RAM ロールの STS トークンを取得することを許可しない場合があります。クラウドリソースのセキュリティを確保し、信頼されていないアプリケーションが必要な STS トークンを安全に取得できるようにし、アプリケーションレベルの権限を最小限に抑えるには、RAM Roles for Service Account ( RRSA ) 機能を使用できます。この方法の基盤となるロジックは、STS トークンを使用してアクセス資格情報を構成することです。ACK は、さまざまなアプリケーションポッドに対応する 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. OIDC IdP の 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");
            // ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して RAM ロールの ARN を指定します。
            config.setRoleArn("<RoleArn>");
            // OIDC IdP の ARN を指定します。ARN は ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数から取得できます。
            config.setOidcProviderArn("<OidcProviderArn>");
            // OIDC トークンファイルのパスを指定します。OIDC トークンファイルは ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数から取得できます。
            config.setOidcTokenFilePath("<OidcTokenFilePath>");
            // ロールセッション名を指定します。ロールセッション名は ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数から取得できます。
            config.setRoleSessionName("<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 を使用します。
        }
    }

方法 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 に他の Alibaba Cloud サービスにアクセスするための権限を付与する」をご参照ください。

  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 インスタンスを作成する必要があります。詳細については、「Tablestore クライアントを初期化する」をご参照ください。