0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Deadline Cloudで、オンプレミスのworkerを作るために、AWSにIAM Roles Anywhereを使うのに必要な設定をする

0
Last updated at Posted at 2026-04-13

自己紹介

株式会社digitalbigmoのテクニカルサポートの小池@plinecomです。
最近はDeadline Cloud と日々戦っています

IAM Roles Anywhere

Deadline Cloudで、オンプレミスのマシンをワーカーとして利用するには、AWSのリソースをクラウドの外からでも使えるようにするIAM Roles Anywhere設定する必要がある。具体的にはS3へのアクセス権と、Deadline Cloudのワーカーになれるようにするロールを最低限与えなければならない。

またIAM Roles Anywhereを使うには、自分でOpenSSLの認証局を立て、そのルート証明書が必要になるので予め用意しておく。

Ansible Playbook

まず、IAM Roleを作る。このとき、自分が建てた認証局の証明書であることを軽くチェックするためにConditionで制限しておく。
つづいて、普通にRoleにPolicy (S3アクセス、Deadline Worker)をアタッチする

ここからが追加の手順で、自分が建てた認証局のルート証明書を Trust AnchorとしてAWSに登録する。これによって、自分の建てた認証局から出した証明書をもっている全てのWorkerからのアクセスが許可される。ワーカーが増えるたびにAWSに証明書を登録する手間が減るという利点がある

そして、Profileを作る。通常のIAMでは、Profileとなるのは、ユーザーだったりEC2インスタンスだったりするわけだが、IAM Roles Anywhereでは、その対象が存在しないので、AWS側からは、何が対象なのか訳分からなくなってしまう。そこで、Roles Anywhere用のProfileを作る

最後に、今回作成した、Role, Trust Anchor, ProfileのARN(AWSのリソースのURLみたいなもの)を保存しておく。後でオンプレミスのマシンに配布するので。ここで保存しなくても、IAM Anywhereの管理画面で調べても良いです。

### IAM ロールを作る
    - name: Create IAM Role
      amazon.aws.iam_role:
        name: "{{ rolesanywhere.role_name }}"
        assume_role_policy_document:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                Service: rolesanywhere.amazonaws.com
              Action:
                - sts:AssumeRole
                - sts:TagSession
                - sts:SetSourceIdentity
              Condition:
                StringLike:
                  aws:PrincipalTag/x509Subject/CN: "worker*"
      register: register_role

  ### ポリシーをアタッチする
    - name: Attach managed policies
      ansible.builtin.command: >
        aws iam attach-role-policy
        --role-name {{ rolesanywhere.role_name }}
        --policy-arn {{ item }}
      loop:
        - "arn:aws:iam::aws:policy/AmazonS3FullAccess"
        - "arn:aws:iam::aws:policy/AWSDeadlineCloud-FleetWorker"
        - "arn:aws:iam::aws:policy/AWSDeadlineCloud-WorkerHost"
      register: attach_policy_results
      changed_when: attach_policy_results.rc == 0

  ### 自分の建てた認証局の証明書を読む
    - name: Read CA certificate
      slurp:
        src: "/path/to/root_ca/certs/ca.cert.pem"
      register: ca_cert

  ### Trust Anchorを作る
    - name: Create Trust Anchor
      command: >
        aws rolesanywhere create-trust-anchor
        --name {{ rolesanywhere.trust_anchor_name }}
        --source sourceType=CERTIFICATE_BUNDLE,sourceData={x509CertificateData='{{ ca_cert.content | b64decode }}'}
        --enabled
      register: trust_anchor
      failed_when: false

### Profileを作る
    - name: Create Profile
      command: >
        aws rolesanywhere create-profile
        --name {{ rolesanywhere.profile_name }}
        --role-arns arn:aws:iam::{{ account_id }}:role/{{ rolesanywhere.role_name }}
        --enabled
      register: profile
      failed_when: false

### 今回作った物のARNを控える
    - name: Extract Profile ARN
      set_fact:
        profile_arn: "{{ profile.stdout | from_json | json_query('profile.profileArn') }}"
      when: profile.rc == 0

    - name: Extract Trust Anchor ARN
      set_fact:
        trust_anchor_arn: "{{ trust_anchor.stdout | from_json | json_query('trustAnchor.trustAnchorArn') }}"
      when: trust_anchor.rc == 0

### 今回作った物のARNをファイルに書き出す
    - name: Save ARNs
      copy:
        dest: "./rolesanywhere_output.json"
        content: |
          {
            "trust_anchor_arn": "{{ trust_anchor_arn }}",
            "profile_arn": "{{ profile_arn }}",
            "role_arn": "{{ register_role.iam_role.arn }}"
          }

宣伝

株式会社digitalbigmoでは、ソフトの開発から、レンダーファームの構築まで手広くお仕事をしています。お困りの際はお気軽にお問い合わせください。相談は無料で承っております。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?