クラウドでは、ストレージ、コンピューティング、その他のサービスを使用する際に料金を支払います。独自のサーバーをセットアップする必要はありません。ただし、欠点は、誤ってウォレットよりも多くのお金を使う可能性があることです。これは、着信トラフィックに合わせて自動的にスケーリングするサーバーレスソリューションでは特に困難です。
誤って高価なVMを放置しておくと、ラムダ関数が制御不能になり、予期しないスコアが発生する可能性があります。
この記事では、請求の仕組みと、予期しない請求書が表示されないようにする方法について説明します。
中小企業、小額の請求書
この記事は、個人的なプロジェクトと比較的小さなアカウントを持つ小さな会社についてです。一部の大企業は、3,000ドルの違いに気付かない場合があります。
完璧な解決策はありません
残念ながら、ここには完璧な解決策はありません。Corey Quinnがポッドキャストで説明して いるように、AWSの課金システムは数時間遅れており、場合によっては最大24時間または48時間遅れています。その結果、クォータ超過アラートは、重大なオーバーランが発生してから数時間または数日後にトリガーされる可能性があります。アラートは依然として不要なコストを防ぐための優れたツールですが、たとえば、機械学習ワークショップの後で高価なEC2インスタンスを停止しなかった場合など、数日間何かを忘れた場合に限ります。
予期しない費用から保護するためにどれだけの時間を費やすかはあなた次第ですが、予算アラートの設定に2分を費やすことを強くお勧め します。
防御メカニズム
予期しない請求から保護するための多くのメカニズムがあります。セキュリティ、アラート、修正アクション、および可視性の向上を検討してください。
1.多要素認証でアカウントを保護します
これは、新しいAWSアカウントを作成するときに最初に設定する必要があるものです。
これは、攻撃者に対する追加のバリアを提供するMulti-Factor Authentication(MFA)の設定に関するAWSの 公式ガイドです。
2.予算アラート
これは、新しいAWSアカウントを作成するときに構成する2番目のことです。
予算アラートは、支出を追跡するための最も一般的な方法です。たとえば、制限を超えたことを通知するメールを受け取ります。あなたは、さらに使用して、あなたの通知をカスタマイズすることができます アマゾンSNSや AWSチャットボットを。
これは 、最初の予算アラートの作成に関する短いビデオ(52秒)です。 Ryan Lewisは、詳細、予算アラートの詳細、およびそれらをカスタマイズするための多くの方法を含む、より長いビデオを作成しました。
すでにCDKを使用している場合は、aws-budget-notifierパッケージが 最適です。..。
どれくらいから始めますか?
現在の費用よりわずかに高く、問題のない金額から始めます。たとえば、10ドル。すでに数か月間実行されているワークロードがある場合は、平均を取り、50%を追加します。
また、しきい値が異なる複数の請求アラートを設定することをお勧めし ます。
- 便利な警告:あなたが我慢しても構わないと思っている金額ですが、それから請求書を調べてください。
- 危険な警告:あなたはもはや快適に感じず、できるだけ早くサービスを終了したいと思っています。快適な金額が$ 10の場合、これは$ 100になる可能性があります。
- 重大な警告:この金額で、あなたのアカウントに核爆弾を投下したいという願望がすでにあります。快適な金額が10ドルの場合、これは500ドルになる可能性があります。このアラートに特別な予算アラートまたはページャーアラートを添付して、EC2インスタンスを自動的に停止したり、ウェイクアップしたりできます。
事前定義されたしきい値に加えて、AWS Service Cost AnomalyDetectionを試すこともできます 。
緊急核爆弾
SNSに通知を送信できるため、aws-nukeを開始するラムダ関数を実行 して、アカウント内のすべてのインフラストラクチャを破棄できます。これを本番アカウントで使用しないでください。詳細については、GitHubリポジトリを確認してください 。
3.予算措置
AWSは最近、 予算アクションを導入しました。これは予算アラートの拡張機能であり、予算制限を超えたときに特定のアクションがトリガーされます。以下に示すように、電子メール通知の送信に加えて、「EC2インスタンスの起動を防止する」などのカスタムIAMポリシーを適用したり、AWSにEC2およびRDSインスタンスを閉じさせたりできるようになりました。
4.モバイルアプリケーション
AWS Mobile Consoleを使用すると、3〜5回のクリックですべての費用を確認できます。
モバイルアプリの2つの画面は次のとおりです。アプリ
を使用するには 、アプリが費用を表示するために必要な権限のみを取得する専用ユーザーを 設定する必要があります。 これは、アプリケーションに読み取りアクセスとクラウドウォッチ通知を与えるIAMポリシーです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ce:DescribeCostCategoryDefinition", "ce:GetRightsizingRecommendation", "ce:GetCostAndUsage", "ce:GetSavingsPlansUtilization", "ce:GetReservationPurchaseRecommendation", "ce:ListCostCategoryDefinitions", "ce:GetCostForecast", "ce:GetReservationUtilization", "ce:GetSavingsPlansPurchaseRecommendation", "ce:GetDimensionValues", "ce:GetSavingsPlansUtilizationDetails", "ce:GetCostAndUsageWithResources", "ce:GetReservationCoverage", "ce:GetSavingsPlansCoverage", "ce:GetTags", "ce:GetUsageForecast", "health:DescribeEventAggregates", "cloudwatch:DescribeAlarms", "aws-portal:ViewAccount", "aws-portal:ViewUsage", "aws-portal:ViewBilling" ], "Resource": "*" } ] }
権限は3つのグループに分けられます。
- CloudWatch Cost Explorer(で始まるすべて
ce:
)。現在および予測されるコストに関する詳細情報。
- CloudWatch (
cloudwatch:DescribeAlarms
). , .
- (,
aws-portal:
health:
). .
5.
誤ってアクセスキーをパブリックリポジトリにアップロードした場合 、攻撃者はアカウントで高価なEC2インスタンスを起動し、それらを使用して、たとえばビットコインをマイニングする可能性があります。所有者が請求の詳細でそれらに気付かないように、小さなインスタンスが十分に活用されていない地域に隠れているケースの報告があります。 AWS Secrets Manager
を使用して、コードからパスワードやその他のシークレットをクリアできます 。 このAWSガイドに従って、最初のシークレットを作成してください 。次に、公式のAWSクライアントの1つ(Pythonの場合はboto3)を使用してシークレットを要求することにより、コードベースのシークレットを置き換えます 。
import boto3
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='replace-me')
secret = response['SecretString']
各シークレットの費用は月額$ 0.40で、10,000API呼び出しの場合は$ 0.05であることに注意してください。
サポートサービス
予期しない請求書を受け取った場合は、状況の原因となったアプリケーションをすべて停止し、必要に応じてアクセスキーを変更して、AWSサポートに連絡してください。これ がクリックする場所の20秒のビデオです。
サポートチケットを送信するためのステップバイステップの説明:
- 右上隅にある[サポート]ボタンをクリックして、[サポートセンター]を選択します
- オレンジ色の[ケースを作成]ボタンを押します
- アカウントと請求を選択します
- タイプとして「請求」を選択し、カテゴリとして「支払いの問題」を選択します
- すべての詳細を入力して送信します
予想外の請求に対して払い戻された人もいますが、あまり期待しないでください。
結論
最初に行うことは、MFAと 予算アラートを設定することです 。次に、予算アクションなどのより複雑な操作を調べて、支出が急増した場合にアカウントを凍結できます。
シークレットとアクセスキーがパブリックリポジトリに保存されないようにするには、それらをAWS SecretsManagerに保存します 。