datadogのメトリクス(ダッシュボード)で特定のリソースを除外(exclude)したい場合

公式

docs.datadoghq.com

除外すべきタグを指定するには、タグキーの前に ! を入力します。? (1 文字の場合)や * (複数文字の場合)のようなワイルドカードも使用できます。

ユースケース

例えば

stage:production

みたいなtagで見たいメトリクスが引っ張ってこれる (ALBとかRDSとかEC2とか) んだけど。特定のタグの場合だけ除外したい場合(メトリクスとして大きく外れてる場合など)につ使う。

stage:production!エクスクルードしたいkey:対象のvalue

GUI上のfromで こんな感じでeditすれば除外してくれる

kinesis-firehoseでクロスアカウントのs3バケットデータを保存する

前提

デリバリーストリームと同一アカウント内のs3バケットへの保存はできている。 環境分離の観点などから他アカウントのバケットへ保存したくなった時の方法

配信先のバケットバケットポリシー

docs.aws.amazon.com

{

    "Version": "2012-10-17",
    "Id": "PolicyID",
    "Statement": [
        {
            "Sid": "StmtID",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::accountA-id:role/iam-role-name"
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

バケットポリシーを設定してaccountAのデリバリーストリームに付与されているRoleからの書き込みを許可する

ここ

 "AWS": "arn:aws:iam::accountA-id:role/iam-role-name"

firehoseのIAM Roleを変更する

docs.aws.amazon.com

{
    "Version": "2012-10-17",  
    "Statement":
    [    
        {      
            "Effect": "Allow",      
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
            ],      
            "Resource": [        
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"            
            ]    
        },        
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:GetShardIterator",
                "kinesis:GetRecords",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name"
        },
        {
           "Effect": "Allow",
           "Action": [
               "kms:Decrypt",
               "kms:GenerateDataKey"
           ],
           "Resource": [
               "arn:aws:kms:region:account-id:key/key-id"           
           ],
           "Condition": {
               "StringEquals": {
                   "kms:ViaService": "s3.region.amazonaws.com"
               },
               "StringLike": {
                   "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*"
               }
           }
        },
        {
           "Effect": "Allow",
           "Action": [
               "logs:PutLogEvents"
           ],
           "Resource": [
               "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name"
           ]
        },
        {
           "Effect": "Allow", 
           "Action": [
               "lambda:InvokeFunction", 
               "lambda:GetFunctionConfiguration" 
           ],
           "Resource": [
               "arn:aws:lambda:region:account-id:function:function-name:function-version"
           ]
        }
    ]
}

前提乗っ取るとすでにIAM Roleが付与されているので、

                "arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*",

ここのバケットを追加していく。

忘れがちな注意点

docs.aws.amazon.com

S3 バケットを所有していない場合、Amazon S3 アクションのリストに s3:PutObjectAcl を追加します。これにより、Kinesis Data Firehose で配信されるオブジェクトへのフルアクセスが、バケット所有者に付与されます。

上記のfirehoseが使用するIAM Roleに付与しておく。そのため

                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutObjectAcl"

こうなる

デリバリーストリームに配信先を変更するよう設定変更する

コンソールからはクロスアカウントのs3が指定できないためcliで行う。 事前準備として VersionId と DestinationId が必要なため取得しておく

aws firehose describe-delivery-stream --delivery-stream-name ストリームネーム | jq .DeliveryStreamDescription.VersionId
aws firehose describe-delivery-stream --delivery-stream-name ストリームネーム | jq '.DeliveryStreamDescription.Destinations[].DestinationId'

戻り値から取得しておく

aws firehose update-destination --delivery-stream-name ストリームネーム --current-delivery-stream-version-id 取得した値 --destination-id 取得した値 --s3-destination-update BucketARN=arn:aws:s3:::クロスアカウントのバケット名

firehoseのエラーが出てないこととs3バケットにデータが来ていることが確認できたら成功

Macでaws-vaultを使用する,terraformも

aws cliのkeyとsecretsをキーチェーン経由にして暗号化する

github.com

brewでインストール

brew cask install aws-vault

aws cliなりマネジメントコンソールなりでkeyとsecretsを払い出す

aws-vaultに登録する

aws-vault add production

Enter Access Key ID:
.
.
.

aws-vault add development
Enter Access Key ID:
.
.
.


名前をつけて呼び出し時に名前でクレデンシャルを変更できる

vault経由でコマンドを呼び出す

aws-vault exec development -- aws s3 ls
--

以降は普通のaws cli

terraformコマンドの場合

aws-vault exec development -- terraform 以後terraformコマンド

yamlの書き方メモ

何度調べても忘れてしまうため

配列

- リンゴ
- イチゴ
- みかん

ハッシュ

name: 鈴木
age : 20
born : tokyo

配列の中にハッシュ

- name: suzuki
  age : 20
  born : tokyo
- name: sato
  age: 21
  born: osaka

ネスト

同じ構造のままインデントすればいい

配列

- リンゴ
  - スーパーリンゴ
  - すごいリンゴ
- イチゴ
- みかん

ハッシュ

name: 鈴木
  mei:
    mei1: taro
    mei2: jiro
age : 20
born : tokyo

考え方

  • ネストさせるにはインデントさせればいい
  • ハッシュは当然キーが必要
  • 配列の中にハッシュなら先頭のハイフンが「配列」の宣言でその次以降にハッシュが書かれてると理解する -- リスト一つの中にハッシュが入るので後続もインデントする

[WIP]VS Codeの設定

拡張

  • indent rainbow

marketplace.visualstudio.com

  • terraform拡張

marketplace.visualstudio.com

設定関連の覚書

  • macの場合
  • code -> 基本設定 -> 設定 で設定画面に行ける タブが用意されていて
  • ユーザー
  • ワークスペース
  • フォルダ

と「どこの設定をするのか」を選んでから設定する。 右上のアイコンからjson開くでもok 個人的にはjson

AWS Security ScannerというUserAgentについて

タイトルのようなUserAgentのアクセスが来ていたので調べてみたら、 どうもAWS公式がスキャンをかけているらしい。 (bot netにされてないかとかをスキャンしてるらしい)

UserAgentなので参考情報と程度にしかならないが、 client-ipがAWSか位は調べておくと多少精度が上がるかもしれない。

が。いずれにせよAWSのEC2からUserAgent偽装してスキャンしてたら見分けられないので UserAgentでブロックしてしまっても問題ないレベルかもしれない。

glueで開発エンドポイントを作る時のメモ(VPCに入れる時)

S3の開発エンドポイントが必要

  • VPCエンドポイントはVPC単位で作成
  • VPCエンドポイントはルートテーブルに割り当てる
    • おそらくs3へのアクセスする時のルーティングで自動的に使ってくれる模様
  • vpcエンドポイントをルートテーブルにつけるとエンドポイント作成時の候補にVPCが出てくる