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

Alibaba Cloud SDK:アクセス資格情報の管理

最終更新日:Jan 23, 2025

API操作を呼び出してAlibaba cloud SDKを使用してクラウドリソースを管理する場合、有効な資格情報を設定する必要があります。 Alibaba Cloud Credentialsツールは、アクセス資格情報を簡単に取得および管理できる強力な機能セットを提供します。 このトピックでは、Credentialsツールを使用して、デフォルトの資格情報、AccessKeyペア、Security Token Service (STS) トークンなどのさまざまな種類の資格情報を設定する方法について説明します。 このトピックでは、Credentialsツールが既定の資格情報を取得する順序についても説明します。 Alibaba Cloud SDKでの資格情報の設定と管理に関する十分な知識を身に付けることができます。 これにより、クラウドリソースに対する操作が効率的かつ安全になります。

背景情報

資格情報は、ユーザーの身元を証明するために使用される情報のセットです。 システムにログオンするときは、有効な資格情報を使用してID認証を完了する必要があります。 以下のタイプの資格情報が一般的に使用されます。

  1. Alibaba CloudアカウントまたはRAM (Resource Access Management) ユーザーのAccessKeyペア。 AccessKeyペアは永続的に有効です。 AccessKey IDとAccessKeyシークレットで構成されています。

  2. RAMロールのSTSトークン。 STSトークンは一時的な資格情報です。 STSトークンの有効期間とアクセス許可を指定できます。 詳細については、「」をご参照ください。STSとは何ですか?

  3. ベアラトークン。 ID認証と承認に使用されます。

前提条件

  • Python 3.0以降がインストールされます。

  • Alibaba Cloud SDK V2.0がインストールされています。

  • 自己管理ゲートウェイを使用するサービスの社内SDKはインストールされていません。

資格情報ツールのインストール

pipを使用して、Alibaba Cloud Credentials for Pythonをインストールすることを推奨します。 pipがインストールされていることを確認します。 詳細については、「pip documentation」をご参照ください。

pip install alibabacloud_資格情報
  1. 最新バージョンのAlibaba Cloud Credentials for Pythonを使用することを推奨します。

  2. リリースされたすべてのバージョンのAlibaba Cloud Credentials For Pythonの詳細については、「ChangeLog.md」をご参照ください。

Credentialsクライアントの初期化

次のいずれかの方法を使用して、ビジネス要件に基づいて資格情報クライアントを初期化できます。

方法1: デフォルトの資格情報プロバイダーチェーンを使用する

Credentialsクライアントを初期化するメソッドを指定しない場合、デフォルトの資格情報プロバイダーチェーンが使用されます。 詳細については、このトピックの「デフォルトの資格情報プロバイダーチェーン」をご参照ください。

alibabacloud_credentials.clientからの
CredClientとしてのインポートクライアント
alibabacloud_tea_rpc.modelsからのインポートConfig

# Credentialsクライアントを初期化するメソッドを指定しないでください。
credentialsClient = CredClient()
config = Config(credential=credentialsClient)

呼び出し例

ハードコードされたAccessKeyペアを使用せずに、デフォルトの認証情報プロバイダーチェーンを使用して、アクセス認証情報を自動的に作成し、Alibaba CloudサービスのAPI操作を呼び出すことができます。

次のサンプルコードは、Elastic Compute Service (ECS) のDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# コアAlibaba Cloud SDKパッケージをインポートします。 
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# デフォルトの資格情報を使用して、資格情報クライアントを初期化します。 
credentialsClient = CredClient()
ecsConfig = Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint = 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient = EcsClient(ecsConfig)
# DescribeRegions操作を呼び出す要求を初期化します。 
request = DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options = RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response = ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map()) 

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

Alibaba CloudアカウントまたはRAMユーザーのAPI操作を呼び出すために使用されるAccessKeyペアを作成できます。 詳細については、「AccessKey の作成」をご参照ください。 次に、AccessKeyペアを使用して資格情報クライアントを初期化できます。

