このハンズオンについて
- このハンズオンでは、Directory Serviceで作成したディレクトリのユーザでManagement Consoleにログインするまでの作業を実施します。
- 今回のハンズオンでは、AD-Connectorは対象外とします。
- 一部の操作はManagement Consoleで実施します。
- Macをお使いの方は、Windows Serverでリモートデスクトップ接続が出来るアプリをご用意ください。
- Windows Serverをドメインに参加させるため、SSMを使用します。SSMが利用可能なリージョンを利用してください。この手順ではオレゴンを利用します。
前提条件
-
この手順は、全部で5つの投稿から構成されており、本投稿は以下の投稿の内容を実施していることが前提となります。途中から実施した場合、変数が空欄のためにコマンドの実行に失敗する場合があります。
バージョン確認
このハンズオンは以下のバージョンで動作確認を行いました。
コマンド
aws --version
結果
aws-cli/1.9.5 Python/2.7.10 Linux/4.1.10-17.31.amzn1.x86_64 botocore/1.3.5
必要な権限
作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。
- EC2に対するフルコントロール権限
- Directory Serviceに関するフルコントロール権限
- IAMに関するフルコントロール権限
- SSMに関するフルコントロール権限
0. 準備
リージョンを指定
コマンド
export AWS_DEFAULT_REGION='us-west-2'
資格情報を確認
コマンド
aws configure list
結果
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************PZ4A iam-role
secret_key ****************AZ55 iam-role
region us-west-2 env AWS_DEFAULT_REGION
変数の確認
コマンド
cat << ETX
DS_VPC: "${VPC_ID}"
DS_SUBNET1: "${SUBNET_A_ID}"
DS_SUBNET2: "${SUBNET_A_ID}"
ETX
結果
DS_VPC: "vpc-********"
DS_SUBNET1: "subnet-********"
DS_SUBNET2: "subnet-********"
1. ディレクトリの作成
ドメイン名を指定
コマンド
DS_NAME="jawsug.local"
echo ${DS_NAME}
パスワードを指定
(パスワードらしいパスワードを設定してください)
強度の高いパスワードを設定することの重要性はこちら
コマンド
DS_PASSWORD="Passw0rd"
echo ${DS_PASSWORD}
ディレクトリのサイズを指定
コマンド
DS_SIZE="Small"
echo ${DS_SIZE}
パラメータを確認
コマンド
cat << ETX
DS_VPC: "${VPC_ID}"
DS_SUBNET1: "${SUBNET_A_ID}"
DS_SUBNET2: "${SUBNET_A_ID}"
DS_NAME: "${DS_NAME}"
DS_PASSWORD: "${DS_PASSWORD}"
DS_SIZE: "${DS_SIZE}"
ETX
結果
DS_VPC: "vpc-********"
DS_SUBNET1: "subnet-********"
DS_SUBNET2: "subnet-********"
DS_NAME: "jawsug.local"
DS_PASSWORD: "Passw0rd"
DS_SIZE: "Small"
ディレクトリの構築先のVPCを指定
コマンド
VPCSETTINGS_FILE='VPC_Settings.json'
コマンド
cat << EOF > ${VPCSETTINGS_FILE}
{
"VpcId": "${VPC_ID}",
"SubnetIds": ["${SUBNET_A_ID}", "${SUBNET_C_ID}"]
}
EOF
cat "${VPCSETTINGS_FILE}"
結果
{
"VpcId": "vpc-********",
"SubnetIds": ["subnet-********", "subnet-********"]
}
JSONファイルを検証
コマンド
jsonlint -q ${VPCSETTINGS_FILE}
ディレクトリを作成
コマンド
aws ds create-directory --name "${DS_NAME}" --password "${DS_PASSWORD}" --size "${DS_SIZE}" --vpc-settings file://${VPCSETTINGS_FILE}
結果
{
"DirectoryId": "d-**********"
}
コマンド
DS_ID=`aws ds describe-directories | jq -r ".DirectoryDescriptions | .[] | .DirectoryId"` && echo ${DS_ID}
結果
ds-**********
ディレクトリの詳細を確認
Activeになるまで数分かかります。
気長に待ちましょう( ´_ノ`)y━~~
コマンド
DS_STAGE=$( \
aws ds describe-directories \
--query "DirectoryDescriptions[?Name==\`${DS_NAME}\`].Stage" \
--output text \
) \
&& echo ${DS_STAGE}
結果
Active
ディレクトリ数の確認
コマンド
aws ds get-directory-limits
結果
{
"DirectoryLimits": {
"ConnectedDirectoriesLimitReached": false,
"CloudOnlyDirectoriesLimit": 10,
"ConnectedDirectoriesCurrentCount": 0,
"CloudOnlyDirectoriesCurrentCount": 1,
"ConnectedDirectoriesLimit": 10,
"CloudOnlyDirectoriesLimitReached": false
}
}
2. スナップショットの確認
スナップショットの確認
コマンド
aws ds describe-snapshots --directory-id ${DS_ID}
結果
{
"Snapshots": []
}
スナップショットの取得
ディレクトリの作成中はスナップショットを作成できません。
数分お待ちください。
コマンド
aws ds create-snapshot --directory-id ${DS_ID}
結果
{
"SnapshotId": "s-**********"
}
スナップショットの確認
コマンド
aws ds describe-snapshots --directory-id ${DS_ID}
結果
{
"Snapshots": [
{
"Status": "Completed",
"DirectoryId": "d-**********",
"Type": "Manual",
"StartTime": 1444552262.026,
"SnapshotId": "s-**********"
}
]
}
スナップショット数の確認
コマンド
aws ds get-snapshot-limits --directory-id ${DS_ID}
結果
{
"SnapshotLimits": {
"ManualSnapshotsCurrentCount": 1,
"ManualSnapshotsLimit": 5,
"ManualSnapshotsLimitReached": false
}
}
3. DHCPオプションの作成
管理用のインスタンスがドメインに参加する際、名前解決が必要となるためDHCPでDNSサーバが自動で設定されるようにします。
DNSサーバのIPアドレスを取得
コマンド
DNS_IP1=`aws ds describe-directories --directory-ids ${DS_ID} | jq -r ".[] | .[].DnsIpAddrs | .[]" | sed -n '1,1p'`
DNS_IP2=`aws ds describe-directories --directory-ids ${DS_ID} | jq -r ".[] | .[].DnsIpAddrs | .[]" | sed -n '2,2p'`
echo ${DNS_IP1}
echo ${DNS_IP2}
DHCPオプションを作成
コマンド
DHCPOPTIONS_FILE='DHCP_Options.json'
コマンド
cat << EOF > ${DHCPOPTIONS_FILE}
[
{
"Key": "domain-name",
"Values": ["${DS_NAME}"]
},
{
"Key": "domain-name-servers",
"Values": ["${DNS_IP1}", "${DNS_IP2}"]
}
]
EOF
cat "${DHCPOPTIONS_FILE}"
結果
[
{
"Key": "domain-name",
"Values": ["jawsug.local"]
},
{
"Key": "domain-name-servers",
"Values": ["10.0.0.150", "10.0.1.216"]
}
]
JSONファイルを検証
コマンド
jsonlint -q ${DHCPOPTIONS_FILE}
コマンド
DHCP_ID=`aws ec2 create-dhcp-options --dhcp-configuration file://${DHCPOPTIONS_FILE} | jq -r .DhcpOptions.DhcpOptionsId` && echo ${DHCP_ID}
作成されたDHCPオプションを確認
コマンド
aws ec2 describe-dhcp-options --dhcp-options-ids ${DHCP_ID}
結果
{
"DhcpOptions": [
{
"DhcpConfigurations": [
{
"Values": [
{
"Value": "jawsug.local"
}
],
"Key": "domain-name"
},
{
"Values": [
{
"Value": "10.0.0.150"
},
{
"Value": "10.0.1.216"
}
],
"Key": "domain-name-servers"
}
],
"DhcpOptionsId": "dopt-********"
}
]
}
VPCにDHCPオプションを関連づけます
VPCの状態を確認
コマンド
aws ec2 describe-vpcs --vpc-ids ${VPC_ID}
結果
{
"Vpcs": [
{
"VpcId": "vpc-********",
"InstanceTenancy": "default",
"Tags": [
{
"Value": "jawsug-cli",
"Key": "Name"
}
],
"State": "available",
"DhcpOptionsId": "dopt-********",
"CidrBlock": "10.0.0.0/16",
"IsDefault": false
}
]
}
DHCPオプションをVPCに関連づける
コマンド
aws ec2 associate-dhcp-options --dhcp-options-id ${DHCP_ID} --vpc-id ${VPC_ID}
結果
(返値無し)
DHCPオプションがVPCに関連づけられたことを確認
コマンド
aws ec2 describe-vpcs --vpc-ids ${VPC_ID}
{
"Vpcs": [
{
"VpcId": "vpc-********",
"InstanceTenancy": "default",
"State": "available",
"DhcpOptionsId": "dopt-********",
"CidrBlock": "10.0.0.0/16",
"IsDefault": false
}
]
}
以上です。