IAM を使用したリソースへのアクセスの保護


Kubernetes ユーザーとサービス アカウントには、Config Connector リソースを管理する権限が必要です。Config Connector を使用すると、Kubernetes のロールベース アクセス制御(RBAC)を使用する ID で、プロジェクトのコントロール プレーンを管理できます。また、Identity and Access Management(IAM)ポリシーを参照することもできます。

IAMPolicy と IAMPolicyMember を参照できるリソースは、リソース リファレンスに一覧表示されています。これらのリソースには、「IAMPolicy / IAMPolicyMember によって参照可能」というプロパティがあります。

このトピックでは、Identity and Access Management を使用して Google Cloud リソースに安全にアクセスする方法について説明します。

始める前に

このページの手順を完了するには、まず Config Connector をクラスタにインストールします。

RBAC によるコントロール プレーン アクセスの保護

この例では、サービス アカウントを作成し、PubSubTopic を管理する権限を付与します。このサービス アカウントは、他のタイプの Config Connector リソースを管理できません。

  1. 次の内容のファイルを pubsub-topic-service-account.yaml という名前で作成します。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pubsub-topic-service-account
      namespace: default
    

    これを適用して pubsub-topic-service-account サービス アカウントを作成します。

    kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

  2. 次のコマンドの出力に no が含まれていることを確認して、pubsub-topic-service-accountPubSubTopic リソースを作成できないことを確認します。

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. 次に、Pub/Sub トピックの作成を可能にする ClusterRole を作成します。

    ClusterRole は、rules.apiGroupsrules.resources で指定された値があるリソースのみを管理できます。apiGroupsresources の値を確認するには、リソースのリファレンスをご覧ください。

    次の内容のファイルを pubsub-topic-editor-role.yaml という名前で作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: null
      name: pubsub-topic-editor
    rules:
    - apiGroups:
      - pubsub.cnrm.cloud.google.com
      resources:
      - pubsubtopics
      verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
    

    pubsub-topic-editor.yaml を適用して ClusterRole を作成します。

    kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

  4. 次に、ClusterRole とサービス アカウント間で RoleBinding を作成します。次の内容のファイルを pubsub-topic-editor-rolebinding.yaml という名前で作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: pubsub-topic-editor-rolebinding.
    subjects:
    - kind: ServiceAccount
      name: pubsub-topic-service-account
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pubsub-topic-editor
    
  5. クラスタに pubsub-topic-editor-rolebinding.yaml を適用します。

    kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

  6. 次のコマンドの出力が yes であることを確認して、pubsub-topic-service-accountPubSubTopic リソースの作成を許可されていることを確認します。

    kubectl auth can-i get pubsubtopics \
      --as=system:serviceaccount:default:pubsub-topic-service-account

クリーンアップ

kubectl delete を使用して、サービス アカウント、IAM ロール、ロール バインディングを削除します。

kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-editor-role.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-service-account.yaml --namespace <var>CC_NAMESPACE</var>

CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

IAM ポリシーを使用したデータプレーンの保護

この例では、以前に付与された権限を使用して PubSubTopic を作成し、IAMPolicyMember リソースを使用してアクセスを制限します。

  1. 次の内容で pubsub-topic-sample.yaml という名前のファイルを作成します。

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: pubsubtopic-sample
    

    kubectl を使用して pubsub-topic-sample.yaml を適用します。

    kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

  2. 次の内容の iampolicymember.yaml という名前のファイルを作成し、EMAIL_ADDRESS を Google Cloud アカウントのメールアドレスに置き換えます。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: iampolicymember-sample
    spec:
      resourceRef:
        apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
        kind: PubSubTopic
        name: pubsubtopic-sample
      role: roles/pubsub.admin
      member: "user:EMAIL_ADDRESS"
    
  3. iampolicymember.yaml を適用します。

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。

  4. このコマンドを実行し、出力でメールアドレスを探して、ポリシーが Google Cloud に適用されていることを確認し、PROJECT_ID を実際のプロジェクト ID に置き換えます。

    gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample

Pub/Sub トピックへのアクセスは、IAMPolicyMember で保護されています。

クリーンアップ

kubectl delete を使用して、Pub/Sub トピックと IAMPolicyMember を Google Cloud プロジェクトから削除します。

kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

次のステップ

Secret を使用して、情報を Google Cloud リソースに安全に渡します。