阿里雲access keyが漏洩したのはどうしたらいいですか手でRAMの役割を規範的に配置する権限を教えてください
多くの技術チームはこのような「真夜中の惊魂」に遭遇したことがある。突然、阿里雲の優勝連呼やメール通知を受けた。一部の資源は高周波異常に呼び出されている… 」
制御台にログインしてみると、請求書が爆発し、サーバーはハッカーによって大量に採掘された。
このすべての原因は、多くの場合、図が手間を省いて、コード、構成ファイル、GitHub公開倉庫に直接、最高の権限を持つものをハードコードしているからである
メインアカウントaccess key (AK/SK)
。メインアカウントのAKはあなたの家の万能鍵のようなもので、漏洩すると、クラウド全体の資産はハッカーに完全に開放されることに等しい。
今日は虚しい理論を使わず、でたらめを言わない。直接手で2つの防御線を作ります
第一に、AKが漏洩してから5分後に緊急止血する第二に、どのようにしてRAMの役割を使って、ハードコードされたAKの危険性を徹底的に根絶するか。
第一段階: 緊急止血! アクセサリが漏洩した5分間の緊急ストリーム
もしあなたがAKが漏洩したことを発見したり疑ったりしたら、躊躇しないで、すぐに以下の操作を実行して、1分以上遅れても本物の銀の損失である。
手順1:全ネットで関係AKを無効または削除する
すぐに阿里雲コンソールにログインし、右上隅のアバター $ \ right arrow $ をクリックして「access key管理」を選択します。
ヒントが漏洩したaccess keyを見つけます。
まず「無効にする」をクリックします。この時点で、このAKを使用するすべてのエクストラネット要求は瞬時に403をエラーにします。
コア生産業務に影響がないことを確認した後、思い切って「削除」をクリックする。
ステップ2: ハッカーが残した「裏口」を調べる
ハッカーがAKを入手した後、最初のことは、多くの場合、自動スクリプトを使用してリソースを一括作成することです。
ECSインスタンスリスト、軽量アプリケーションサーバリストに行って、各地域(北京、上海、深セン、香港、米国など) を切り替えて、不可解なサーバがあるかどうかを見てみましょう。あれば、すぐに完全に釈放します。
監査コンソールを操作して、過去24時間以内に、このAKがどのAPIを呼び出したかを調べて、ハッカーが手足を動かしたリソースを見逃しなくつかむ。
第二段階: 治本の策 -- RAMの役割と最小権限の仕様設定
AKを削除すると、古いプロジェクトコードが直接崩れてしまいます。OSSを読み書きしたり、他のクラウドサービスを呼び出したりする権限が必要だからです。
新しいメインアカウントAKを作ることはできません。正しいやり方は:
RAMロールを使用して、アリババクラウド上で実行されているプログラムを自動的に、キーなしで一時的な権限を取得します。
次に、「クラウドサーバECS上のプログラムがOSSストレージバケットを安全に読み書きできるようにする」を例に、実戦的な配置を行う。
手順1: RAMロールを作成する (idを作成する)
)
コンソールで検索し、「RAMアクセス制御」に入ります。
左侧のメニューの「ロール」をクリックします。
信頼できるエンティティタイプを「阿里雲サービス」に選択し、「次へ」をクリックします。
ロールタイプ: 「一般サービスロール」を選択します。
ロール名: ECS-OSS-Reader-Roleなど、わかりやすい名前を付けます。
受信サービスの選択: この役割をクラウドサーバに貼り付けるので、ここで「クラウドサーバ」 (ECS) を選択します。
「OK」をクリックしてください。
ステップ2: 正確な許可 (余分な権限を与えない)
作成したばかりのキャラクターは白い紙で、権限はありません。私たちは「最小権限の原則」に従って許可証を発行する必要があります。
ロールのリストで、先ほど作成したECS-OSS-Reader-Roleを見つけ、右側の「権限を追加」をクリックします。
許可範囲: 阿里雲アカウント全体を選択します (デフォルト)。
ポリシーの選択: OSSを読み取るだけの場合は、OSSを検索してチェックします。OSSを読み書きする必要がある場合: OSSを検索してチェックする。
「OK」をクリックしてください。
手順3: 役割をECSクラウドサーバにバインドする
このステップは非常に重要で、この「ライセンス」を特定のサーバの脳に貼り付けることに相当する。
クラウドサーバECSコンソールにアクセスして、コードを実行しているインスタンスを見つけます。
右側の「もっと」をクリックします。
ドロップダウンメニューで、作成したECS-OSS-Reader-Roleを選択します。
「OK」をクリックしてください。
第三段階: コード改造 -- ハードコードAKに完全に別れを告げる
今、あなたのサーバは合法的な身分を持っています。私たちはプロジェクトのコードを修正して、その数行をクソにしなければならない
Accessキーid
そして
Accessキーレット
完全に削除します。
阿里雲のSDKは
自動証憑ローテーション注入
機能。RAMロールがバインドされたECSでコードが実行されると、SDKはサーバ内の特別なローカルメタデータアドレスにアクセスします
http
: // 100.100.100.200/latest/meta-data/
全自動で一つを取得します
数時間ごとに自動的に期限切れになる一時Token
。
ハッカーがサーバーに潜入してこのTokenを盗んでも、数時間後には自動的に無効になり、永続的な裏口としては使えない。
Java SDKがOSSにアクセスする例:
古いコード (極度の危険❌):
Java
// このように書くのは厳禁です! コードに
公開コード管理プラットフォームに転送され、家族全員が瞬時に昇天した
String access keyid = "LTAI5tXXXXXX";
String accessKeySecret = "Pn7yXXXXXX";
OSS os sclient = newos sclientbuilder ().build(endpoint、access keyid、access keysecret);
新しいコード (クラウドネイティブセキュリティ戦略推奨):
Java
Import com.aliyun.oss.OSS;
Import com.aliyun.oss.OSSClientBuilder;
Import com.aliyun.credentials.Client;
Import com.Credentials.Mo dels.Config;
// 平文鍵は一切必要ありません。
Config credentialConfig = newconfig ();
CredentialConfig.setType("ecs_ram _ role"); // 指定された証明書タイプはECSにバインドされたRAMロールです
// 空白の場合、SDKは現在のサーバにバインドされているロール名を自動的に検索します
// CredentialConfig.setRoleName("ECS-OSS-Reader-Role");
Client credentialClient = new Client(credentialConfig);
// 臨時証明書を使用してOSSクライアントを構築する
OSS os sclient = new os sclientbuilder ().build(endpoint、credentialClient);
究極の防御線: 次の漏洩を防ぐにはどうすればいいですか?
絶対、絶対、絶対に公開コードベース (GitHub、Giteeなど) に平文AKを含む構成ファイルを提出しないでください。私有倉庫でもだめで、多くの漏洩は従業員が私有倉庫を誤って公開に変えたからだ。
.Gitignoreを上手に使う。プロジェクトの初期化時には、すぐにapplication-prod.yml、config.jsonなどの機密情報を含む構成ファイルを無視リストに追加します。
ローカル開発はどうしますか?ローカルコンピュータが確かにAKデバッグを必要としている場合は、あなたのコンピュータシステムの環境変数にakkを配置します (exたまらないa_cloud _ access _ key _ id = "xxx") コードの中で
System.getenv() で読み取ります。このようなコードはいつまでもきれいです。
安全で些細なことではない。今夜はあなたがメンテナンスしているプロジェクトを調べて、ハードコードされたメインアカウントAKをすべて殺しましょう!
