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

Elastic Compute Service:Alibaba Cloud アカウントを保護し、認証情報の漏洩を防ぐ

最終更新日:Nov 18, 2025

Alibaba Cloud アカウントは、クラウドリソースにログインして管理するために使用される中心的な ID 認証情報です。認証情報が漏洩すると、高いセキュリティリスクが生じます。不正なアクセスや誤用を防ぐために、アカウントの認証情報を保護する必要があります。

セキュリティリスク

Alibaba Cloud アカウントに対する主なセキュリティ脅威には、パスワードへのブルートフォース攻撃や、AccessKey や RAM ロール用のセキュリティトークンサービス (STS) トークンなどの長期的な認証情報の漏洩が含まれます。攻撃者がこれらの認証情報を入手すると、正当なユーザーになりすましてログインし、リソースを管理したり、機密データにアクセスしたりする可能性があります。これにより、次のような深刻な結果につながる可能性があります。

  • リソースの不正使用。直接的な金銭的損失につながる可能性があります。

  • ビジネスの可用性に影響を与えるインフラストラクチャの損傷やサービスの中断。

  • 機密データの漏洩や暗号化。情報漏洩やランサムウェアのリスクにつながる可能性があります。

  • 悪意のあるプログラムやバックドアのインストール。システムのセキュリティとデータ整合性に対する長期的な脅威となります。

ベストプラクティス

アカウントパスワードを保護し、多要素認証 (MFA) を有効にする

  • 複雑なパスワードの設定: 弱いパスワードは、アカウント侵害の主な原因です。ブルートフォース攻撃によるパスワードの推測や解読を防ぐために、弱いパスワードの使用は避けてください。

  • パスワードの定期的な変更: パスワードを 90 日ごとに変更して、長期間の使用による漏洩のリスクを軽減します。

  • MFA の有効化: Alibaba Cloud アカウントに仮想 MFA デバイスをアタッチまたはデタッチします。MFA は、モバイルトークンやハードウェアで保護されたキーなどの動的な検証コードを、パスワード認証に加えてセキュリティの追加レイヤーとして追加します。これにより、パスワードが漏洩した場合の不正アクセスを防ぐことができます。

AccessKey の代わりに ECS RAM ロールを使用する

ECS インスタンスにデプロイされたアプリケーションが、ECS スケーリングなどのために Alibaba Cloud サービス API を呼び出す必要がある場合は、AccessKey の代わりに RAM ロールを使用します。

RAM ユーザーを作成してロールをアタッチする

現在のアカウントには、インスタンスにロールをアタッチするための sts:AssumeRole 権限が必要です。この要件は、権限の乱用を防ぐのに役立ちます。

コンソール

  1. Resource Access Management (RAM) ユーザーを作成して承認する

  2. ECS インスタンスに RAM ロールをアタッチします。

    インスタンス作成時にロールをアタッチする

    インスタンス購入ページでインスタンスを作成する際に、[詳細オプション] セクションで [インスタンス RAM ロール] を選択します。

    インスタンスの脆弱性や構成エラーによって引き起こされる可能性のあるセキュリティトークンサービスのトークン漏洩を防ぐために、[メタデータアクセスモード] には [強制モード] を選択することをお勧めします。詳細については、「強制モードを使用してインスタンスメタデータにアクセスする」をご参照ください。

    既存のインスタンスにロールをアタッチする

    1. ECS コンソール - インスタンス ページに移動し、目的のターゲットリージョンに切り替えます。

    2. ターゲットの ECS インスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページに移動します。

    3. [その他の情報] セクションで、[RAM ロールの付与/取り消し] をクリックします。

    4. 表示されるダイアログボックスで、RAM ロールを選択し、[OK] をクリックします。

    重要

    1 つの ECS インスタンスには 1 つの RAM ロールしかアタッチできません。アプリケーションが複数の権限を必要とする場合は、それらすべてをその単一のロールに付与する必要があります。

    たとえば、インスタンスがすでに AliyunECSDiskEncryptDefaultRole ロールにアタッチされており、ネットワークインターフェース管理権限も必要な場合は、RAM コンソールでそのロールに AliyunECSNetworkInterfaceManagementAccess ポリシーを追加できます。