警告

Alibaba Cloudアカウントは、アカウントのすべてのリソースにフルアクセスできます。 Alibaba CloudアカウントのAccessKeyペアリークは、システムに重大な脅威をもたらします。

したがって、資格情報クライアントを初期化するために必要最小限の権限が付与されたRAMユーザーのAccessKeyペアを使用することを推奨します。

osのインポート
からalibabacloud_credentials.client importクライアント
alibabacloud_credentials.modelsからのインポートConfig

config = Config (
type='access_key' 、access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、)
cred=クライアント (設定) 

呼び出し例

Credentialsツールを使用して、AccessKeyペアを読み取り、Alibaba CloudサービスのAPI操作を呼び出すことができます。

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

osのインポート
# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# 資格情報ツールとECS SDKの両方の設定をインポートします。
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_credentials.modelsからConfigをCreConfigとしてインポートする
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# AccessKeyペアを使用して、資格情報クライアントを初期化します。 
credentialsConfig = CreConfig (
    # 資格情報のタイプを指定します。 
    type='access_key' 、
    # AccessKey IDを指定します。 
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、
    # AccessKey secretを指定します。 
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、)
credentialClient = CredClient(credentialsConfig)

ecsConfig = Config(credential=credentialClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint = 'ecs .aliyuncs.com'
# ECS SDKクライアントを初期化します。 
ecsClient = EcsClient(ecsConfig)

# DescribeRegions操作を呼び出す要求を初期化します。 
request = DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options = RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response = ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map()) 

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

STSのAssumeRole操作をRAMユーザーとして呼び出して、STSトークンを取得できます。 STSトークンの最大有効期間を指定できます。 次のサンプルコードは、STSトークンを使用して資格情報クライアントを初期化する方法の例を示しています。 この例では、STSトークンの取得方法は示されていません。

{
  "RequestId": "EA7A3526-F7DB-54A5-8300-9B742CFAA5EA" 、
  "AssumedRoleUser": {
    "Arn": "acs:ram::125499367423 ****:role/STStokenTestRole/STSsessionName" 、
    "AssumedRoleId": "35219123109646 ****:STSsessionName"
  },
  "Credentials": {
    "SecurityToken": "exampleToken" 、
    "AccessKeyId": "STS.exampleAccessKeyID" 、
    "AccessKeySecret": "exampleAccessKeySecret" 、
    "有効期限": "2023-03-26T05:26:06Z"
  }
} 
from alibabacloud_credentials.client import Client
alibabacloud_credentials.modelsからのインポートConfig

config = Config (
    type='sts' 、
    # <ALIBABA_CLOUD_ACCESS_KEY_ID> をAssumeRole操作への応答から取得した一時的なAccessKey IDに置き換えます。 
    access_key_id='<ALIBABA_CLOUD_ACCESS_KEY_ID>' 、
    # <ALIBABA_CLOUD_ACCESS_KEY_SECRET> を、AssumeRole操作への応答から取得した一時的なAccessKeyシークレットに置き換えます。 
    access_key_secret='<ALIBABA_CLOUD_ACCESS_KEY_SECRET>' 、
    # <ALIBABA_CLOUD_SECURITY_TOKEN> をAssumeRole操作への応答から取得したSTSトークンに置き換えます。 
    security_token='<security_token>'
)
credClient=クライアント (設定)

呼び出し例

Credentialsツールを使用してSTSトークンを読み取り、Alibaba CloudサービスのAPI操作を呼び出すことができます。

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for PythonSTS SDK for Python

osのインポート

# 資格情報クライアントをインポートし、エイリアスを作成します。 資格情報ツールの設定をインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.modelsからConfigをCreConfigとしてインポートする
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
alibabacloud_sts20150401.clientからSts20150401Clientとしてのインポートクライアント
alibabacloud_sts20150401.modelsからAssumeRoleRequestをインポート
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# RAMユーザーのAccessKeyペアを取得します。
config = Config (
    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID '] 、
    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET ']
)
config.endpoint = "sts.aliyuncs.com"
stsClient = Sts20150401Client(config)

