雑記帳
2014-09-29 (Mon) [長年日記]
■ [AWS] AWS CLIでセキュリティグループのルールをコピーする
いつも、セキュリティグループのルールをコピーしたいと思っているのだが、今のAWS CLIであれば、以前にやったRDSのパラメータグループをコピーしたのと同じ方法でできるのではないかと思ったので、やってみた。
$ aws ec2 describe-security-groups \ --filters 'Name=group-name,Values=src-sg' \ --query 'SecurityGroups[].IpPermissions[]' \ | tr -d '\d' \ | xargs -I{} -- aws ec2 authorize-security-group-ingress --group-id sg-deadbeaf --ip-permissions '{}' A client error (MissingParameter) occurred when calling the AuthorizeSecurityGroupIngress operation: Missing source specification: include source security group or CIDR information
エラーになってしまった。色々調べてみたら、以下の様な原因であることがわかった。
describe-security-groupsで取得したJSONには、IpRangesとUserIdGroupPairsの両方が項目として含まれている。セキュリティグループのルールは、対象としてCIDRを渡す他に、他のセキュリティグループを指定することができる。IpRangesには、IPアドレスが、UserIdGroupPairsには、セキュリティグループのIDが含まれる。
しかし、一つのルールにそれらが同時に含まれることはない。下記は、80/tcpを、IPアドレスとセキュリティグループを指定して定義したセキュリティグループのルールを取得したJSONの出力。別々のルールとして出力されていることが分かる。
% aws ec2 describe-security-groups --group-id 'sg-deadbeaf' --query 'SecurityGroups[].IpPermissions[]' [ { "ToPort": 80, "IpProtocol": "tcp", "IpRanges": [ { "CidrIp": "192.0.2.1/32" } ], "UserIdGroupPairs": [], "FromPort": 80 }, { "ToPort": 80, "IpProtocol": "tcp", "IpRanges": [], "UserIdGroupPairs": [ { "UserId": "nnnnnnnnnnnn", "GroupId": "sg-cafebabe" } ], "FromPort": 80 } ]
authorize-security-group-ingressに渡す前に、値が含まれていない項目を除去すれば使うことができる。ということで、ちょっとしたフィルタを作った。
このフィルタを通すと、IpRangesまたはUserIdGroupPairsのうち、値が含まれていない項目を削除してくれる。また、xargsで処理しやすいように、1ルール1行に変換する。
% aws ec2 describe-security-groups --group-id 'sg-deadbeaf' --query 'SecurityGroups[].IpPermissions[]' | ruby ./repos/sgfilter/sgfilter.rb '{"ToPort":80,"IpProtocol":"tcp","IpRanges":[{"CidrIp":"1n2.0.2.1/32"}],"FromPort":80}' '{"ToPort":80,"IpProtocol":"tcp","UserIdGroupPairs":[{"UserId":"nnnnnnnnnnnn","GroupId":"sg-cafebabe"}],"FromPort":80}'
これを使って、下記のように、xargsを使って実行する。
$ aws ec2 describe-security-groups \ --filters 'Name=group-name,Values=src-sg' \ --query 'SecurityGroups[].IpPermissions[]' \ | ruby sgfilter.rb \ | xargs -I{} -- aws ec2 authorize-security-group-ingress --group-id sg-deadbeaf --ip-permissions '{}'
これで、src-sgに含まれる許可ルールが、sg-deadbeafに対してコピーされることになる。
■ [Linux][Windows] RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (5)
前回までのあらすじ
- RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (1)
- 認証システムの方針について
- RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (2)
- 初期構築からドメインへの参加まで
- RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (3)
- ユーザのログイン
- RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (4)
- ホームディレクトリの自動作成とシェルの指定
realmdを使って(Sambaを使わないで)設定する
RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (2)では、samba-clientパッケージをいれてドメインへの参加を実施していた。実際にはSambaを使わないのに、samba-clientを入れるのがダメな感じであるので、新しい手段として、realmdを使ってのドメインの参加を試してみた。
パッケージの導入
RHEL7であれば、yumでインストールできる。
# yum -y install realmd
Active Directoryの情報取得(確認)
まだ、Kerberosやsssd、Sambaなどの設定をしていない状態で、realm discoverコマンドを実行して、ADの情報が取れるか確認する。
# realm discover --verbose * Resolving: _ldap._tcp.example.local * Performing LDAP DSE lookup on: 10.0.2.4 * Performing LDAP DSE lookup on: 10.0.130.4 * Successfully discovered: example.local example.local type: kerberos realm-name: EXAMPLE.LOCAL domain-name: example.local configured: no server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common
DHCP Options Setの設定で、DNSがADサーバに向いていれば、そこから情報を取得することができる。
required-packageとして出力されているパッケージを導入する。
# yum -y install oddjob oddjob-mkhomedir sssd adcli samba-common
どうやら、samba-commonはどうしても必要になってしまうようだ。
realmd設定
ほとんどデフォルトの設定のままではあるが、/etc/realmd.confに下記の設定を追加する。
# cat /etc/realmd.conf [users] default-home = /home/%D/%U default-shell = /bin/bash [active-directory] default-client = sssd [service] automatic-install = yes [example.local] computer-ou = OU=Computers,DC=example,DC=local automatic-id-mapping = yes fully-qualified-names = no
ドメインへの参加
realm joinコマンドで、ドメインに参加する。
# realm join example.local Password for Administrator:
これで、ドメインに参加できた。
前回行った、Kerberos, SSSDの設定については、すでに自動的に更新されている。また、Sambaの設定は不要となる。あとは、RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (3)の、SSSDの設定が完了したところから、設定を続ければ良い。