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アカウント内のすべてのS3バケットを削除するLambda(Python)
やりたいこと 特定アカウント内のS3バケットを全部削除したいです。 バケット内の …
-
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」執筆裏話
今日2019/4/20発売となりました「AWS認定資格試験テキスト AWS認定ク …
-
前からできましたっけ??CloudWatch Logsの保持設定を複数まとめて設定
AWSの個人アカウントで要らなさそうなリソースの断捨離をしてます。 CloudW …
-
AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
-
このブログをAWS大阪リージョンへ移行しました
大阪リージョン爆誕!! 朝起きて寝ぼけながらリージョンを見てると。 「大阪リージ …
-
AWS Summit Tokyo 2017 Day3 開場~基調講演~Dev Day Night
AWS Summit Tokyo 2017 参加2日目のDay3です。 基調講演 …
-
WordPress(EC2)の画像のS3へのオフロードをMedia Cloudで
タイトル通りですが、画像をwebサーバー(EC2)からではなく、S3バケットから …
-
執筆環境(PyCharm, CodeCommit, CodePipeline, S3, Lambda, 署名付きURL)
2018年から、年に1回ぐらい商業本の執筆をさせていただいております。 2020 …
-
Amazon Auroraのスナップショットの暗号化とリージョン間コピーを改めて試しました
Amazon Auroraデータベースを暗号化して、スナップショットを作成、クロ …
-
AWS Transfer Family EFS向けのSFTP対応サーバー
EFSファイルシステムは作成済です。 AWS Transfer Family S …