検索

2.6. Athena のアカウントアクセスの有効化

download PDF

Hybrid Committed Spend が使用する IAM ポリシーおよびロールを作成します。この設定では、保存されている情報へのアクセスのみが提供されます。

手順

  1. AWS Identity and Access Management (IAM) コンソールから、設定する Athena Lambda 関数用の IAM ポリシーを作成します。

    1. JSON タブを選択し、JSON ポリシーテキストボックスに以下の内容を貼り付けます。

      {
      	"Version": "2012-10-17",
      	"Statement": [
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"athena:*"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"glue:CreateDatabase",
                  	"glue:DeleteDatabase",
                  	"glue:GetDatabase",
                  	"glue:GetDatabases",
                  	"glue:UpdateDatabase",
                  	"glue:CreateTable",
                  	"glue:DeleteTable",
                  	"glue:BatchDeleteTable",
                  	"glue:UpdateTable",
                  	"glue:GetTable",
                  	"glue:GetTables",
                  	"glue:BatchCreatePartition",
                  	"glue:CreatePartition",
                  	"glue:DeletePartition",
                  	"glue:BatchDeletePartition",
                  	"glue:UpdatePartition",
                  	"glue:GetPartition",
                  	"glue:GetPartitions",
                  	"glue:BatchGetPartition"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"s3:GetBucketLocation",
                  	"s3:GetObject",
                  	"s3:ListBucket",
                  	"s3:ListBucketMultipartUploads",
                  	"s3:ListMultipartUploadParts",
                  	"s3:AbortMultipartUpload",
                  	"s3:CreateBucket",
                  	"s3:PutObject",
                  	"s3:PutBucketPublicAccessBlock"
              	],
              	"Resource": [
                  	"arn:aws:s3:::CHANGE-ME*"1
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"s3:GetObject",
                  	"s3:ListBucket"
              	],
              	"Resource": [
                  	"arn:aws:s3:::CHANGE-ME*"2
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"s3:ListBucket",
                  	"s3:GetBucketLocation",
                  	"s3:ListAllMyBuckets"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"sns:ListTopics",
                  	"sns:GetTopicAttributes"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"cloudwatch:PutMetricAlarm",
                  	"cloudwatch:DescribeAlarms",
                  	"cloudwatch:DeleteAlarms",
                  	"cloudwatch:GetMetricData"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"lakeformation:GetDataAccess"
              	],
              	"Resource": [
                  	"*"
              	]
          	},
          	{
              	"Effect": "Allow",
              	"Action": [
                  	"logs:*"
              	],
              	"Resource": "*"
          	}
      	]
      }
      1 1 1 2
      両方の場所の CHANGE-ME* を、手順 2.2 で設定した S3 バケットの ARN に置き換えます。
    2. ポリシーに名前を付け、ポリシーの作成を完了します。次の手順に必要なため、AWS IAM コンソールを開いたままにします。
  2. AWS IAM コンソールで、新規の IAM ロールを作成します。

    1. 信頼できるエンティティーのタイプには、AWS service を選択します。
    2. Lambda を選択します。
    3. 設定したばかりの IAM ポリシーを割り当てます。
    4. ロール名と説明を入力し、ロールの作成を完了します。
  3. AWS Secrets Manager にログイン情報を保存し、作成したロールに追加します。

    1. Secret type: Other type of secret を選択します。
    2. Red Hat Hybrid Cloud Console client_id のキーを作成します。
    3. Red Hat Hybrid Cloud Console client_secret のキーを作成します。
    4. ユーザー名とパスワードの値を適切なキーに追加します。
    5. Continue をクリックしてから、名前を入力し、シークレットを保存します。
    6. Lambda 関数用に作成したロールを更新します。以下のコードを追加して、AWS Secrets Manager に保存されているシークレットを参照します。

      {
          "Sid": "VisualEditor3",
          "Effect": "Allow",
          "Action": [
              "secretsmanager:GetSecretValue",
              "secretsmanager:DescribeSecret"
          ],
          "Resource": "*"
      }

2.6.1. レポート生成用の Athena 設定

Cost Management にフィルタリング処理したデータエクスポートを提供するように Athena を設定します。

次の設定では、保存されている追加の情報へのアクセスのみが提供されます。他のものは提供しません。

手順

  1. AWS S3 コンソールで、手順 2.2 で設定した S3 バケットに移動します。次に、設定したデータエクスポートによって作成されるパスにある crawler-cfn.yml ファイルに移動します。例: {bucket-name}/{S3_path_prefix}/{export_name}/crawler-cfn.yml.crawler-cfn.ymlObject URL をコピーします。
  2. AWS コンソールの Cloudformation から、新規リソースでスタックを作成します。

    1. 既存のテンプレートを選択します。
    2. Specify Template を選択します。
    3. Template Source: Amazon S3 URL を選択します。
    4. 以前にコピーしたオブジェクト URL を貼り付けます。
  3. 名前を入力し、Next をクリックします。
  4. I acknowledge that AWS Cloudformation might create IAM resources をクリックして Submit をクリックします。

2.6.2. Athena クエリーの構築

Red Hat の経費のデータエクスポートをクエリーし、フィルタリングした経費のレポートを作成する Athena クエリーを作成します。