# AssumeRole操作を呼び出すためのリクエストパラメーターを指定します。
assume_role_request = AssumeRoleRequest (
    duration_seconds=3600, # セッションの有効期間を指定します。
    role_session_name='35219123109646 ****:STSsessionName', # ロールセッションの名前を指定します。
    role_arn='acs:ram::125499367423 ****:role/STStokenTestRole/STSsessionName'# 仮定するRAMロールのAlibaba Cloudリソース名 (ARN) を指定します。
)
runtime = RuntimeOptions()
トライ:
    resp = stsClient.assume_role_with_options(assume_role_request、ランタイム)
    assumeRoleResponseBodyCredentials = resp.body.credentials

    # STSトークンを使用して、Credentialsクライアントを初期化します。 
    credentialsConfig = CreConfig (
        # 資格情報のタイプを指定します。 
        type='sts' 、
        # AccessKey IDを指定します。 
        access_key_id=assumeRoleResponseBodyCredentials.access_key_id、
        # AccessKey secretを指定します。 
        access_key_secret=assumeRoleResponseBodyCredentials.access_key_secret、
        # STSトークンを指定します。 
        security_token=assumeRoleResponseBodyCredentials.security_token
    )
    credentialClient = CredClient(credentialsConfig)
    ecsConfig = Config(credential=credentialClient)
    # ECSのエンドポイントを指定します。 
    ecsConfig.endpoint = 'ecs .aliyuncs.com'
    # ECS SDKクライアントを初期化します。 
    ecsClient = EcsClient(ecsConfig)

    # DescribeRegions操作を呼び出す要求を初期化します。 
    リクエスト = DescribeRegionsRequest()
    # ランタイム設定を初期化します。 
    runtime_options = RuntimeOptions()
    # DescribeRegions操作を呼び出し、応答を取得します。 
    response = ecsClient.de scribe_regions_with_options(request, runtime_options)
    print(response.to_map())
例外をエラーとして除いて:
    # エラーメッセージを表示します。
    print(error.message)

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

このメソッドの基本的なロジックは、STSトークンを使用してCredentialsクライアントを初期化することです。 RAMロールのARNを指定すると、資格情報ツールはSTSからSTSトークンを取得できます。 policyパラメーターを使用して、RAMロールの権限を制限することもできます。

osのインポート

alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.modelsからConfigをCredConfigとしてインポートする

credentialsConfig = CredConfig (
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、
    type='ram_role_arn '、
    # 仮定するRAMロールのARNを指定します。 例: acs:ram::123456789012 ****:role/adminrole。
    role_arn='<RoleArn>' 、
    # ロールセッションの名前を指定します。
    role_session_name='<RoleSessionName>' 、
    # Optional. RAMロールの制限付き権限を指定します。 例: {"Statement": [{"Action": ["*"]] 、"Effect": "Allow" 、"Resource": ["*"]}] 、"Version": "1"} 。
    policy='<Policy>' 、
    role_session_expailation=3600
)
credentialsClient = CredClient(credentialsConfig)

呼び出し例

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

osのインポート

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# AccessKeyペアとRAMロールを使用して、資格情報クライアントを初期化します。 
credentialsConfig = CredConfig (
    type='ram_role_arn ', # 資格情報の種類を指定します。 
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID '), # AccessKey IDを指定します。 
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、# AccessKey secretを指定します。 
    role_arn='<RoleArn>', # 仮定するRAMロールのARNを指定します。 形式: acs:ram::userID:role/roleName。 
    role_session_name='<RoleSessionName>', # ロールセッションの名前を指定します。 
    role_session_expiration=3600, # セッションの有効期間を指定します。
    policy='<Policy>'# オプション。 STSトークンの制限付き権限を指定します。 
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint = 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient = EcsClient(ecsConfig)
# DescribeRegions操作を呼び出す要求を初期化します。 
request = DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options = RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response = ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map())