API

API 操作を使用して、ロールをアタッチおよびデタッチできます。

  • インスタンス作成時にロールをアタッチする: RunInstances または CreateInstance を呼び出してインスタンスを作成する際に、RamRoleName パラメーターを指定します。

  • 既存のインスタンスにロールをアタッチする: AttachInstanceRamRole を呼び出して、インスタンスに RAM ロールを付与します。

  • ロールをデタッチする: DetachInstanceRamRole を呼び出して、インスタンスに付与された RAM ロールを取り消します。

アプリケーションから RAM ロールを使用して Alibaba Cloud サービスにアクセスする

ECS インスタンスで実行されるアプリケーションは、インスタンスメタデータサービスから一時的な STS トークンを自動的に取得できます。その後、アプリケーションはこのトークンを使用して Alibaba Cloud サービス API を呼び出すことができます。

サンプルコード

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_util.models import RuntimeOptions

# ステップ 1: STS トークンを取得する
def get_sts_token():
    config = CredConfig(
        type="ecs_ram_role",
        enable_imds_v1=False
    )
    cred_client = CredClient(config)
    credential = cred_client.get_credential()
    return {
        "AccessKeyId": credential.get_access_key_id(),
        "AccessKeySecret": credential.get_access_key_secret(),
        "SecurityToken": credential.get_security_token()
    }

# ステップ 2: ECS クライアントを初期化する
def create_ecs_client(sts_token):
    config = Config(
        access_key_id=sts_token["AccessKeyId"],
        access_key_secret=sts_token["AccessKeySecret"],
        security_token=sts_token["SecurityToken"],
        endpoint="ecs.cn-hangzhou.aliyuncs.com"
    )
    return EcsClient(config)

# ステップ 3: インスタンスを作成するためのリクエストを構築する
def build_create_instance_request():
    return ecs_models.RunInstancesRequest(
        region_id="cn-hangzhou",
        image_id="aliyun_3_x64_20G_scc_alibase_20220225.vhd",
        instance_type="ecs.e-c1m2.xlarge",
        security_group_id="sg-bp1esyhwfbqeyudt****",
        v_switch_id="vsw-bp1nzprm8h7mmnl8t****",
        instance_name="sdk-test",
        instance_charge_type="PostPaid",
        key_pair_name="sdk-key-pair",
        system_disk_category="cloud_essd"
    )

# ステップ 4: API を呼び出してインスタンスを作成する
def create_instance(client, request):
    runtime = RuntimeOptions()
    try:
        response = client.run_instances_with_options(request, runtime)
        print("Instance created successfully. Instance ID:", response.body.instance_id_sets.instance_id_set[0])
    except Exception as e:
        print("Failed to create instance. Error message:", e)

# メイン関数
if __name__ == "__main__":
    sts_token = get_sts_token()  # STS トークンを取得する
    ecs_client = create_ecs_client(sts_token)  # ECS クライアントを初期化する
    request = build_create_instance_request()  # インスタンスを作成するためのリクエストを構築する
    create_instance(ecs_client, request)  # API を呼び出してインスタンスを作成する

AccessKey を保護し、漏洩リスクを軽減する

