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
関連記事
-
-
AWSのアカウントを新規作成と、最低限やっておいた方がいいMFAの設定
AWSのアカウントを新規作成する手順を書き出しておきます。 ※2017年8月6日 …
-
-
DynamoDB Accelerator(DAX)のサンプルアプリケーション(Python)を実行
DynamoDBデベロッパーガイドのDynamoDB Accelerator(D …
-
-
AWS CLIからIAM Identity CenterへサインインしてCodeCommitのリポジトリを使用する
Macで操作しました。 AWS CLIバージョンアップ [crayon-6866 …
-
-
試そうとしてたらSavings Plans買っちゃいました
Savings Plansの購入画面を確認していました。 画面遷移も確認しようと …
-
-
AWS Service Catalogポートフォリオを他のアカウントと共有する
AWS Service Catalogチュートリアルで作成したポートフォリオの他 …
-
-
Amazon S3オブエジェクトへのリクエストをCloudTrail, Athenaで識別
こちらCloudTrail を使用した Amazon S3 リクエストの識別に書 …
-
-
AWS Systems Manager AutomationでEC2の自動停止
Systems Manager Automationがない時代に、Lambdaを …
-
-
このブログからパブリックIPv4 IPアドレスをなくしてコスト最適化
2024年2月より使用中のパブリックIPv4アドレスに1時間あたり0.005US …
-
-
CodeCommitリポジトリの復号化のCloudTrailログ確認
ユーザーガイドAWS Key Management Service と AWS …
-
-
AWS Systems Manager セッションマネージャを使用するために必要な設定
AWS Systems Manager セッションマネージャを使用するために必要 …