方法5: ECSインスタンスのRAMロールを使用し、通常モードでECSインスタンスのメタデータにアクセスする

このメソッドの基本的なロジックは、STSトークンを使用してCredentialsクライアントを初期化することです。 資格情報ツールは、ECSインスタンスにアタッチされたRAMロールを自動的に取得し、ECSのメタデータサーバーを使用してSTSトークンを取得します。 STSトークンは、Credentialsクライアントを初期化するために使用されます。 Container Service for KubernetesクラスターのエラスティックコンテナインスタンスまたはワーカーノードにRAMロールをアタッチすることもできます。

alibabacloud_credentials.clientからの
CredClientとしてのインポートクライアント
alibabacloud_credentials.modelsからConfigをCredConfigとしてインポートする

credentialsConfigig = CredConfig (
type='ecs_ram_role '、# オプション。 ECSインスタンスのRAMロールの名前を指定します。 このパラメーターを指定しない場合、その値は自動的に取得されます。 リクエスト数を減らすには、このパラメーターを指定することを推奨します。
	role_name='<RoleName>'
)
credentialsClient = CredClient(CredConfig)

呼び出し例

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# コアAlibaba Cloud SDKパッケージをインポートします。 
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート
# ECSインスタンスのRAMロールを使用して、資格情報クライアントを初期化します。 
credentialsConfig = CredConfig (
    type='ecs_ram_role ', # 資格情報の種類を指定します。 
    role_name='<ecs_ram_role_name>'# ECSインスタンスにアタッチされているRAMロールの名前を指定します。 このパラメーターを指定することを推奨します。 
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig=Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint= 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient=EcsClient(ecsConfig)

# DescribeRegions操作を呼び出す要求を初期化します。 
request=DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options=RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response=ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map()) 

方法6: ECSインスタンスのRAMロールを使用し、セキュリティ強化モードでECSインスタンスのメタデータにアクセスする

セキュリティ強化モードでECSインスタンスのメタデータにアクセスし、ECSインスタンスにアタッチされているRAMロールの初期認証情報を取得できます。 通常モードと比較して、セキュリティ強化モードは、より厳密な次のセキュリティロジックを実装します。まず、有効期間を持つトークンがECSインスタンス内で自動的に生成されます。 次に、このトークンを資格情報として使用して、メタデータサーバーからSTSトークンを要求します。 これらの操作は、資格証明クライアントの安全な初期化プロセスも構成します。

セキュリティ強化モードでは、ECSインスタンス内で生成されたトークンは動的であり、有効期間があります。 この場合、外部の攻撃者は、トークンを予測または偽造してメタデータサーバーに不正にアクセスすることはできません。 これにより、サーバー側の要求偽造 (SSRF) などのネットワークセキュリティリスクが効果的に回避されます。 セキュリティ強化モードは、ID検証に追加の保護層を追加するだけでなく、システム全体のセキュリティを大幅に向上させます。 このモードは、クラウドリソースへの安全なアクセスと管理を保証します。

alibabacloud_credentials.client import Clientからの
alibabacloud_credentials.modelsからのインポートConfig

credConfig=設定 (
    type='ecs_ram_role '、# 資格情報タイプ
    role_name='roleName' 、# 'role_name' はオプションです。 設定されていない場合は自動的に取得されます。 リクエストを減らすために設定することを強くお勧めします。
    enable_imds_v2=True # 'enable_imds_v2 'はオプションで、オンにすることをお勧めします。 環境変数を設定することで置き換えることができます:
)
credClient=クライアント (credConfig)

access_key_id = credClient.get_access_key_id()
access_key_secret = credClient.get_access_key_secret()
security_token = credClient.get_security_token()
cred_type = credClient.get_type()
重要
  • enable_imds_v2パラメーターのデフォルト値はFalseです。これは、ECSインスタンスのメタデータが通常モードでアクセスされることを指定します。

  • セキュリティ強化モードでECSインスタンスのメタデータにアクセスする場合は、enable_imds_v2パラメーターをTrueに設定します。

