Tìm kiếm sự kiện EIP bị release bằng cách sử dụng Athenav

Tìm kiếm sự kiện EIP bị release bằng cách sử dụng Athena

Share Everywhere

Table of contents

Bài toán:

  • Bạn muốn sử dụng Athena để query log CloudTrail tìm sự kiện EIP bị release: https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html

=> Vấn đề:

+) có thể thực hiện query giá trị requestParameters theo event name là ReleaseAddress. Tuy nhiên, event này không bao gồm địa chỉ IP, mà chỉ có giá trị allocationId. Vì vậy, để có thể biết được IP nào bị xóa, lại phải tiếp tục thực hiện query giá trị responseElements theo event name là AllocateAddress để xem giá trị publicIp là gì, rồi kiểm tra xem publicIp đó có phải EIP mà KH muốn tìm kiếm không.

>> Redshift – xem cluster resize status

>> Sử dụng toàn bộ đám mây sẽ mở ra một thế giới khả năng mới

+) giá trị requestParameters và responseElements đang được define là string, nhưng khi select, trả về lại có dạng json object dạng như sau:
– requestParameters của event ReleaseAddress:

{"allocationId":"eipalloc-0138adfc9be9cd0d9","networkBorderGroup":"ap-northeast-1"}

– responseElements của event AllocateAddress:

{"requestId":"6cc2f1e5-738c-48b4-96ad-b57b068349ac","publicIp":"xx.79.xx.21","domain":"vpc","allocationId":"eipalloc-0138adfc9be9cd0d9","publicIpv4Pool":"amazon","networkBorderGroup":"ap-northeast-1"}

Vì vậy, việc trích xuất giá trị allocationId, rồi lại map lại để tìm ra publicIp là khá khó khăn.

Cách thực hiện:

Cách 1:

Khi column có kiểu chuỗi như là responseElements/requestParameters mà bạn đã chỉ ra đang được bao gồm trong record, thì sẽ có các cách có thể xem xét như sử dụng LIKE [1] bằng câu lệnh where để chỉ định record bao gồm chuỗi kí tự xác định, hoặc là sử dụng function json_parse và json_extract_scalar [2] để truy xuất element cần thiết từ giá trị đã phân tích/parse từ string thành json rồi chỉ định.

Cụ thể thì cũng chỉ là một ví dụ, nhưng ví dụ có cách chỉ định câu lệnh where bằng cách như dưới đây.

# Truy xuất cái đang bao gồm chuỗi kí tự cụ thể bằng LIKE

ーー

select * from “tbl_name”
where “eventname” = ‘AllocateAddress’
and “responseElements” like ‘%XX.XX.XX.XX%’
limit 1

ーー

# Phân tích/parse string thành json

ーー

select * from “tbl_name”
where “eventname” = ‘AllocateAddress’
and json_extract_scalar(json_parse(“responseElements”),’$.publicIp’) = ‘XX.XX.XX.XX’
limit 1

ーー

Vì vậy, chúng tôi sẽ đánh giá cao nếu bạn có thể thử các cách trên để xem liệu có thể đáp ứng được mong muốn của bạn hay không.

Tài liệu tham khảo:

[1] SELECT – Amazon Athena
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/select.html
ーー
[NOT] LIKE value – 指定したパターンを検索します。次の例のように、パーセント記号 (%) をワイルドカード文字として使用します。
ーー

[2] 6.12. JSON Functions and Operators — Presto 0.217 Documentation
https://prestodb.io/docs/0.217/functions/json.html
ーー
json_parse(string) → json
Returns the JSON value deserialized from the input JSON text. This is inverse function to json_format():
ーー
json_extract_scalar(json, json_path) → varchar
Like json_extract(), but returns the result value as a string (as opposed to being encoded as JSON). The value referenced by json_path must be a scalar (boolean, number or string):
ーー

=> Cách làm:

Để tìm kiếm sự kiện release EIP trên Athena, bạn cần tìm kiếm theo CloudTrail event name [ReleaseAddress].

Tuy nhiên tại event [ReleaseAddress] chỉ có thông tin [Allocation ID] của EIP, mà không có thông tin IP Address của EIP.

Vì vậy bạn cũng cần phải tìm kiếm thông tin [Allocation ID] theo IP address của EIP mà đã bị release, cụ thể cách làm như sau:

・Step 1: Tìm kiếm thông tin [Allocation ID] của EIP theo IP Address

Bạn có thể tham query sample dưới đây để tìm kiếm thông tin [Allocation ID]

 
select * from "cloudtrail_logs" 
where "eventname" = 'AllocateAddress' and eventtime < 'yyyy-mm-dd'
and json_extract_scalar(json_parse("responseElements"),'$.publicIp' ) = 'xx.xxx.xxx.xx'
limit 1

・Step 2: Tìm kiếm sự kiện release EIP theo [Allocation ID] của EIP.

