LoginSignup
1
1

ARN情報とリソースURLの紐づけ

Last updated at Posted at 2023-08-03

そもそもの要件(なぜやりたいのか)

AWS Security HubやTrusted Advisorのダッシュボードは多数のサービスと統合しており、これらのサービスに対応するリソースへの直接リンクが提供されています。これはサービスにより異なりますが、Security HubやTrusted Advisorから直接AWS Management Consoleの該当ページにアクセスできるときには非常に便利です。

その一方で、AWS Security HubやTrusted Advisorの情報からリソースへの直接リンクがないものも沢山ありました。

タイトルなし.png

CLIやSDKで取得しても良いのですが、「やっぱりコンソールから見れたほうがいいかも」という要件があったので、少し確認してみました。

AWS Security Hubについて

AWS環境全体のセキュリティとコンプライアンス状態を網羅的に確認できるサービスです。多くのAWSサービスと統合しており、その中でARN(Amazon Resource Name)情報を提供しています。ARNはAWSリソースを一意に識別するための情報ですが、Security Hubでは、リソースへの直接リンクは提供されていないケースが多いようです。

■2023年7月現在では、以下のようなサービスリソースに直接リンクを提供しているようです:

・AWS IAM
・Amazon EC2インスタンス
・Amazon S3バケット
・AWS CloudTrail
・Amazon セキュリティグループ

※AWS Security Hubから「リソースの詳細」選択でリンクがあります
※Trusted Adviser内のSecurity Hubチェックではリンクはありません
※他にもあれば追記していきます

Trusted Advisorついて

ベストプラクティスに基づいてAWS環境をスキャンし、パフォーマンス、セキュリティ、料金最適化に関する具体的なアドバイスを提供します。Trusted Advisorでは、そのアドバイスと一緒に、対象のリソースへの直接リンクも提供していますが、こちらも提供されていないケースが多いようです。

■2023年7月現在では、以下のようなサービスリソースに直接リンクを提供しているようです:

・AWS IAM
・Amazon EC2インスタンス
・Amazon S3バケット
・AWS CloudTrail
・Amazon セキュリティグループ
・Amazon RDSデータベースインスタンス
・AWS Lambda 関数
・Route 53ホストゾーン
・CloudFrontディストリビューション
・Amazon EBSボリューム
・Auto Scaling グループ
・Amazon VPC
・Amazon ECSクラスター/ECS サービス
・Amazon EFSファイルシステム

※Security HubよりTrusted Advisorのほうがリソースへのリンクが多い状況のようです
※他にもあれば追記していきます

Security HubやTrusted Advisorで識別されたリソースのURLを取得するためには、どうすればよい?

ARN情報から直接リンクを作成することを検討してみます。

以下に、その手順を説明します。

  1. Security HubやTrusted AdvisorからARN情報を取得します。
    この情報は、各警告や見つかった問題の詳細部分に含まれています。

  2. 取得したARN情報を分解します。
    ARNは、以下の構成要素からなります
    arn:partition:service:region:account-id:resource-id
    ※各部分は、それぞれリソースの所在地やアカウントID、リソースIDなどを示します

  3. これらの情報を元に、AWS Management ConsoleのURLを構築します。
    たとえば、特定のEC2インスタンスへのリンクは、以下のような形式になりますhttps://console.aws.amazon.com/ec2/v2/home?region=<region>#Instances:search=<instance-id>;sort=instanceId
    <region><instance-id>には、それぞれ2.で取得したリソースのリージョンとIDを指定します

この方法を使えば、Security Hub/Trusted Advisorで得られたARN情報をもとに、対象のリソースへ直接アクセスするリンクを作成することができます。ただし、この方法はすべてのAWSリソースに対して通用するわけではなく、各リソースタイプによってURLの形式が異なる可能性があるため、注意が必要です。

下記の表に、それぞれのリソースタイプに関するARN情報と、URL形式内でそのARNから抽出した情報がどの位置に該当するかを記載します。

