Alibaba Cloud Python SDK V1.0 クライアントのアクセス認証情報を設定し、API リクエストを実行します。
SDK は 5 種類の認証情報タイプをサポートしています。デプロイ環境に適したものを選択してください。
|
認証情報タイプ |
使用シナリオ |
|
アクセスキーペア |
RAM ユーザーアカウントを使用したローカル開発とテスト |
|
STS 認証情報 |
短期アクセスが必要な場合、または他のサービスに一時的な権限を付与する必要がある場合 |
|
RAM ロール認証情報 |
アプリケーションが RAM ロールを引き受け、STS トークンの自動更新が必要な場合 |
|
ECS RAM ロール認証情報 |
RAM ロールが割り当てられた ECS インスタンス上でコードを実行する場合 |
|
デフォルト認証情報 |
SDK に環境変数から認証情報を自動的に検出させたい場合 |
認証情報をソースコードにハードコードしたり、バージョン管理にコミットしたりしないでください。認証情報は環境変数またはシークレットマネージャーに保存してください。
アクセスキーペアの使用
RAM ユーザーとして認証する場合、ローカル開発およびテストにはこの方法を使用します。AccessKey ID と AccessKey Secret を環境変数に保存し、AcsClient に渡します。
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# クライアントを初期化します。
client = AcsClient(
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # 環境変数から RAM ユーザーの AccessKey ID を取得します。
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # 環境変数から RAM ユーザーの AccessKey Secret を取得します。
'<region_id>' # リージョン ID。
)
# API リクエストを作成し、パラメータを設定します。
request = DescribeRegionsRequest()
# リクエストを送信します。
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
STS 認証情報の使用
短期アクセスが必要な場合は、この方法を使用します。Security Token Service (STS) は、自動的に有効期限が切れる一時的なセキュリティ認証情報 (AccessKey ID、AccessKey Secret、セキュリティトークン) を発行します。
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = StsTokenCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # 環境変数から STS が提供する AccessKey ID を取得します。
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # 環境変数から STS が提供する AccessKey Secret を取得します。
sts_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN') # 環境変数から STS が提供する STS トークンを取得します。
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
RAM ロール認証情報の使用
アプリケーションが RAM ロールを引き受ける必要がある場合は、この方法を使用します。クライアントは、各 API 呼び出しの前に STS トークンを自動的にリクエストして更新します。また、STS トークンを手動でリクエストし、STS クライアントを作成することもできます。
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import RamRoleArnCredential
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
cred = RamRoleArnCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # 環境変数から RAM ユーザーの AccessKey ID を取得します。
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # 環境変数から RAM ユーザーの AccessKey Secret を取得します。
role_arn='<ram_role_arn>',
session_role_name='<session_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = DescribeRegionsRequest()
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
ECS RAM ロール認証情報の使用
RAM ロールが割り当てられた ECS インスタンス上でコードを実行する場合は、この方法を使用します。SDK は、インスタンスメタデータエンドポイント http://100.100.100.200/latest/meta-data/ram/security-credentials/<role_name> から一時的なセキュリティ認証情報を自動的に取得します。コードに認証情報の設定は必要ありません。
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import EcsRamRoleCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = EcsRamRoleCredential(
role_name='<ram_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
デフォルト認証情報の使用
SDK に認証情報を自動的に検出させたい場合は、この方法を使用します。SDK は、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を確認します。両方が設定されていて空でない場合、SDK はこれらを使用してデフォルト認証情報を作成します。
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# クライアントを初期化します。
client = AcsClient(
region_id='<region_id>' # リージョン ID。
)
# API リクエストを作成し、パラメータを設定します。
request = DescribeRegionsRequest()
# リクエストを送信します。
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
セキュリティのベストプラクティス
環境変数またはシークレットマネージャーを使用してください。 認証情報をソースコードにハードコードしたり、リポジトリにコミットしたりしないでください。
最小権限の原則に従ってください。 RAM ユーザーおよび RAM ロールには、必要な権限のみを付与してください。
本番環境では RAM ロールまたは ECS RAM ロール認証情報を優先してください。 どちらの認証情報タイプも短期 STS トークンを発行し、自動的にローテーションされるため、認証情報の漏洩リスクが軽減されます。
アクセスキーペアを定期的にローテーションしてください。 使用されなくなったアクセスキーペアは取り消してください。
一時的なアクセスには STS 認証情報を使用してください。 サードパーティまたは短期プロセスにアクセスを付与する場合は、長期間有効なアクセスキーペアを共有するのではなく、適切な有効期限を持つ STS 認証情報を発行してください。