Từ allocationId (Allocation ID) mà đã get được ở Step 1, bạn hãy tham khảo query sample dưới đây để tìm kiếm sự kiện release EIP nhé

 
select * from "cloudtrail_logs" 
where "eventname" = 'ReleaseAddress' and eventtime < 'yyyy-mm-dd'
and json_extract_scalar(json_parse("requestParameters"),'$.allocationId' ) = 'eipalloc-xxxxxxxxxxxxxxxxx'
limit 1

Lưu ý: Bạn hãy thay đổi giá trị event time [yyyy-mm-dd] thành thời điểm tìm kiếm mà bạn mong muốn

Cách 2:

Hello,

Thank you for contacting Premium Support. apologies for the delay in responding.

My name is Nonsikelelo and I will be assisting you with your case today.

I believe you were trying to query a table you created in your cloud trail, using the documents you stated in your case description. You are also looking for an Athena query that will show you which EIP address has been released. If I have misinterpreted the situation, please correct me.

I looked at your situation and decided to duplicate it in my environment. First, I created the table using the CloudTrail document you mentioned. Then I assigned and elastic IP address in my ec2 and released it. I then went to Athena and used the first select statement you used to query the data. The query was successful but the Elastic IP address that I released was not shown. eventually I was able to get the correct results after using the two methods mentioned below.

Solution to the problem:

you can track your API calls using CloudTrail event history:

  • 1.    Open the CloudTrail console.
  • 2.    Choose Event history.
  • 3.    For Filter, select Event name from the dropdown list.
  • 4.    For Enter event name, enter the event type that you want to search for. Then, choose the event type.
  • 5.    For Time range, enter the desired time range that you want to track the event type for.
  • 6.    Choose Apply.

==============================

You can also track using amazon Athena queries, example:

WITH dataset AS (
        SELECT eventsource,
                eventname,
                useridentity.sessioncontext.attributes.creationdate,
                useridentity.sessioncontext.sessionissuer.arn,
                requestParameters,
                responseElements
        FROM cloudtrail_logs12
        WHERE eventname = ‘AllocateAddress’
        ORDER BY eventsource,
                eventname
)
SELECT json_extract(responseElements, ‘$.allocationId’) id,
        json_extract(responseElements, ‘$.publicIp’) AS ip
FROM dataset

===========================

On the reference section I have provided the AWS document and the video that will help you walk through the two processes mentioned above [1][2]

Things you should always look out before running the query:

1.      Make sure that the Eventname is correct, please check the EC2 API documentation to get the correct API call and name for allocating EIP [3]

2.      Make sure that the partitions loaded for the table you are using, has event name you are looking for. If you know the time range when you performed those operations, you can then check if the partitions for that day are present in s3 and also loaded to catalog. If they are not loaded, use ALTER TABLE ADD PARTITION to load the partitions.

3.      The CloudTrail events usually take around 15-20 minutes to get populated after API call is made.

Hopefully I was able to provide helpful information regarding the problem. Please let me know if you have any additional questions, feel free to add them to the next correspondence and I would be glad to assist you.

==Reference==

[1] https://aws.amazon.com/premiumsupport/knowledge-center/cloudtrail-search-api-calls/
[2] https://aws.amazon.com/premiumsupport/knowledge-center/cloudtrail-track-api/  (There is also a short video on your right hand side, of the document)
[3] https://docs.aws.amazon.com/AWSEC2/latest/APIReference/making-api-requests.html
[4] https://docs.aws.amazon.com/AWSEC2/latest/APIReference/using-cloudtrail.html
[5]https://docs.amazonaws.cn/en_us/athena/latest/ug/extracting-data-from-JSON.html

Tìm kiếm sự kiện EIP bị release bằng cách sử dụng Athena

 

Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.

Bài viết liên quan

Khám phá FinOps

Khám phá FinOps - công nghệ đám mây

Nhiều doanh nghiệp ngày nay lựa chọn chuyển sang công nghệ đám mây với hi vọng đạt được lợi thế cạnh tranh so với đối thủ nhờ tiềm năng về hiệu quả cao và tiết kiệm chi phí hơn của công nghệ này.
Microservices Roadmap

Microservices Roadmap

- Kafka, RabbitMQ, Amazon SQS: Efficient and reliable message brokers for seamless communication between microservices.
The Data Analyst Roadmap

The Data Analyst Roadmap

**Database Knowledge**: Gain proficiency in working with databases like MySQL, PostgreSQL, or MongoDB.
Architectural patterns in software design

Architectural patterns in software design

Choose the architecture that aligns with your application's unique needs and goals. Each pattern offers a tailored approach to elevate your software system!
Exploring the Technological Marvel Behind Netflix

Exploring the Technological Marvel Behind Netflix

Ever wondered about the tech wizardry that powers your binge-watching adventures on Netflix?