呼び出し例

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# コアAlibaba Cloud SDKパッケージをインポートします。 
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# ECSインスタンスのRAMロールを使用して、資格情報クライアントを初期化します。 
credentialsConfig = CredConfig (
    type='ecs_ram_role ', # 資格情報の種類を指定します。 
    role_name='<ecs_ram_role_name>', # ECSインスタンスにアタッチされているRAMロールの名前を指定します。 このパラメーターを指定することを推奨します。 
    enable_imds_v2=True# セキュリティ強化モードでECSインスタンスのメタデータにアクセスするには、このパラメーターをTrueに設定します。 
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig = Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint = 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient = EcsClient(ecsConfig)

# DescribeRegions操作を呼び出す要求を初期化します。 
request = DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options = RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response = ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map())

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

Container Service for KubernetesのワーカーノードにRAMロールをアタッチした後、ワーカーノードのポッドのアプリケーションは、ECSインスタンスのアプリケーションと同じ方法でメタデータサーバーを使用してSTSトークンを取得できます。 ただし、信頼されていないアプリケーション (顧客によって送信され、コードを使用できないアプリケーションなど) がワーカーノードにデプロイされている場合、アプリケーションがメタデータサーバーを使用してワーカーノードにアタッチされているRAMロールのSTSトークンを取得することはできません。 クラウドリソースのセキュリティを確保し、信頼できないアプリケーションが必要なSTSトークンを安全に取得できるようにするには、サービスアカウントのRAMロール (RRSA) 機能を使用して、アプリケーションに必要最小限の権限を付与します。 この場合、ACKクラスターはサービスアカウントOpenID Connect (OIDC) トークンファイルを作成し、トークンファイルをポッドに関連付けてから、関連する環境変数をポッドに挿入します。 次に、資格情報ツールは環境変数を使用してSTSのAssumeRoleWithOIDC操作を呼び出し、RAMロールのSTSトークンを取得します。 RRSA機能の詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」をご参照ください。

次の環境変数がポッドに注入されます。

ALIBABA_CLOUD_ROLE_ARN: RAMロールのARN。

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC IDプロバイダー (IdP) のARN。

ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDCトークンファイルのパス。

osのインポート

からalibabacloud_credentials.client importクライアント
alibabacloud_credentials.modelsからのインポートConfig

config = Config (
type='oidc_role_arn '、access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN ') 、role_arn=os.environ.get('ALIBABA_CLOUD_ROLE_ARN ') 、oidc_provider_arn=os.environ.get('ALIBABA_CLOUD_OIDC_PROVIDER_ARN ') 、oidc_token_file_path=os.environ.get('ALIBABA_CLOUD_OIDC_TOKEN_FILE ') 、# ロールセッションの名前を指定します。
	role_session_name='<RoleSessionName>' 、# オプション。 RAMロールの制限付き権限を指定します。 例: {"Statement": [{"Action": ["*"]] 、"Effect": "Allow" 、"Resource": ["*"]}] 、"Version": "1"} 。
	policy='<Policy>' 、# セッションの有効期間を指定します。
	role_session_expailation=3600
)
cred=クライアント (設定)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type() 

呼び出し例

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# コアAlibaba Cloud SDKパッケージをインポートします。 
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート
osのインポート

# OIDC IdPのRAMロールを使用して、資格情報クライアントを初期化します。 
credentialsConfig = CredConfig (
    type='oidc_role_arn '、
    access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、
    access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、
    security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN ') 、
    role_arn=os.environ.get('ALIBABA_CLOUD_ROLE_ARN ') 、
    oidc_provider_arn=os.environ.get('ALIBABA_CLOUD_OIDC_PROVIDER_ARN ') 、
    oidc_token_file_path=os.environ.get('ALIBABA_CLOUD_OIDC_TOKEN_FILE ') 、
    # ロールセッションの名前を指定します。
    role_session_name='<RoleSessionName>' 、
    # Optional. RAMロールの制限付き権限を指定します。 例: {"Statement": [{"Action": ["*"]] 、"Effect": "Allow" 、"Resource": ["*"]}] 、"Version": "1"} 。
    policy='<Policy>' 、
    # セッションの有効期間を指定します。
    role_session_expailation=3600
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig=Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint= 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient=EcsClient(ecsConfig)

# DescribeRegions操作を呼び出す要求を初期化します。 
request=DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options=RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response=ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map()) 

