このトピックでは、安全かつ効率的に SDK を使用して開発できるように、アクセス認証情報を構成する方法について説明します。
AccessKey ペアを使用する
Alibaba Cloud アカウントの AccessKey ペアは、アカウント内のすべてのリソースへのフルアクセス権限を持っています。 AccessKey ペアの漏洩は、Alibaba Cloud アカウント内のリソースにとって重大な脅威となります。 Resource Access Management (RAM)ユーザーの AccessKey ペアを使用し、AccessKey ペアを定期的にローテーションすることをお勧めします。 RAM ユーザーの AccessKey ペアを作成する方法については、AccessKey ペアの作成 を参照してください。
次のサンプルコードは、認証に AccessKey ペアを使用する default という名前のデフォルトクライアントを作成する方法を示しています。
<?php
use AlibabaCloud\Client\AlibabaCloud;
// AccessKey を使用してデフォルトクライアントを作成します。
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->asDefaultClient();
// AccessKey を使用して "default" という名前のクライアントを作成します。
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))->name('default');STS トークンを使用する
ビジネスのセキュリティを確保するために、Security Token Service (STS)から Temporary Security Credentials (TSC)を申請して、一時的なクライアントを作成できます。
<?php
use AlibabaCloud\Client\AlibabaCloud;
// STS トークンを使用して "sts" という名前のクライアントを作成します。
AlibabaCloud::stsClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), getenv('ALIBABA_CLOUD_SECURITY_TOKEN'))->name('sts');RAM ロールを使用する
クライアントに RAM ロール の Alibaba Cloud Resource Name (ARN)を指定できます。 これにより、クライアントは API リクエストを開始する前に、STS トークンを自動的に申請および維持できます。 このようにして、クライアントは有効期限のある STS クライアントになります。 また、STS トークンを手動で申請して、STS クライアント を作成することもできます。
次のサンプルコードは、認証に RAM ロールを使用する ramRoleArnClient という名前のクライアントを作成する方法を示しています。
<?php
use AlibabaCloud\Client\AlibabaCloud;
// RAM ロールを使用して "ramRoleArnClient" という名前のクライアントを作成します。
AlibabaCloud::ramRoleArnClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), 'roleArn', 'roleSessionName')
->name('ramRoleArnClient');ECS インスタンスの RAM ロールを使用する
クライアントは、Elastic Compute Service (ECS)のメタデータサーバーを使用して、ECS インスタンスにアタッチされている RAM ロールを使用して STS トークンを取得できます。 次に、STS トークンを使用してクライアントを初期化します。
次のサンプルコードは、認証に ECS インスタンスにアタッチされている RAM ロールを使用する ecsRamRoleClient という名前のクライアントを作成する方法を示しています。
<?php
use AlibabaCloud\Client\AlibabaCloud;
// ECS RAM ロールを使用して "ecsRamRoleClient" という名前のクライアントを作成します。
AlibabaCloud::ecsRamRoleClient('roleName')->name('ecsRamRoleClient');ベアラトークンを使用する
Cloud Call Center (CCC)のみ、ベアラトークンを使用してクライアントを初期化できます。 ベアラトークンは手動で申請および維持できます。
次のサンプルコードは、ベアラトークンを使用して bearerTokenClient という名前のクライアントを作成する方法を示しています。
<?php
use AlibabaCloud\Client\AlibabaCloud;
// ベアラトークンを使用して "bearerTokenClient" という名前のクライアントを作成します。
AlibabaCloud::bearerTokenClient('bearerToken')->name('bearerTokenClient');デフォルトの認証情報プロバイダーチェーンを使用する
デフォルトの認証情報プロバイダーチェーンは、次の順序で認証情報を検索して使用します。
1. 環境変数から認証情報を使用する
認証情報プロバイダーチェーンは、環境変数から認証情報を検索します。 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を定義し、環境変数に null 以外の値を指定すると、認証情報プロバイダーチェーンは環境変数を使用してデフォルトクライアントを作成します。 リクエストで指定されたクライアントがデフォルトクライアントでない場合、認証情報プロバイダーチェーンは構成ファイルでクライアントを検索してロードします。
2. 構成ファイルを使用する
デフォルトの認証情報ファイルがホームディレクトリに存在する場合、認証情報プロバイダーチェーンは、指定されたタイプと名前に基づいてクライアントを自動的に作成します。 デフォルトの認証情報ファイルのパスは、~/.alibabacloud/credentials です。 Windows オペレーティングシステムでは、パスは C:\Users\USER_NAME\.alibabacloud\credentials です。 デフォルトの認証情報ファイルが存在するが、システムがファイルを解析できない場合は、例外がスローされます。 クライアント名は大文字と小文字を区別しません。 2 つのクライアントの名前が同じ場合、最新のクライアントは以前に作成されたクライアントを上書きします。 また、AlibabaCloud::load('/data/credentials', 'vfs://AlibabaCloud/credentials', ...); コマンドを実行して、特定の構成ファイルを手動でロードすることもできます。 構成ファイルはプロジェクト外に保存され、パブリックプロジェクトにコミットすることはできません。 したがって、構成ファイルは異なるプロジェクトやツールで共有できます。 Windows オペレーティングシステムでは、%UserProfile% 環境変数を使用してホームディレクトリを参照できます。 Unix 系システムでは、$HOME 環境変数またはチルダ(~)を使用できます。 ALIBABA_CLOUD_CREDENTIALS_FILE 環境変数を定義することで、デフォルトの認証情報ファイルのディレクトリを変更できます。
[default] # デフォルトクライアント。
enable = true # クライアントを有効にします。 デフォルトでは、このパラメーターが指定されていない場合、クライアントは有効になります。
type = access_key # 認証は AccessKey ペアに基づいています。
access_key_id = foo # キー
access_key_secret = bar # シークレット
region_id = cn-hangzhou # オプション。 リージョン ID。
debug = true # オプション。 デバッグモードを有効にするかどうかを指定します。 デバッグモードでは、詳細情報が CLI に表示されます。
timeout = 0.2 # オプション。 タイムアウト期間。 値が 1 より大きい場合、単位は秒です。 値が 1 より小さい場合、値に 1,000 を掛けて、単位はミリ秒になります。
connect_Timeout = 0.03 # オプション。 接続リクエストのタイムアウト期間。 値が 1 より大きい場合、単位は秒です。 値が 1 より小さい場合、値に 1,000 を掛けて、単位はミリ秒になります。
cert_file = /path/server.pem # オプション。 証明書ファイル。
cert_password = password # オプション。 証明書のパスワード。
proxy = tcp://localhost:8125 # オプション。 共通プロキシ。
proxy_http = tcp://localhost:8125 # オプション。 HTTP プロキシ。
proxy_https = tcp://localhost:9124 # オプション。 HTTPS プロキシ。
proxy_no = example.com # オプション。 プロキシによって無視されるドメイン名。
[client1] # client1 という名前のクライアント。
type = ecs_ram_role # 認証は EcsRamRole 認証情報に基づいています。
role_name = EcsRamRoleTest # ロール名
#..................................# その他のパラメーターは、デフォルトクライアントのパラメーターと同じです。
[client2] # client2 という名前のクライアント。
enable = false # クライアントは無効になっています。
type = ram_role_arn # 認証は RamRoleArn 認証情報に基づいています。
access_key_id = foo
access_key_secret = bar
role_arn = role_arn
role_session_name = session_name
#..................................# その他のパラメーターは、デフォルトクライアントのパラメーターと同じです。
[client3] # client3 という名前のクライアント。
type = rsa_key_pair # 認証は Rivest-Shamir-Adleman (RSA)キーペアに基づいています。
public_key_id = publicKeyId # 公開鍵 ID
private_key_file = /your/pk.pem # 秘密鍵ファイル。
#..................................# その他のパラメーターは、デフォルトクライアントのパラメーターと同じです。3. インスタンス RAM ロールを使用する
ALIBABA_CLOUD_ECS_METADATA 環境変数を定義し、環境変数に null 以外の値を指定すると、認証情報プロバイダーチェーンは環境変数の値を RAM ロール名として使用し、http://100.100.100.200/latest/meta-data/ram/security-credentials/ にリクエストを送信して一時的なセキュリティ認証情報を取得します。 次に、一時的なセキュリティ認証情報を使用してデフォルトクライアントを作成します。
カスタム認証情報プロバイダーチェーン
カスタム認証情報プロバイダーチェーンを使用して認証情報を取得したり、クロージャを作成してプロバイダーに渡したりできます。
<?php
use AlibabaCloud\Client\Credentials\Providers\CredentialsProvider;
// カスタム認証情報プロバイダーチェーンを作成します。
CredentialsProvider::chain(
CredentialsProvider::ini(),
CredentialsProvider::env(),
CredentialsProvider::instance()
);