この記事はdots girls Advent Calendar 2016の記事です。
AWS ESのアクセスポリシーで迷ってしまう
AWSは基本的にVPCに入らないServiceに対してポリシー(セキュリティ)を設定出来ますが、AWS Elasticsearch Serviceに関してはLambdaと連携してkibanaで表示するなどの場合、デフォルトで選択できるポリシーだと足りないことが多く、かといって例を検索するととりあえず全部許可していたりしているので、どの設定が一番いいのか絶賛模索中です。
AWSのデフォルトで選択し入力できるポリシー
セレクトボックスで選択できるポリシーです。ただし、アカウント、ユーザー、IPは一つしか入力欄しかありません。少しひねりたい場合はそこからJsonをいじる必要があります。
Allow or deny access to one or more AWS accounts or IAM users
AWSアカウントもしくは、IAMユーザーによるアクセス制御
Allow access to the domain from specific IP(s)
送信元IPアドレスによるアクセス制御
Allow open access to the domain
全部許可
Deny access to the domain
全部拒否
Copy access policy from another domain
以前作ったポリシーのコピー
ポリシーで選択できるActionリスト
LambdaからbulkAPIを使用してデータをアップロードする場合は、es:ESHttp*
のみで権限は足りるようです。
kibanaから閲覧する場合、es:ESHttpGet
だけでは無理でした。たぶんDomain系やTag系が関係してるのかと思います。ひとまず*
で良いと思います。
- es:ESHttpDelete
- es:ESHttpGet
- es:ESHttpHead
- es:ESHttpPost
- es:ESHttpPut
- es:CreateElasticsearchDomain
- es:DescribeElasticsearchDomain
- es:DescribeElasticsearchDomains
- es:DescribeElasticsearchDomainConfig
- es:DeleteElasticsearchDomain
- es:ListDomainNames
- es:AddTags
- es:ListTags
- es:RemoveTags
- es:UpdateElasticsearchDomainConfig
私の思う汎用的なAWS ES向けポリシー
現在の最新バージョンは2012-10-17
です。
kibanaはIP制限などがいいと思いました。自身のグローバルIPは確認くんなどで確認して下さい。
IPやarnはList(["", ""]
)で複数渡すことも可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:リージョン:アカウントID:domain/ES名/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "自分のIP"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::アカウントID:role/Lambdaの実行ロール"
},
"Action": "es:ESHttp*",
"Resource": "arn:aws:es:リージョン:アカウントID:domain/ES名/*"
}
]
}
懸念点
- kibanaは、IP制限掛けてしまうと使い勝手が悪いのではないか
目標
- Actionの役割をちゃんと理解してものすごく細かく設定したい
参考
ここまで読んで下さりありがとうございました。詳しい人意見下さい。
dots.女子部について
インフラ、サーバー、フロント開発から運用ノウハウ、女性エンジニアのキャリアについてなどいろいろな観点から勉強したり、情報共有している女性エンジニアのための部活です。
興味がある方は是非SNSアカウントのフォローしてみて下さい!
明日はきょんさんよろしくお願いいたします\(^o^)/