方法8: URIを使用する

このメソッドの基本的なロジックは、STSトークンを使用してCredentialsクライアントを初期化することです。 Credentialsツールは、指定したURI (uniform resource identifier) を使用してSTSトークンを取得します。 STSトークンは、Credentialsクライアントを初期化するために使用されます。

alibabacloud_credentials.client import Clientからの
alibabacloud_credentials.modelsからのインポートConfig

config = Config (
type='credentials_uri' 、# 資格情報のURIをhttp:// local_or_remote_uri /の形式で指定します。
	credentials_uri='<local_or_remote_uri>' 、)
cred=クライアント (設定)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type()

呼び出し例

Alibaba CloudサービスのAPI操作を呼び出すには、資格情報にローカルまたはリモートのURIを指定し、資格情報ツールを使用してローカルまたはリモートのURIに基づいてSTSトークンを取得して自動的に更新します。

Alibaba CloudサービスのAPI操作を呼び出すには、Alibaba Cloudサービスの依存関係をインストールする必要があります。 次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 ECS SDK for Python

# 資格情報クライアントをインポートし、エイリアスを作成します。 
alibabacloud_credentials.clientからCredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
# ECS SDKクライアントをインポートし、エイリアスを作成します。 
alibabacloud_ecs20140526.clientからEcsClientとしてのインポートクライアント
# ECSのDescribeRegions操作を呼び出すリクエストを開始します。 
alibabacloud_ecs20140526.modelsからDescribeRegionsRequestをインポート
# コアAlibaba Cloud SDKパッケージをインポートします。 
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# URIを使用して、Credentialsクライアントを初期化します。 
credentialsConfig = CredConfig (
    type='credentials_uri', # 資格情報の種類を指定します。 
    credentials_uri='local_or_remote_uri ', # 資格情報のURIをhttp:// local_or_remote_uri /の形式で指定します。 
)
credentialsClient = CredClient(credentialsConfig)
ecsConfig=Config(credential=credentialsClient)
# ECSのエンドポイントを指定します。 
ecsConfig.endpoint= 'ecs .aliyuncs.com'
# Credentialsクライアントを使用してECS SDKクライアントを初期化します。 
ecsClient=EcsClient(ecsConfig)

# DescribeRegions操作を呼び出す要求を初期化します。 
request=DescribeRegionsRequest()
# ランタイム設定を初期化します。 
runtime_options=RuntimeOptions()
# DescribeRegions操作を呼び出し、応答を取得します。 
response=ecsClient.de scribe_regions_with_options(request, runtime_options)
print(response.to_map()) 

方法9: ベアラトークンを使用する

ベアラトークンを使用して資格情報クライアントを初期化できるのは、Cloud Call Centerのみです。

alibabacloud_credentials.client import Clientからの
alibabacloud_credentials.modelsからのインポートConfig

config = Config (
type='bearer' 、# ベアラトークンを入力します。
	bearer_token='<BearerToken>' 、)
cred=クライアント (設定)

access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
security_token = cred.get_security_token()
cred_type = cred.get_type()

呼び出し例

次のサンプルコードは、ECSのDescribeRegions操作を呼び出す方法の例を示しています。 この操作を呼び出す前に、 Cloud Call Center SDK for Python

alibabacloud_credentials.clientからの
CredClientとしてのインポートクライアント
alibabacloud_credentials.clientからCredConfigとしてConfigをインポート
CCC20200701Clientとしてalibabacloud_ccc20200701.clientインポートクライアントから
alibabacloud_ccc20200701からccc20200701_modelsとしてモデルをインポート
alibabacloud_tea_openapi.modelsからのインポートConfig
alibabacloud_tea_util.modelsからRuntimeOptionsをインポート

