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