AccessKey を使用する必要がある場合は、作成、ストレージ、配布、使用に至るまでのライフサイクル全体でセキュリティ管理を強化する必要があります。

  • 作成: 「1 人に 1 つの AccessKey、1 つのアプリケーションに 1 つの AccessKey」の原則に従います。複数のユーザーやプログラム間で AccessKey を共有しないでください。AccessKey が漏洩した場合、この方法により、責任者を迅速に特定し、影響を限定し、キーを速やかにローテーションできます。

  • 権限管理: 最小権限の原則に従い、必要な権限のみを付与します。RAM ユーザーを使用し、その責任に基づいて権限を割り当てます。Alibaba Cloud アカウントの AccessKey の使用は避けてください。詳細については、「Alibaba Cloud アカウントの使用を避け、異なる責任を持つ RAM ユーザーに異なる権限を付与する」をご参照ください。

  • 安全なストレージ: AccessKey を信頼できるデバイスに保存します。例は次のとおりです。

    • ルートユーザーまたは特定のユーザーのみが読み取り可能なファイル。

    • アクセス制御を備えたデータベースまたは Key Management Service (KMS)。

    • ローカルのメモ、クラウドのメモ、コードリポジトリ、チャットの記録、個人の署名やステータスに AccessKey を保存しないでください。

  • 安全な配布: AccessKey を暗号化されたファイルで配布します。暗号化された AccessKey ファイルをメールなどの 1 つのチャネルで送信し、復号パスワードをショートメッセージなどの別のチャネルで送信します。

  • 安全な使用: コードに AccessKey をハードコーディングしないでください。代わりに、AccessKey を別の構成ファイルに保存し、ファイルを暗号化して、信頼できるサーバーに保存します。サーバーに配布された後にのみファイルを復号し、オーナーのみが読み取れるようにファイル権限を設定します。

  • ネットワークアクセス制御: RAM コンソールで AccessKey のネットワークアクセス制御ポリシーを構成します。詳細については、「AccessKey のネットワークアクセス制御ポリシー」をご参照ください。

  • 定期的なローテーションとクリーンアップ

    • 定期的なローテーション: AccessKey を 90 日ごとにローテーションします。新しい AccessKey を生成し、ユーザーに新しいキーに更新するよう通知します。詳細については、「RAM ユーザーの AccessKey をローテーションする」をご参照ください。

    • 定期的なクリーンアップ: RAM コンソールで AccessKey の操作レコードを確認し、長期間使用されていないキーは速やかに取り消します。詳細については、「RAM ユーザーの AccessKey を削除する」をご参照ください。

  • AccessKey 漏洩リスクの監視: Security Center の AccessKey 漏洩検出機能を使用して、AccessKey が漏洩したかどうかを特定します。この機能は、漏洩した AccessKey のアラート通知をサポートしています。さらに、AccessKey が漏洩した場合、Alibaba Cloud はリスクのエスカレーションを防ぐためにAccessKey の制限的保護を提供します。

コンプライアンス機能

チェック: ECS インスタンスが AccessKey を使用して Alibaba Cloud サービスにアクセスしているかどうかを判断する

AccessKey ログをクエリして、AccessKey の基本情報、アクセスした Alibaba Cloud サービス、および関連する IP アドレスとリソースを検索できます。

前提条件: ActionTrail トレイルを作成し、Simple Log Service (SLS) Logstore にログを配信していること。

  • VPC エンドポイントから開始された AccessKey 呼び出しのクエリ:

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId",  "event.vpcId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" LIKE 'vpc%'

    結果は次の例のようになります。

    image.png

    vpcIdsourceipaddress を使用して、呼び出しを開始した ECS インスタンスを特定します。次に、どのプログラムが accessKeyId を使用して OpenAPI を呼び出しているかを調査します。

  • インターネットエンドポイントから開始された AccessKey 呼び出しのクエリ:

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" IS NULL

    結果は次の例のようになります。

    image.png

    sourceipaddress が ECS インスタンスのパブリック IP アドレスであるかどうかを判断します。まず、アカウントの Elastic IP アドレス (EIP) とパブリック IP アドレスを取得します。次に、結果の sourceipaddress がお客様のものであるかどうかを確認します。EIP またはパブリック IP アドレスが ECS インスタンスに直接アタッチされている場合は、特定のインスタンスを特定してその構成を変更できます。

修復: AccessKey をインスタンス RAM ロールに置き換える

この問題を修正するには、「AccessKey の代わりに ECS RAM ロールを使用する」をご参照ください。詳細については、「AccessKey 漏洩の解決策」をご参照ください。