# ベアラトークンを使用して、Credentialsクライアントを初期化します。 
credentialsConfig = CredConfig (
    type='bearer', # 資格情報のタイプを指定します。 
    bearer_token='<bearer_token>', # サーバーによって自動的に生成されるベアラトークンを指定します。 ベアラ・トークンは、有効期間を有する。 
)
credentialsClient = CredClient(credentialsConfig)
config = Config(credential=credentialsClient)

# ECSのエンドポイントを指定します。 
config.endpoint = 'ccc .cn-shanghai.aliyuncs.com'
# Credentialsクライアントを使用して、Cloud Call Centerクライアントを初期化します。 
cccClient = CCC20200701Client (設定)

request = ccc20200701_models.GetInstanceRequest (
    instance_id='ccc-test'
)
# ランタイム設定を初期化します。 
runtime_options = RuntimeOptions()
response = cccClient.get_instance_with_options(request, runtime_options)
print(response.to_map())

デフォルトの資格情報プロバイダーチェーン

アプリケーションの開発環境と本番環境でさまざまな種類の資格情報を使用する場合は、通常、コードから環境情報を取得し、コードブランチを作成して、開発環境と本番環境でさまざまな資格情報を取得する必要があります。 Credentialsツールの既定の資格情報プロバイダーチェーンを使用すると、同じコードを使用して、アプリケーションに依存しない構成に基づいて異なる環境の資格情報を取得できます。 初期化方法を指定せずにcred = CredClient() を使用して資格情報クライアントを初期化すると、資格情報ツールは次の順序で資格情報を取得します。

1. 環境変数から資格情報を取得する

資格情報ツールは、まず、環境変数から資格情報を取得します。 ALIBABA_CLOUD_ACCESS_KEY_ID (AccessKey ID) およびALIBABA_CLOUD_ACCESS_KEY_SECRET (AccessKey secret) システム環境変数が指定されている場合、資格情報ツールは指定されたAccessKeyペアをデフォルトの資格情報として使用します。

2. OIDC IdPのRAMロールを使用して資格情報を取得する

前の手順で資格情報が見つからない場合、資格情報ツールは次の環境変数の値を取得します。

ALIBABA_CLOUD_ROLE_ARN: RAMロールのARN。

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC IdPのARN。

ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDCトークンファイルのパス。

上記の3つの環境変数が指定されている場合、資格情報ツールはその環境変数を使用してSTSのAssumeRoleWithOIDC操作を呼び出し、STSトークンをデフォルトの資格情報として取得します。

3. 構成ファイルから資格情報を取得する

前の手順で資格情報が見つからない場合、資格情報ツールは構成ファイルから資格情報を取得します。 構成ファイルのパスは、オペレーティングシステムによって異なります。

Linux: ~/.alibabacloud/credentials.ini

Windows: C:\Users\USER_NAME\.alibabacloud\credentials.ini

環境変数ALIBABA_CLOUD_CREDENTIALS_fileを設定して、設定ファイルパスを指定することもできます。 設定ファイルが存在する場合、アプリケーションは設定ファイルで既定で指定されている資格情報を使用して資格情報クライアントを初期化します。 ALIBABA_CLOUD_PROFILE環境変数を設定して、読み取られるデフォルトの資格情報を変更することもできます。

[デフォルト]
enable = true
type = access_key
access_key_id = foo
access_key_secret=バー

[client1]
type = ecs_ram_role
role_name = EcsRamRoleTest

[client2]
enable = false
type = ram_role_arn
region_id = cn-test
policy = test
access_key_id = foo
access_key_secret=バー
role_arn = role_arn
role_session_name = session_name

[client3]
type = rsa_key_pair
public_key_id = publicKeyId
private_key_file = /your/pk.pem

