Alibaba CloudアカウントとResource Access Management (RAM)ユーザーの認証情報が漏洩した場合、クラウド リソースとビジネスにセキュリティリスクが生じる可能性があります。このトピックでは、認証情報の使用における一般的な間違いとその解決策について説明します。
Alibaba Cloudでは、一般的に次の種類の認証情報が使用されます。AccessKeyペアとSecurity Token Service (STS)トークン。詳細については、「認証情報」をご参照ください。
一般的な間違い
多くの開発者は、ビジネスコードにAccessKeyペアを直接ハードコードしています。コードリポジトリへの読み取り権限を持つすべての開発者が、AccessKey情報を入手できます。一部の開発者は、ビジネスコードをオープンソースコミュニティやコードホスティングサービスにアップロードすることさえあります。これはさらに大きなセキュリティリスクを引き起こします。
一部の開発者は、クライアントがAPI操作を直接呼び出せるように、クライアントコードにAccessKeyペアを記述しています。攻撃者はクライアントコードを逆コンパイルして、AccessKey情報を取得できます。
他の人と共有される技術ドキュメントまたは資料に、AccessKey情報が含まれています。
製品ドキュメントのサンプルコードに、AccessKey情報が含まれています。
開発者が管理権限を持たないAPI操作の応答に、AccessKey情報が含まれています。
セキュリティソリューション
開発プロセス中に、認証情報の不要な送信とハードコーディングを防止します。
Alibaba CloudアカウントのAccessKeyペアの使用を避ける
Alibaba Cloudアカウントは、リソースに対するすべての権限を持っています。Alibaba CloudアカウントのAccessKeyペアが漏洩した場合、大きなセキュリティリスクが生じる可能性があります。Alibaba CloudアカウントのAccessKeyペアを使用しないことをお勧めします。
コードへの認証情報のハードコーディングを避ける
コードに認証情報をハードコーディングする代わりに、環境変数に認証情報に関する情報を設定します。次の例は、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID
と ALIBABA_CLOUD_ACCESS_KEY_SECRET
にAccessKeyペアを設定する方法を示しています。詳細については、「Linux、macOS、Windows での環境変数の設定」をご参照ください。
サンプルコード:
public static com.aliyun.ecs20140526.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // AccessKey ID を環境変数から取得
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // AccessKey Secret を環境変数から取得
config.endpoint = "ecs.cn-shanghai.aliyuncs.com";
return new com.aliyun.ecs20140526.Client(config);
}
KMS を使用して認証情報を管理する
Key Management Service (KMS) を使用すると、認証情報を管理できます。詳細については、「概要」をご参照ください。KMS のSecrets Managerを使用して、Secrets ManagerでホストされているRAMシークレットを定期的に、または即座にローテーションできます。アプリケーションにRAMシークレット プラグインをインストールした後、RAMシークレットに保存されているAccessKeyペアを動的に取得できます。これにより、コードへのAccessKey情報のハードコーディングが回避されます。詳細については、「RAM シークレットの管理と使用」をご参照ください。
インスタンスRAMロールを使用する
Elastic Compute Service (ECS)インスタンス、エラスティックコンテナインスタンス、またはContainer Service for Kubernetes (ACK)クラスターのワーカーノードに、インスタンスRAMロールをアタッチできます。その後、ECSのメタデータサーバーを使用してSTSトークンを取得できます。これにより、コードへのAccessKey情報のハードコーディングが回避され、AccessKeyペアの漏洩のリスクが軽減されます。詳細については、「インスタンス RAM ロール」、「API オペレーションを呼び出してインスタンス RAM ロールを使用する」、および「Pod への RAM ロールの割り当て」をご参照ください。
RRSA機能を使用する
ACK では、複数のサービスがクラスターにデプロイされ、ワーカーノードに異なるサービスのPodが含まれる場合があります。マルチテナントシナリオでは、サービスは ECS のメタデータサーバーに直接アクセスし、ワーカーノードに割り当てられた RAM ロールの STS トークンを取得できます。これにより、権限の漏洩が発生します。RAM Roles for Service Accounts (RRSA)機能は、Pod に対するきめ細かい権限制御を実現し、OpenID Connect (OIDC)に関する情報を環境変数に自動的に追加します。Alibaba Cloud Credentialsツールを使用して、STSトークンを一時的なアクセストークンとして取得できます。詳細については、「RRSA を使用してさまざまな Pod にさまざまなクラウド サービスへのアクセスを許可する」をご参照ください。
Alibaba Cloud Credentialsツールを使用する
Alibaba Cloud Credentialsツールは、認証情報の取得と管理のための機能をカプセル化しています。さらに、デフォルトの認証情報プロバイダーチェーンは、認証情報に関する情報のハードコーディングを効果的に防ぎます。詳細については、「アクセス認証情報の管理」をご参照ください。
Security Center の AccessKey 漏洩検知機能を使用する
Security Center は、GitHub に保存されているソースコード内の Alibaba Cloud アカウントと RAM ユーザーの AccessKey ペアをリアルタイムでチェックします。Security Center が AccessKey ペアの漏洩を検知した場合、Security Center はアラートを生成します。AccessKey ペアの漏洩イベントをできるだけ早く確認して処理することをお勧めします。詳細については、「AccessKey ペアの漏洩の検知」をご参照ください。
AccessKeyペアの漏洩に対処する
AccessKeyペアの漏洩
AccessKeyペアを無効化または削除する
AccessKeyペアの漏洩が発生した場合、まずAccessKeyペアを無効化または削除し、新しいAccessKeyペアを使用します。詳細については、「RAM ユーザーの AccessKey ペアを無効にする」および「RAM ユーザーの AccessKey ペアを削除する」をご参照ください。
AccessKeyペアイベントをクエリする
ActionTrail の AccessKey ペア監査機能を使用して、AccessKey ペアの基本情報、アクセスされた Alibaba Cloud サービス、関連 IP アドレス、およびリソースを照会できます。これにより、AccessKey ペアの使用状況を追跡し、AccessKey ペアの漏洩などの例外を処理できます。
STSトークンの漏洩
STSトークンは一時的なアクセストークンであり、有効期間は15分から12時間です。したがって、STSトークンの漏洩も大きなセキュリティリスクにつながる可能性があります。次の手順を実行して、STSトークンを無効にすることができます。
- Alibaba Cloudアカウントを使用して、RAMコンソール にログオンします。
- RAMロールからすべてのポリシーをデタッチします。
詳細については、「RAM ロールから権限を取り消す」をご参照ください。
- RAMロールを削除します。
詳細については、「RAM ロールの削除」をご参照ください。
RAMロールが削除されると、期限切れでないSTSトークンは無効になります。
削除されたRAMロールを引き続き使用する場合、同じ名前のRAMロールを作成し、新しいRAMロールに同じポリシーをアタッチします。
参考資料
詳細については、以下のトピックをご参照ください。