kintoneでEveryoneに権限が設定されているアプリをAWS Lambdaで一括チェックする
こないだ、kintone Cafeでユーザーが自由に作成している環境だと、どんなアクセス権設定をしているのか見えないのが、ガバナンス的に課題ですな〜みたいな話をしてましたので、とりあえず簡易的にチェック出来るものをAWS Lambdaで作ってみました。
コードはこちらGithubです。
ランタイムはPython3.6です。
目次
ドメインのアプリ一覧を取得
1 2 3 4 5 6 7 8 |
response = requests.get( 'https://{domain}/k/v1/apps.json?offset={offset}'.format( domain=kintone_domain, offset=str(i) ), headers=headers ) |
k/v1/apps.jsonでドメインのアプリ情報一覧を取得します。
Headerにはユーザー認証で
単体のアプリに対してのAPIではないので、APIトークンは使えないので、ユーザー認証を使います。
1 2 3 4 5 6 7 8 9 |
headers = { 'X-Cybozu-Authorization': base64.b64encode( '{id}:{password}'.format( id=kintone_id, password=kintone_password ).encode('utf-8') ) } |
X-Cybozu-Authorizationにbase64エンコードした、「ユーザーID:パスワード」をセットします。
レスポンス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
{ "apps": [ { "appId": "5", "code": "", "name": "日報", "description": "<br />", "createdAt": "2013-04-11T06:29:38.000Z", "creator": { "code": "Administrator", "name": "Administrator" }, "modifiedAt": "2013-04-11T06:43:09.000Z", "modifier": { "code": "Administrator", "name": "Administrator" }, "spaceId": null, "threadId": null }, { "appId": "13", "code": "", "name": "案件管理", "description": "<br />", "createdAt": "2013-04-11T08:22:59.000Z", "creator": { "code": "Administrator", "name": "Administrator" }, "modifiedAt": "2014-03-13T10:51:07.000Z", "modifier": { "code": "Administrator", "name": "Administrator" }, "spaceId": null, "threadId": null } ] } |
appsにアプリごとの情報が配列で最大100件返ります。
1度に100件なので
1 2 |
for i in range(0,100000,100): |
雑ですが、とりあえず10万アプリまで(タイムアウトするんじゃ。。。。)
なので、offsetで0件目から、100件目から,200件目からと順番に取得するようにしてます。
アプリごとに実処理をするLambdaに情報を渡す
1 2 3 4 5 6 7 8 9 |
client_lambda = boto3.client("lambda") for app in response_dict['apps']: client_lambda.invoke( FunctionName=lambda_name, InvocationType="Event", Payload=json.dumps(app) ) |
実処理をするLambdaにappの情報を渡して非同期で実行しています。
実処理するLambdaでアプリのアクセス権を取得
1 2 3 4 5 6 7 8 |
response = requests.get( 'https://{domain}/k/v1/app/acl.json?app={id}'.format( domain=kintone_domain, id=event['appId'] ), headers=headers ) |
/k/v1/app/acl.json?app=でアクセス権を取得します。
Headerは先ほどと同じユーザー認証です。
レスポンス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
{ "rights": [ { "entity": { "type": "CREATOR", "code": null }, "includeSubs": false, "appEditable": true, "recordViewable": true, "recordAddable": true, "recordEditable": true, "recordDeletable": true, "recordImportable": true, "recordExportable": true }, { "entity": { "type": "GROUP", "code": "everyone" }, "includeSubs": false, "appEditable": false, "recordViewable": true, "recordAddable": true, "recordEditable": true, "recordDeletable": true, "recordImportable": false, "recordExportable": false } ], "revision": "15" } |
rightsの配列にアクセス権設定が返ります。
組織のポリシーにもよると思いますが、今回はデフォルトで設定されているEveryoneがそのままのアプリを抽出したいと思います。
(Everyoneが悪いというわけではありません。が、本当はアクセス権を限定したいアプリでEveryoneを外すのを忘れているケースもあるかなと思いまして)
詳細はコードを見ていただければと思いますが、
あとは、このレスポンスを辿って、recordViewableとか、recordEditableとかがTrueになっているかをチェックして、Slackに投稿します。
通知出来ました!
環境変数
ご参考にされる場合の環境変数を記載しておきます。
- SLACK_URL : SLACKのWebhook URL
- CHANNEL : SLACKのチャンネル
- KINTONE_ID : kintoneの管理者ID
- KINTONE_PASSWORD : kintoneの管理者パスワード
- KINTONE_DOMAIN : kintoneのドメイン(xxx.cybozu.comまで全部)
- LOG_LEVEL : INFOとかDEBUGとか
- LAMBDA_NAME : アプリ一覧を取得する方のLambdaのみに設定、実処理をするLambdaの名前
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Amazon VPCでIPv6を使用する
VPCのIPv6を設定してみました。 設定 [Amazon 提供の IPv6 C …
-
-
リザーブドインスタンスはじめました
このブログも2014年9月にはじめたので、もうすぐ3年。 1件~17件とばらつき …
-
-
SCPが影響しないサービスにリンクされたロールにEC2が引き受けるIAMロールは含まれないことを確認
ドキュメントで確認 サービスコントロールポリシーのユーザーガイドには、「SCPは …
-
-
S3バケットポリシーでクロスアカウントのPrincipalについて確認
確認したこと ドキュメントではこちらで確認しました。 AWS JSON ポリシー …
-
-
「JAWS-UG 名古屋 2022年 “re:Invent”の復習~忘年会~」に参加しました
re:Inventのおみやげも飲み物、ピザ、お寿司もたくさん。 コラボベースさん …
-
-
AWS Organizationsで新規メンバー登録したアカウントを組織から離して解約
2021年現在ではこの方法しかないと認識していますので書き残します。 そのうち新 …
-
-
AWS Lambdaで「Process exited before completing request」
AWS lambdaで「Process exited before comple …
-
-
WordPressで画像アップロードができなくなった(AWS WAFでブロックしていた)
WordPressで画像がアップロードできなくなりました。 こんなメッセージです …
-
-
Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)
Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …
-
-
Amazon Quantum Ledger Database(QLDB)でサンプル台帳の作成と検証
Quantum Ledger Database(QLDB)を触ったことなかったの …