🤖

[GCP] 絶対に JSON キーで実装する男 [Google Cloud Platform]

に公開

まえがき

昨今Google Cloud Platform(GCP)はjsonやP12でサービスキーを新規で生成してくれません。それはセキュリティ上正しいので、今後はサーバに鍵を置かないカタチにしていきたいです。

しかし、たまたまGCPのPJTを変更したときとか、json管理が曖昧で洗い替えしたい時とか、さすがに、あちこちのコードを直す手間とか検証は無理というときがありますね?

オーナーでもダメ。組織管理者でもダメ。

GCPのコンソールでロールをさがしても見つかりません。そうなんです、余程のことをしないと、もはや許可してくれません。

gcloudで制限を解除する手順

  1. ログイン確認
  2. プロジェクト設定
  3. 組織IDの確認
  4. ポリシー一覧
  5. Policy Adminロール追加
  6. 削除実行

gcloudコマンドで、組織管理者が、アカウントを許可する

まずは、ログインを確認します。

PS C:\Users\_____> gcloud auth list
        Credentialed Accounts
ACTIVE  ACCOUNT
*       dokokade@desu.yo
        ironna@gmail.toka.ne

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

なければログインします。

PS C:\Users\_____> gcloud auth login konnkaino@meateno.aka.unto
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?respo...


You are now logged in as [konnkaino@meateno.aka.unto].
Your current project is [nanikano_pjt].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID

今一度gcloud auth listなんかで確認しちゃったりして

今の設定を確認します。

PS C:\Users\_____> gcloud config list
[accessibility]
screen_reader = False
[compute]
region = asia-northeast1
zone = asia-northeast1-b
[core]
account = konnkaino@meateno.aka.unto
disable_usage_reporting = True
project = nanikano_pjt

Your active configuration is: [default]

プロジェクトを変えます。

PS C:\Users\_____> gcloud config set project kottino_pjt
Updated property [core/project].

確認します。

PS C:\Users\_____> gcloud config list
[accessibility]
screen_reader = False
[compute]
region = asia-northeast1
zone = asia-northeast1-b
[core]
account = konnkaino@meateno.aka.unto
disable_usage_reporting = True
project = kottino_pjt

Your active configuration is: [default]

自分のところの組織IDを確認します。

PS C:\Users\_____> gcloud organizations list
DISPLAY_NAME             ID  DIRECTORY_CUSTOMER_ID
meateno.so.siki  13*********9              C0******b

目当ての組織IDで、ポリシーを確認します。

PS C:\Users\_____> gcloud resource-manager org-policies list --organization=13*********9
CONSTRAINT                                                      LIST_POLICY  BOOLEAN_POLICY  ETAG
constraints/compute.setNewProjectDefaultToZonalDNSOnly          -            SET             C**************B
constraints/essentialcontacts.allowedContactDomains             SET          -               C**************B
constraints/iam.allowedPolicyMemberDomains                      SET          -               C**************B
constraints/iam.disableServiceAccountKeyUpload                  -            SET             C**************B
constraints/iam.disableServiceAccountKeyCreation                -            SET             C**************B
constraints/iam.automaticIamGrantsForDefaultServiceAccounts     -            SET             C**************B
constraints/storage.uniformBucketLevelAccess                    -            SET             C**************B
constraints/compute.restrictProtocolForwardingCreationForTypes  SET          -               C**************B
PS C:\Users\_____> gcloud org-policies delete constraints/iam.disableServiceAccountKeyCreation \
ERROR: (gcloud.org-policies.delete) unrecognized arguments: \

To search the help text of gcloud commands, run:
  gcloud help -- SEARCH_TERMS

このような感じで、ポリシーの設定が分かります。
disableServiceAccountKeyCreationが、今回のサービスキーを作ってくれないソレです。

で、ここで自分の組織アカウントに、 ポリシー管理者 を追加します。

PS C:\Users\_____> gcloud organizations add-iam-policy-binding 13*********9 --member="user:konnkaino@meateno.aka.unto" --role="roles/orgpolicy.policyAdmin"
Updated IAM policy for organization [13*********9].
bindings:
- members:
  - domain:meateno.so.siki
  role: roles/billing.creator
- members:
  - user:konnkaino@meateno.aka.unto
  role: roles/orgpolicy.policyAdmin
- members:
  - user:konnkaino@meateno.aka.unto
  role: roles/resourcemanager.organizationAdmin
- members:
  - domain:kingdom.co.jp
  role: roles/resourcemanager.projectCreator
etag: Bw******s=
version: 1

追加されたので、ポリシーを変更できます。

PS C:\Users\_____> gcloud org-policies delete constraints/iam.disableServiceAccountKeyCreation --organization=13*********9
Deleted policy [organizations/13*********9/policies/iam.disableServiceAccountKeyCreation].
{}

長旅でした。おつかれしたー

Discussion