AWSリソースタイプ ARN形式 URL形式 ARN項目のURLでの位置
EC2 インスタンス arn:aws:ec2:<region>:<account-id>:instance/<instance-id> https://console.aws.amazon.com/ec2/home?region=<region>#InstanceDetails:instanceId=<instance-id> <region>: リージョン, <instance-id>: インスタンスID
S3 バケット arn:aws:s3:::<bucket-name> https://s3.console.aws.amazon.com/s3/buckets/<bucket-name>?region=<region>&tab=overview <region>: リージョン ,<bucket-name>: バケット名
Lambda 関数 arn:aws:lambda:<region>:<account-id>:function:<function-name> https://console.aws.amazon.com/lambda/home?region=<region>#/functions/<function-name>?tab=configuration <region>: リージョン, <function-name>: 関数名
DynamoDB テーブル arn:aws:dynamodb:<region>:<account-id>:table/<table-name> https://console.aws.amazon.com/dynamodb/home?region=<region>#table?name=<table-name> <region>: リージョン, <table-name>: テーブル名
RDS インスタンス arn:aws:rds:<region>:<account-id>:db:<db-instance-id> https://console.aws.amazon.com/rds/home?region=<region>#database:id=<db-instance-id>;is-cluster=false <region>: リージョン, <db-instance-id>: DBインスタンスID
VPC arn:aws:ec2:<region>:<account-id>:vpc/<vpc-id> https://console.aws.amazon.com/vpc/home?region=<region>#VpcDetails:VpcId=<vpc-id> <region>: リージョン, <vpc-id>: VPC ID
SQS キュー arn:aws:sqs:<region>:<account-id>:<queue-name> https://console.aws.amazon.com/sqs/home?region=ap-northeast-1#/queues/https%3A%2F%2Fsqs.<region>.amazonaws.com%2F<account-id>%2F<queue-name> <region>: リージョン, <queue-name>: キュー名
SNS トピック arn:aws:sns:<region>:<account-id>:<topic-name> https://console.aws.amazon.com/sns/v3/home?region=<region>#/topic/arn:aws:sns:<region>:<account-id>:<topic-name> <region>: リージョン, <account-id>: アカウントID, <topic-name>: トピック名
CloudWatch ロググループ arn:aws:logs:<region>:<account-id>:log-group:<log-group-name> https://console.aws.amazon.com/cloudwatch/home?region=<region>#logsV2:log-groups/log-group/<log-group-name> <region>: リージョン, <log-group-name>: ロググループ名
※URLエンコードx2 が必要
CloudFront ディストリビューション arn:aws:cloudfront::<account-id>:distribution/<distribution-id> https://console.aws.amazon.com/cloudfront/home?region=<region>#distributions/<distribution-id> <region>:リージョン, <distribution-id>:ディストリビューションID
Route 53ホストゾーン arn:aws:route53:::hostedzone/<hosted-zone-id> https://console.aws.amazon.com/route53/v2/hostedzones#ListRecordSets/<hosted-zone-id> <region>:リージョン, <hosted-zone-id>:ホストゾーンID
Application Load Balancer arn:aws:elasticloadbalancing:<region>:<account-id>:loadbalancer/app/<load-balancer-name>/<load-balancer-id> https://console.aws.amazon.com/ec2/v2/home?region=<region>#LoadBalancers:search=<load-balancer-name> <region>:リージョン, <load-balancer-name>:ロードバランサ名
※直接指定の場合はARN名が必要
IAM ユーザ arn:aws:iam::<account-id>:user/<username> https://console.aws.amazon.com/iamv2/home#/users/details/<username> <region>:リージョン, <username>: ユーザ名
IAM グループ arn:aws:iam::<account-id>:group/<group-name> https://console.aws.amazon.com/iamv2/home#/groups/details/<group-name> <region>:リージョン, <group-name>:グループ名
IAM ロール arn:aws:iam::<account-id>:role/<role-name> https://console.aws.amazon.com/iamv2/home#/roles/details/<role-name> <region>:リージョン, <role-name>:ロール名
IAM ポリシー arn:aws:iam::<account-id>:policy/<policy-name> https://console.aws.amazon.com/iam/home?region=<region>#/policies/<policy-arn> <region>:リージョン, <policy-arn>:ポリシーARN
※ポリシー指定はarn記載が必要
ECSクラスター arn:aws:ecs:<region>:<account-id>:cluster/<cluster-name> https://console.aws.amazon.com/ecs/home?region=<region>#/clusters/<cluster-name>/services <region>:リージョン, <cluster-name>:クラスター名
ECSタスク定義 arn:aws:ecs:<region>:<account-id>:task-definition/<task-definition> https://console.aws.amazon.com/ecs/home?region=<region>#/taskDefinitions/<task-definition> <region>:リージョン, <task-definition>:タスク定義
ECSサービス arn:aws:ecs:<region>:<account-id>:service/<cluster-name>/<service-name> https://console.aws.amazon.com/ecs/home?region=<region>#/clusters/<cluster-name>/services/<service-name>/details <region>:リージョン, <cluster-name>:クラスター名, <service-name>:サービス名
ECRプライベートリポジトリ arn:aws:ecr:<region>:<account-id>:repository/<repository-name> https://console.aws.amazon.com/ecr/repositories/private/<account-id>/<repository-name>?region=<region> <region>:リージョン, <account-id>:アカウントID, <repository-name>:リポジトリ名
SQSキュー arn:aws:sqs:<region>:<account-id>:<queue-name> https://console.aws.amazon.com/sqs/v2/home?region=<region>#/queues/https%3A%2F%2Fsqs.<region>.amazonaws.com%2F<account-id>%2F<queue-name> <region>:リージョン, <account-id>: アカウントID, <queue-name>:キュー名
DynamoDBテーブル arn:aws:dynamodb:<region>:<account-id>:table/<table-name> https://console.aws.amazon.com/dynamodb/home?region=<region>#table?name=<table-name> <region>:リージョン, <table-name>:テーブル名
EKSクラスター arn:aws:eks:<region>:<account-id>:cluster/<cluster-name> https://console.aws.amazon.com/eks/home?region=<region>#/clusters/<cluster-name> <region>:リージョン, <cluster-name>:クラスター名
API arn:aws:execute-api:<region>:<account-id>:<api-id> https://console.aws.amazon.com/apigateway/home?region=<region>#/apis/<api-id>/resources/ <region>:リージョン, <api-id>:APIのID
セキュリティグループ arn:aws:ec2:<region>:<account-id>:security-group/<security-group-id> https://console.aws.amazon.com/ec2/v2/home?region=<region>#SecurityGroup:groupId=<security-group-id> <region>:リージョン, <security-group-id>:セキュリティグループID
ネットワークACL arn:aws:ec2:<region>:<account-id>:network-acl/<network-acl-id> https://console.aws.amazon.com/vpc/home?region=<region>#NetworkAclDetails:networkAclId=<network-acl-id> <region>:リージョン, <network-acl-id>:ネットワークACL ID

注意

  • ARNの構造は一般的には arn:partition:service:region:account-id:resource-type/resource-id となりますが、リソースタイプやサービスによってはこれが異なる場合があります。また、URLに必要な情報がARNから直接取得できない場合もあるため、特定のサービスやリソースタイプについては、AWS公式ドキュメンテーションを参照することをお勧めします。
  • ARNのaccount-idはログインアカウントとなるため、基本的にURL形式には含まれません(必要なリソースもありるようです)。事前のログインが必要です。
  • <region><instance-id><bucket-name><function-name><table-name><db-instance-id><vpc-id>など、適切な情報に置き換えが必要です。
  • この方法では、ARNから直接リンクを生成するため、リンクが常に最新であることを保証するものではありません。リソースが削除されたり、リージョンが変更されたりすると、リンクは無効になります。
  • この情報は2023年7月時点のものであり、AWSの更新により変更される可能性があります。

いかがだったでしょうか。

ARN情報からリソースへの直接リンクを生成することで、利用ユーザが直接リソースにアクセスできると便利かもしれません。
他にもっと良いやり方をご存じの方がいらっしゃいましたら、是非教えてくださいm(__)m

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1