[client4]
enable = false
type = oidc_role_arn
region_id = cn-test
policy = test
access_key_id = foo
access_key_secret=バー
role_arn = role_arn
oidc_provider_arn = oidc_provider_arn
oidc_token_file_path = /xxx/xxx
role_session_name = session_name 

4。 ECSインスタンスのRAMロールを使用して資格情報を取得する

前の手順で資格情報が見つからない場合、資格情報ツールは、ECSインスタンスのRAMロール名を指定するALIBABA_CLOUD_ECS_METADATA環境変数の値を取得します。 RAMロールが存在する場合、アプリケーションはECSのメタデータサーバーを使用して、デフォルトの資格情報としてRAMロールのSTSトークンを取得します。

5. URIに基づいて資格情報を取得する

前の手順で資格情報が見つからない場合、資格情報ツールはALIBABA_CLOUD_CREDENTIALS_URI環境変数の値を取得します。 環境変数が指定されている場合、アプリケーションは、Credentialsツールが一時的なセキュリティ資格情報を取得するURIとして値を設定します。

資格情報の保護

資格情報のリークにより、システムが攻撃にさらされる可能性があります。 これは、クラウドサービスに対する主な脅威の1つです。 平文の資格情報の漏洩を防ぎ、セキュリティリスクを軽減するために、次のソリューションを使用できます。

  1. ECSインスタンスのRAMロールまたはSTSトークンを使用することを推奨します。

  2. デフォルトの資格情報プロバイダーチェーンを使用し、資格情報を環境変数または構成ファイルに記録することを推奨します。

  3. 明示的な初期化メソッドを使用して資格情報クライアントを初期化するには、システムプロパティまたは環境変数を使用して資格情報を記録し、os.getenvまたはos.environ.getメソッドを使用して資格情報を取得することをお勧めします。

alibabacloud_credentials.client import Clientからの
alibabacloud_credentials.modelsからのインポートConfig
osのインポート

config = Config (
type='access_key' 、access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID ') 、access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET ') 、)
cred=クライアント (設定)
access_key_id = cred.get_access_key_id()
access_key_secret = cred.get_access_key_secret()
cred_type = cred.get_type()

資格情報の切り替え

次の方法を使用して、さまざまな資格情報を使用して、アプリケーションでさまざまなAPI操作を呼び出すことができます。

複数の資格情報クライアントを使用する

複数の資格情報クライアントを初期化して、異なる資格情報を異なる要求クライアントに渡します。

alibabacloud_credentials.client import Clientからの
alibabacloud_credentials.modelsからのインポートConfig

config1=設定 (
type='access_key' 、access_key_id='<ALIBABA_CLOUD_ACCESS_KEY_ID>' 、access_key_secret='<ALIBABA_CLOUD_ACCESS_KEY_SECRET>' 、)
cred1=クライアント (config1)

config2=設定 (
type='access_key' 、access_key_id='<ALIBABA_CLOUD_ACCESS_KEY_ID>' 、access_key_secret='<ALIBABA_CLOUD_ACCESS_KEY_SECRET>' 、)
cred2=クライアント (config2)

AuthUtilsクラスの使用

構成ファイルに記録されている資格情報を使用して資格情報クライアントを初期化する場合、auth_util.client_typeパラメーターを使用して異なる資格情報を切り替えることができます。

[デフォルト]
enable=true
type=access_key
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

[client1]
enable=true
type=sts
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
security_token=<security_token>

[client2]
enable=true
type=ecs_ram_role
role_name=<ecs_ram_role_name> 

サンプルコード:

alibabacloud_credentials.utilsから
auth_utilをインポート
からalibabacloud_credentials.client importクライアント

# AuthUtilsクラスのclientTypeプロパティを指定しない場合は、デフォルトが使用されます。 
credentialClient=クライアント ()
# client1資格情報に切り替えます。
auth_util.client_type="client1"
credentialClient1=クライアント ()
# client2資格情報に切り替えます。
auth_util.client_type="client2"
credentialClient2=クライアント () 

関連ドキュメント