認証情報のセキュリティ、有効性、ローテーションに関する要件は、デプロイメント環境によって異なります。ユースケースに基づいて認証情報の設定方法を選択し、セキュリティとメンテナンスコストのバランスを取ってください。
認証情報タイプの選択
Tablestore は、アクセスキーペアや STS トークンなど、複数の認証情報タイプをサポートしています。各方法は、特定のデプロイシナリオと SDK の可用性に対応しています。
|
認証情報の方法 |
ユースケース |
事前設定されたアクセスキーペアまたは STS トークンの要否 |
基盤となる認証情報 |
有効期間 |
ローテーションまたは更新方法 |
対応 SDK |
|
安全で安定した環境で実行され、外部攻撃のリスクが低く、クラウドサービスへの長期アクセスのために頻繁な認証情報のローテーションを必要としないアプリケーション。 |
はい |
アクセスキーペア |
長期 |
手動ローテーション |
Java, Go, Python, Node.js, .NET, PHP |
|
|
信頼できない環境で実行し、アクセスの有効期間と権限の制御が必要なアプリケーション。 |
はい |
STS トークン |
一時的 |
手動更新 |
Java, Go, Python, Node.js, PHP |
|
|
クラウドサービスにアクセスするためにクロスアカウント認可が必要なアプリケーション。 |
はい |
STS トークン |
一時的 |
自動更新 |
Java |
|
|
Elastic Compute Service (ECS) インスタンス、Elastic Container Instance (ECI) インスタンス、または Container Service for Kubernetes (ACK) ワーカーノードで実行されるアプリケーション。 |
いいえ |
STS トークン |
一時的 |
自動更新 |
Java |
|
|
ACK ワーカーノードで実行される信頼できないアプリケーション。 |
いいえ |
STS トークン |
一時的 |
自動更新 |
Java |
|
|
Function Compute で実行されるアプリケーション。 |
いいえ |
STS トークン |
一時的 |
更新不要 |
Java, Python |
|
|
外部システムから認証情報を取得する必要があるアプリケーション。 |
いいえ |
STS トークン |
一時的 |
自動更新 |
Java |
|
|
アクセスキーペアの漏洩リスクがある環境で実行し、クラウドサービスへの長期アクセスのために頻繁な認証情報のローテーションが必要なアプリケーション。 |
いいえ |
アクセスキーペア |
長期 |
自動ローテーション |
Java |
|
|
前述のいずれの方法も要件を満たさない場合のカスタム認証情報の取得。 |
カスタム |
カスタム |
カスタム |
カスタム |
Java |
|
|
アクセスキーペアの管理を必要としない、Knowledge Store および Memory Store との AI アプリケーション統合。 |
いいえ |
API キー |
設定可能 |
手動での失効と再作成 |
Python, TypeScript |
認証情報の設定
認証情報タイプを選択した後、対応するセクションでステップバイステップの手順とコード例を参照してください。
RAM ユーザーの AccessKey ペアの使用
RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey シークレット) を使用して認証情報を設定します。この方法では、AccessKey ペアの手動メンテナンスが必要であり、セキュリティリスクが高くなります。
Alibaba Cloud アカウントは、すべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、アカウント内のすべてのリソースがリスクにさらされます。必要最小限の権限を持つ RAM ユーザーの AccessKey ペアを使用してください。RAM ユーザーの AccessKey ペアを取得するには、RAM ユーザーの AccessKey ペアで Tablestore にアクセスするをご参照ください。
環境変数または静的な認証情報を使用して AccessKey ペアを設定します。
環境変数
-
環境変数を設定します。設定後、更新された環境変数を読み込むために、IDE、CLI、デスクトップアプリケーション、およびバックグラウンドサービスを再起動してください。
Linux
-
~/.bashrcファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
変更を適用します。
source ~/.bashrc -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
-
デフォルトのシェルタイプを確認します。
echo $SHELL -
デフォルトのシェルタイプに応じて処理を進めます。
Zsh
-
~/.zshrcファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
変更を適用します。
source ~/.zshrc -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
-
~/.bash_profileファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
変更を適用します。
source ~/.bash_profile -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
-
Windows
CMD
-
CMD で環境変数を設定します。
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
CMD を再起動し、次のコマンドを実行して環境変数が設定されていることを確認してください。
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
-
PowerShell で環境変数を設定します。
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) -
環境変数を確認します。
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
-
-
環境変数を使用して認証情報を取得します。
Java
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:環境変数から accessKeyId と accessKeySecret を取得します final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID"); final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET"); // accessKeyId と accessKeySecret を使用して後続の操作を実行します } } }Python
# -*- coding: utf-8 -*- import os access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID") access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")Go
accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID") accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")Node.js
var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID; var secretAccessKey = process.env.TABLESTORE_ACCESS_KEY_SECRET;PHP
$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID'); $accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET');.NET
// 環境変数からアクセス認証情報を取得します。 var AccessKeyId = Environment.GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID"); var AccessKeySecret = Environment.GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET");
静的な認証情報
コード内の変数から認証情報を参照します。これらの変数には、実行時に環境変数、設定ファイル、またはその他の外部データソースから実際の認証情報の値が格納されます。
次の例では、設定ファイルから静的な認証情報を使用します。
-
設定ファイル
config.iniを作成します。TABLESTORE_ACCESS_KEY_ID = your_access_key_id TABLESTORE_ACCESS_KEY_SECRET = your_access_key_secret -
設定ファイルから認証情報を取得します。
Java
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(); // config.ini ファイルのパスを設定します。実際のパスを使用してください。 String configFilePath = "config.ini"; // 設定ファイルを読み込みます FileInputStream input = new FileInputStream(configFilePath); properties.load(input); input.close(); // 設定ファイルから AccessKey ID と AccessKey シークレットを取得します String accessKeyId = properties.getProperty("TABLESTORE_ACCESS_KEY_ID"); String accessKeySecret = properties.getProperty("TABLESTORE_ACCESS_KEY_SECRET"); CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); // credentialsProvider を使用して後続の操作を実行します } }Python
# -*- coding: utf-8 -*- # 設定ファイルを読み込みます config = {} # config.ini がスクリプトと同じディレクトリにあると仮定します。実際のパスを使用してください。 with open('config.ini', 'r') as f: for line in f: line = line.strip() if line and not line.startswith('#') and '=' in line: key, value = line.split('=', 1) config[key.strip()] = value.strip() # 設定ファイルから AccessKey ID と AccessKey シークレットを取得します access_key_id = config.get('TABLESTORE_ACCESS_KEY_ID') access_key_secret = config.get('TABLESTORE_ACCESS_KEY_SECRET')Go
// 設定ファイルを読み込みます。実際のパスを使用してください。 config, err := ini.Load("config.ini") if err != nil { fmt.Println("設定ファイルの読み込みに失敗しました:", err) } // 設定ファイルから AccessKey ID と AccessKey シークレットを取得します access_key_id := config.Section("").Key("TABLESTORE_ACCESS_KEY_ID").String() access_key_secret := config.Section("").Key("TABLESTORE_ACCESS_KEY_SECRET").String()PHP
try { // 設定ファイルを読み込みます。config.ini がスクリプトと同じディレクトリにあると仮定します。実際のパスを使用してください。 $config = parse_ini_file('config.ini'); // AccessKey ID と AccessKey シークレットを取得します $accessKeyId = $config['TABLESTORE_ACCESS_KEY_ID']; $accessKeySecret = $config['TABLESTORE_ACCESS_KEY_SECRET']; }catch (Exception $e) { printf($e->getMessage() . "\n"); return; }
STS 一時的な認証情報の使用
Security Token Service (STS) から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を使用して認証情報を設定します。この方法では、STS トークンの手動メンテナンスが必要で、セキュリティリスクが高くなります。一時的な認証情報を使用して Tablestore に複数回アクセスするには、STS トークンを手動で更新する必要があります。STS 一時的な認証情報を取得するには、「STS 一時的な認証情報を使用して Tablestore にアクセスする」をご参照ください。
環境変数または静的な認証情報を使用して STS 一時的な認証情報を設定します。
環境変数
-
環境変数を設定します。設定後、更新された環境変数を読み込むために、IDE、CLI、デスクトップアプリケーション、およびバックグラウンドサービスを再起動してください。
Linux
-
~/.bashrcファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bashrc echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bashrc -
変更を適用します。
source ~/.bashrc -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
macOS
-
デフォルトのシェルタイプを確認します。
echo $SHELL -
デフォルトのシェルタイプに応じて処理を進めます。
Zsh
-
~/.zshrcファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.zshrc echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.zshrc -
変更を適用します。
source ~/.zshrc -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
Bash
-
~/.bash_profileファイルに環境変数を追加します。echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bash_profile echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bash_profile -
変更を適用します。
source ~/.bash_profile -
環境変数を確認します。
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
-
Windows
CMD
-
CMD で環境変数を設定します。
setx TABLESTORE_ACCESS_KEY_ID "YOUR_STS_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_STS_ACCESS_KEY_SECRET" setx TABLESTORE_SESSION_TOKEN "YOUR_STS_TOKEN" -
CMD を再起動し、次のコマンドを実行して環境変数が設定されていることを確認します。
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET% echo %TABLESTORE_SESSION_TOKEN%
PowerShell
-
PowerShell で環境変数を設定します。
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_STS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_STS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", "YOUR_STS_TOKEN", [EnvironmentVariableTarget]::User) -
環境変数を確認します。
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", [EnvironmentVariableTarget]::User)
-
-
環境変数を使用して認証情報を渡します。
Java
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: 環境変数から accessKeyId、accessKeySecret、および securityToken を取得 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"); // accessKeyId、accessKeySecret、および securityToken を使用して後続の操作を実行... } } }Python
# -*- coding: utf-8 -*- import os access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID") access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET") sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")Go
accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID") accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET") securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")Node.js
var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID; var secretAccessKey = process.env.TABLESTORE_ACCESS_KEY_SECRET; var stsToken = process.env.TABLESTORE_SESSION_TOKEN;PHP
$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID'); $accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET'); $securityToken = getenv('TABLESTORE_SESSION_TOKEN');
静的な認証情報
コード内の変数から認証情報を参照します。これらの変数には、実行時に環境変数、設定ファイル、またはその他の外部データソースから実際の認証情報の値が格納されます。
次の例では、設定ファイルから静的な認証情報を使用します。
-
config.iniという名前の設定ファイルを作成します。[configName] TABLESTORE_ACCESS_KEY_ID = your_sts_access_key_id TABLESTORE_ACCESS_KEY_SECRET = your_sts_access_key_secret TABLESTORE_SESSION_TOKEN = your_sts_token -
設定ファイルから認証情報を渡します。
Java
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(); // config.ini ファイルのパスを設定します。実際のパスに置き換えてください。 String configFilePath = "config.ini"; // 設定ファイルを読み込みます。 FileInputStream input = new FileInputStream(configFilePath); properties.load(input); input.close(); // 設定ファイルから AccessKey ID、AccessKey Secret、およびセキュリティトークンを取得します。 String accessKeyId = properties.getProperty("TABLESTORE_ACCESS_KEY_ID"); String accessKeySecret = properties.getProperty("TABLESTORE_ACCESS_KEY_SECRET"); String securityToken = properties.getProperty("TABLESTORE_SESSION_TOKEN"); CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret, securityToken); // credentialsProvider を使用して後続の操作を実行... } }Python
# -*- coding: utf-8 -*- import configparser # 設定ファイルを読み込みます config = configparser.ConfigParser() # config.ini がスクリプトと同じディレクトリにあると仮定します。実際のパスを使用してください。 config.read('config.ini') # 設定ファイルから AccessKey ID、AccessKey Secret、およびセキュリティトークンを取得します access_key_id = config.get('configName', 'TABLESTORE_ACCESS_KEY_ID') access_key_secret = config.get('configName', 'TABLESTORE_ACCESS_KEY_SECRET') security_token = config.get('configName', 'TABLESTORE_SESSION_TOKEN')Go
// 設定ファイルを読み込みます。実際のパスを使用してください。 config, err := ini.Load("config.ini") if err != nil { fmt.Println("設定ファイルの読み込みに失敗しました:", err) } // 設定ファイルから AccessKey ID、AccessKey Secret、およびセキュリティトークンを取得します access_key_id := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_ID").String() access_key_secret := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_SECRET").String() security_token := config.Section("configName").Key("TABLESTORE_SESSION_TOKEN").String()PHP
try { // 設定ファイルを読み込みます。config.ini がスクリプトと同じディレクトリにあると仮定します。実際のパスを使用してください。 $config = parse_ini_file('config.ini'); // AccessKey ID、AccessKey Secret、およびセキュリティトークンを取得します $accessKeyId = $config['TABLESTORE_ACCESS_KEY_ID']; $accessKeySecret = $config['TABLESTORE_ACCESS_KEY_SECRET']; $securityToken = $config['TABLESTORE_SESSION_TOKEN']; }catch (Exception $e) { printf($e->getMessage() . "\n"); return; }
RAMRoleARN の使用
RAMRoleARN を使用して認証情報を設定します。この方法では、基盤となる認証情報として STS トークンを使用します。RAM ロールの Alibaba Cloud リソースネーム (ARN) を指定すると、Credentials ツールが STS から STS トークンをリクエストし、セッションの有効期限が切れる前に自動的にトークンを更新します。また、policy に値を割り当てることで、RAM ロールをより限定的な権限セットに制限することもできます。この方法では AccessKey ペアが必要となるため、セキュリティリスクとメンテナンス作業が増加します。AccessKey ペアを取得するには、AccessKey の作成をご参照ください。RAMRoleARN を取得するには、RAM ロールの作成をご参照ください。
-
認証情報の依存関係を追加します。
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency> -
AccessKey ペアと RAMRoleARN をアクセス認証情報として設定します。
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。例: acs:ram::123456789012****:role/adminrole。 ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して RoleArn を設定することもできます。 config.setRoleArn("<RoleArn>"); // 環境変数から AccessKey ID を取得します。 config.setAccessKeyId(System.getenv().get("TABLESTORE_ACCESS_KEY_ID")); // 環境変数から AccessKey Secret を取得します。 config.setAccessKeySecret(System.getenv().get("TABLESTORE_ACCESS_KEY_SECRET")); // RAM ロールのセッション名を指定します。 config.setRoleSessionName("roleSessionName"); // より少ない権限を持つポリシーを指定します。オプション。例: {"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 を使用して後続の操作を実行... } }
ECSRAMRole の使用
ECSRAMRole を使用して認証情報を設定します。この方法では、基盤となる認証情報として STS トークンを使用します。ECSRAMRole を使用すると、ECS インスタンス、ECI インスタンス、または ACK ワーカーノードにロールをアタッチできます。STS トークンはインスタンス内で自動的に更新されます。この方法では AccessKey ペアや STS トークンが不要なため、手動で認証情報をメンテナンスするリスクがなくなります。ECSRAMRole を取得するには、RAM ロールの作成をご参照ください。
-
認証情報の依存関係を追加します。
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency> -
ECSRAMRole をアクセス認証情報として設定します。
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 ロールの名前。オプション。このパラメーターを指定しない場合、ロール名は自動的に取得されます。リクエスト数を減らすために、このパラメーターを指定することを推奨します。 config.setRoleName("ECSRAMRole"); // ECS インスタンスメタデータサービス (IMDSv2) の強化モードを有効にします。オプション。システム全体のセキュリティを向上させるために、このパラメーターを有効にすることを推奨します。 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 を使用して後続の操作を実行します... } }
OIDCRoleARN の使用
ACK ワーカーノードに RAM ロールを設定すると、そのノード上の Pod 内のアプリケーションは、ECS インスタンスにデプロイされたアプリケーションと同様に、メタデータサーバーから関連付けられたロールの STS トークンを取得できます。ただし、顧客が送信したコードなど、信頼できないアプリケーションがクラスター上で実行されている場合は、メタデータサーバーから STS トークンを取得しないでください。
サービスアカウント用の RAM ロール (RRSA) は、アプリケーションレベルの権限分離を提供します。RRSA を使用すると、信頼できないアプリケーションが、他のクラウドリソースを公開することなく、必要な認証情報を安全に取得できます。この方法では、基盤となる認証情報として STS トークンを使用します。ACK クラスターは、異なるアプリケーション Pod 用に OIDC トークンファイルを作成してマウントし、関連する設定情報を環境変数に設定します。Credentials ツールは、環境変数から設定情報を読み取り、STS の AssumeRoleWithOIDC API を呼び出して、バインドされたロールの STS トークンを取得します。この方法では、AccessKey ペアや既存の STS トークンを事前に用意する必要がないため、手動での認証情報のメンテナンスのリスクがなくなります。詳細については、RRSA を使用した Pod レベルのアクセス制御をご参照ください。
-
認証情報の依存関係を追加します。
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency> -
OIDC 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 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"); // RAM ロールの ARN。環境変数 ALIBABA_CLOUD_ROLE_ARN でも設定できます。 config.setRoleArn("<RoleArn>"); // OIDC プロバイダーの ARN。環境変数 ALIBABA_CLOUD_OIDC_PROVIDER_ARN でも設定できます。 config.setOidcProviderArn("<OidcProviderArn>"); // OIDC トークンファイルのパス。環境変数 ALIBABA_CLOUD_OIDC_TOKEN_FILE でも設定できます。 config.setOidcTokenFilePath("<OidcTokenFilePath>"); // ロールセッション名。環境変数 ALIBABA_CLOUD_ROLE_SESSION_NAME でも設定できます。 config.setRoleSessionName("<RoleSessionName>"); // より権限の少ないポリシーを指定します。オプション。例: {"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 を使用して後続の操作を実行... } }
Function Compute のコンテキストからの認証情報の使用
Function Compute のコンテキストから認証情報を設定します。この方法では、基盤となる認証情報として STS トークンを使用します。Function Compute は、関数に設定されたサービスロールを引き受けて STS トークンを取得し、そのトークンを Credentials コンテキストパラメーターを介して関数コードに渡します。トークンは 36 時間有効で、変更することはできません。関数の最大実行時間は 24 時間であるため、実行中にトークンが失効することはなく、更新する必要もありません。この方法では AccessKey ペアや STS トークンが不要なため、手動による認証情報メンテナンスのリスクが排除されます。Function Compute に Tablestore へのアクセス権限を付与するには、「関数ロールを使用して他のクラウドサービスにアクセスする」をご参照ください。
Java
-
pom.xml ファイルに以下の依存関係を追加します。
<!-- 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> <!-- https://mvnrepository.com/artifact/com.aliyun.openservices/tablestore --> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore</artifactId> <version>5.13.0</version> </dependency> -
Function Compute のコンテキストからの認証情報を使用して、認証情報プロバイダーを初期化します。
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()); } }
Python
Function Compute のコンテキストから一時的なアクセス認証情報を取得します。
# -*- coding: utf-8 -*-
def handler(event, context):
# 認証情報を取得します。コードを実行する前に、関数に関連付けられたサービスに
# Tablestore の権限を持つロールが設定されていることを確認してください。AliyunFCDefaultRole ロールを使用することを推奨します。
creds = context.credentials
access_key_id = creds.access_key_id
access_key_secret = creds.access_key_secret
security_token = creds.security_token
# 後続の操作
return 'success'
CredentialsURI の使用
CredentialsURI を使用して認証情報を設定します。このメソッドは、基盤となる認証情報として STS トークンを使用します。認証情報ツールは、指定した URI から STS トークンを取得し、認証情報クライアントを初期化します。このメソッドでは、AccessKey ペアや STS トークンを直接扱う必要がないため、認証情報の手動メンテナンスに伴うリスクがなくなります。CredentialsURI に応答するバックエンドサービスは、アプリケーションが常に有効な認証情報を取得できるように、STS トークンの自動更新ロジックを実装する必要があります。
-
認証情報ツールが STS トークンを解析して使用できるように、URI は次のレスポンスプロトコルに準拠する必要があります:
レスポンスステータスコード: 200
-
レスポンスボディの構造:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
-
認証情報の依存関係を追加します。
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency> -
CredentialsURI をアクセス認証情報として設定します。
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"); // 認証情報を取得するための URI。フォーマット: http://local_or_remote_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 を使用します。 } }
自動ローテーションされる AccessKey ペアの使用
ClientKey を使用して認証情報を設定します。ClientKey を使用すると、Key Management Service (KMS) は、管理対象の RAM ユーザーの AccessKey ペアを定期的に自動でローテーションし、静的な AccessKey ペアを動的なものに変換して、漏洩のリスクを低減します。KMS は即時ローテーションもサポートしており、AccessKey ペアが漏洩した場合に迅速に置き換えることができます。この方法では、手動での AccessKey ペアのメンテナンスが不要となり、セキュリティリスクとメンテナンスの手間が軽減されます。
-
シークレットクライアントの依存関係を追加します。
<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> -
secretsmanager.propertiesという名前の設定ファイルを作成します。# 認証情報タイプ。値を client_key に設定します。 credentials_type=client_key # ClientKey の復号パスワード。パスワードは環境変数またはファイルから読み取ることができます。次の設定のいずれか 1 つを設定します。 client_key_password_from_env_variable=<your client key private key password environment variable name> client_key_password_from_file_path=<your client key private key password file path> # ClientKey の秘密鍵ファイルのパス client_key_private_key_path=<your client key private key file path> # 関連付けられた KMS サービスのリージョン ID cache_client_region_id=[{"regionId":"<regionId>"}] -
設定ファイルから認証情報を渡します。
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 を使用します。 } }
カスタム認証情報の使用
前述の認証情報設定方法のいずれも要件を満たさない場合は、認証情報プロバイダーインターフェイスを実装して、認証情報の提供方法をカスタマイズします。基盤となる実装で 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 accessKeySecret = null;
// 変数を初期化します。
// String token = null;
@Override
public void setCredentials(ServiceCredentials credentials) {
}
@Override
public ServiceCredentials getCredentials() {
//TODO
// 認証情報を取得するためのカスタムロジックを実装します。
// 長期的な認証情報 (アクセスキー ID とシークレットアクセスキー) を返します。
return new DefaultCredentials(accessKeyId, accessKeySecret);
// 一時的な認証情報 (アクセスキー ID、シークレットアクセスキー、トークン) を返します。
// 一時的な認証情報の場合、有効期限に基づいて認証情報を更新します。
// return new DefaultCredentials(accessKeyId, accessKeySecret, token);
}
};
// 後続の操作で credentialsProvider を使用...
}
}