AWS で CUR を有効化する
DoiT でのオンボーディングを開始する前に、AWS アカウントで Cost and Usage Reports(CUR)を有効化することを推奨します。これにより、AWS の使用状況データの包括的なコピーを確保できます。CUR を有効化すること自体に料金はかかりません。Amazon S3 バケットに請求データを保存する費用は、標準の Amazon S3 料金で課金されます。
サポートされている形式
以下の CUR ファイルタイプをサポートしています。
- CSV
- Parquet
CUR を作成し、バックフィルをリクエストする
過去 12 か月分のデータをリクエストするには:
-
管理者権限と請求権限を持つ IAM ユーザー、または組織の管理アカウント(組織の支払アカウント)のルートユーザーとして、AWS Billing and Cost Management コンソール にサインインします。
-
次のハイパーリンクをクリックして、当社の AWS CloudFormation スタックをデプロイします: DoiT-CUR-Backfill-Stack。
-
スタックへの入力として、スタック名とバケット名を指定します。これにより、必要なリソースがすべて作成され、バックフィルがリクエストされます。
バックフィルを検証する
履歴データのバックフィルの完了には時間がかかります。バケットを確認する前に 1~24 時間お待ちいただくことを推奨します。
-
AWS S3 Console にサインインします。
-
レポートの受け取り用に作成したバケットを選択します。
AWS はレポートを REPORT-PREFIX/REPORT-NAME フォルダに保存します。レポートは billing/aws-usage-report フォルダ配下にあるはずです。
AWS は同一のレポート日付範囲内のすべてのレポートを同じ billing/aws-usage-report/YYYYMMDD-YYYYMMDD フォルダに配信します。詳細は Amazon S3 organization and naming conventions を参照してください。
Cost data latency も参照してください。
DoiT-CUR-Backfill-Stack YAML テンプレート
この CloudFormation YAML テンプレートは、AWS Cost and Usage Report(CUR)を管理・自動化し、コストアロケーションタグのバックフィルプロセスを開始するための AWS リソースを作成します。
パラメータ
BucketName- Type:
STRING - Description: AWS Cost and Usage Report を保存する Amazon S3 バケット名を指定します。
- Type:
リソース
-
MyCURReportBucket- Type:
AWS::S3::Bucket - Description: AWS Cost and Usage Report を保存する Amazon S3 バケットを作成します。
- Properties:
BucketName: S3 バケット名を指定します。AccessControl: バケットのアクセス制御を BucketOwnerFullControl に設定します。VersioningConfiguration: バケットのバージョニングを構成します(現在は一時停止)。
- Type:
-
CURReportBucketPolicy- Type:
AWS::S3::BucketPolicy - Description: billingreports サービスへのアクセスを許可するため、CUR レポートバケットにバケットポリシーをアタッチします。
- Properties:
Bucket: 作成した S3 バケットを参照します。PolicyDocument: バケットポリシーの権限を定義します。
- Type:
-
CURReport- Type:
AWS::CUR::ReportDefinition - Description: AWS Cost and Usage Report の設定を定義します。
- Depends on:
CURReportBucketPolicy - Properties:
ReportName: CUR レポート名を指定します。TimeUnit: レポートの時間単位をHOURLYに設定します。Format: レポートの形式をテキストまたは CSV に設定します。Compression: レポートの圧縮方式として GZIP を指定します。AdditionalSchemaElements: レポートにリソース使用状況の詳細を含めます。S3Bucket: レポートの保存先 S3 バケットを参照し ます。S3Region: S3 バケットのリージョンを指定します。S3Prefix: レポートファイルのプレフィックスを定義します。RefreshClosedReports: クローズ済みレポートのリフレッシュを有効化します。ReportVersioning: 新しいレポートバージョンを作成するよう指定します。
- Type:
-
CostAllocationTagBackfillFunction- Type:
AWS::Lambda::Function - Description: コストアロケーションタグのバックフィルプロセスを開始するための Lambda 関数です。
- Depends on:
CURReport - Properties:
Handler: Lambda 関数のエントリポイントを指定します。Role: Lambda 関数の IAM ロールを指定します。Code: Lambda 関数のコードを含み、必要な依存関係(boto3)をインストールします。Runtime: 実行環境を Python 3.8 に設定します。
- Type:
-
LambdaExecutionRole- Type:
AWS::IAM::Role - Description: Lambda 関数用の IAM ロールです。
- Properties:
AssumeRolePolicyDocument: ロールの信頼ポリシーを指定します。Policies: Lambda 実行ロールの権限を定義します。
- Type:
-
BackfillCustomResource- Type:
Custom::CostAllocationTagBackfill - Description: コストアロケーションタグのバックフィルプロセスをトリガーするカスタムリソースです。
- Properties:
ServiceToken: バックフィルプロセスを実行する Lambda 関数を参照します。
- Type:
出力
BackfillStatus- Description: コストアロケーションタグのバックフィルプロセスのステータスです。
- Value: カスタムリソースからのレスポンスを参照します。
次のステップ
この CloudFormation YAML テンプレートにより、AWS Security Hub Findings がトリガーされる場合があります。たとえば、S3 バケットへのアクセスに Secure Socket Layer を要求すべき、S3 バケットに Lifecycle 設定が必要、などです。これらの検出事項は、次の対応で是正できます。
-
S3 バケットへのアクセスで Secure Sockets Layer(SSL)を必須化する。
-
ライフサイクルポリシーを構成する。