たとえば、Red Hat の支出をフィルタリングする場合は、サンプルスクリプトに含まれているクエリーだけが必要になることがあります。さらに高度な機能が必要な場合は、カスタムクエリーを作成します。RHEL メータリングを使用している場合は、RHEL サブスクリプションに固有のデータを返すようにクエリーを調整する必要があります。以下の手順では、RHEL サブスクリプションクエリーを作成する方法を説明します。

Red Hat 支出の Athena クエリーの例

SELECT *
    FROM <your_export_name>
    WHERE (
            bill_billing_entity = 'AWS Marketplace'
            AND line_item_legal_entity like '%Red Hat%'
        )
        OR (
            line_item_legal_entity like '%Amazon Web Services%'
            AND line_item_line_item_description like '%Red Hat%'
        )
        OR (
            line_item_legal_entity like '%Amazon Web Services%'
            AND line_item_line_item_description like '%RHEL%'
        )
        OR (
            line_item_legal_entity like '%AWS%'
            AND line_item_line_item_description like '%Red Hat%'
        )
        OR (
            line_item_legal_entity like '%AWS%'
            AND line_item_line_item_description like '%RHEL%'
        )
        OR (
            line_item_legal_entity like '%AWS%'
            AND product_product_name like '%Red Hat%'
        )
        OR (
            line_item_legal_entity like '%Amazon Web Services%'
            AND product_product_name like '%Red Hat%'
        )
        AND year = '2024'
        AND month = '07'

AWS アカウント:

  1. エディタータブから Amazon Athena に移動します。
  2. Data source メニューから、AwsDataCatalog を選択します。
  3. Database メニューからデータのエクスポートを選択します。データエクスポート名の前に athenacurcfn_ が追加され、その後にデータエクスポート名が追加されます。例: {your_export_name}
  4. 以下のサンプルクエリーを Query フィールドに貼り付けます。your_export_name の値は、データエクスポート名に置き換えます。

    SELECT column_name
    FROM information_schema.columns
    WHERE table_name = '<your_export_name>'
    AND column_name LIKE 'resource_tags_%';
  5. Run をクリックします。このクエリーの結果は、データセットのタグに関連するすべての列を返します。
  6. RHEL タグに使用される列と一致するタグ列をコピーします。
  7. 以下のクエリー例に貼り付けます。your_export_name は、前の手順でコピーした tags 列に、yearmonth はクエリーする年と月に置き換えます。結果として、RHEL サブスクリプションに対して適切にタグ付けされた EC2 インスタンスが返されます。このクエリーをコピーして保存し、今後 Lambda 関数で使用します。

    SELECT *
            FROM <your_export_name>
            WHERE (
                line_item_product_code = 'AmazonEC2'
                AND strpos(lower(<rhel_tag_column_name>), 'com_redhat_rhel') > 0
            )
            AND year = '<year>'
            AND month = '<month>'

2.6.3. Athena の Lambda 関数の作成

Red Hat 関連の経費のデータエクスポートをクエリーし、フィルタリングされた経費のレポートを作成する Lambda 関数を作成する必要があります。

手順

  1. AWS コンソールで Lambda に移動し、Create function をクリックします。
  2. Author from scratch をクリックします。
  3. 関数の名前を入力します。
  4. Runtime メニューから、利用可能な Python の最新バージョンを選択します。
  5. Architecture メニューから x86_64 を選択します。
  6. Permissions で、作成した Athena ロールを選択します。
  7. Lambda 関数の一部としてビルドしたクエリーを追加するには、Create function をクリックして、進捗を保存します。
  8. 関数の Code タブから、この スクリプト を貼り付けます。以下の行を探します。

    your_integration_external_id
    Enabling account access for cost and usage consumption 手順でコピーしたインテグレーション UUID を入力します。
    bucket
    フィルタリングしたデータのレポートを保存するためのバケットの作成 の手順で、フィルタリングされたレポートを保存するために作成した S3 バケットの名前を入力します。
    database
    Building your Athena クエリー ステップで使用するデータベース名を入力します。
    export_name
    コストデータを保存するための AWS S3 バケットを作成したときのデータエクスポートの名前を入力します。
  9. where 句を置き換えて、デフォルトのクエリーをカスタムクエリーに更新します。次に例を示します。

    # Athena query
    query = f"SELECT * FROM {database}.{export_name} WHERE (line_item_product_code = 'AmazonEC2' AND strpos(lower(<rhel_tag_column_name>), 'com_redhat_rhel') > 0) AND year = '{year}' AND month = '{month}'"
  10. Deploy をクリックして関数をテストします。

2.6.4. レポートファイルを Post するための Lambda 関数の作成

フィルタリングしたレポートを Red Hat がアクセスできるバケットに投稿するには、2 番目の Lambda 関数を作成する必要があります。

手順

  1. AWS コンソールの Lambda に移動し、Create function をクリックします。
  2. Author from scratch をクリックします。
  3. 関数の名前を入力します。
  4. Runtime メニューから、利用可能な Python の最新バージョンを選択します。
  5. アーキテクチャーとして x86_64 を選択します。
  6. Permissions で、作成した Athena ロールを選択します。
  7. Create Function をクリックします。
  8. この スクリプト を関数に貼り付け、次の行を置き換えます。

    secret_name = "CHANGEME"
    シークレット名を入力します。
    bucket = "<your_S3_Bucket_Name>"
    フィルタリングしたデータのレポートを保存するためのバケットの作成 の手順で、フィルタリングされたレポートを保存するために作成した S3 バケットの名前を入力します。
  9. Deploy をクリックして関数をテストします。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.