診断結果とリスク対策のアドバイスを提供 – @IT

このBlogは個人的に収集しているセキュリティ情報や製品情報について書いています。 また、トレンドマイクロ製品+パターン+ウィルスの情報も提供しています。 Trendmicro Japanがイエローアラート以上を出した場合いろいろな情報を提供するようにしています。 Matcha’s Security Blogにてセキュリティ情報(英語)も提供し … 続きを読む

カテゴリー 未分類 | タグ

Webサイトのクラウド移行時に絶対変えるべき3つのセキュリティ対策

例えばAlfrescoのツール「Prowler」を使えば、Cloud Infrastructure Security(CIS)Foundation Benchmarkのような著名な標準への違反がないかどうか、クラウドを動的に調べることができる。このツールはCIS標準に照らしてリソースを定期的に評価し、違反を報告して、適切に対処できるようにする。Prowlerは、AWSのAPIを … 続きを読む

Rancher2.0 Tech Preview2 ~Create a RKE Cluster~

Rancher2.0 Tech Preview2の主要機能として追加された「Create a RKE Cluster」は、RKE(Rancher Kubernetes Engine)を利用して、AWS、Azure、DigitalOcean、Packet、vSphereに対してKubernetesクラスタを作成することができます。(※2018年2月現在)

Rancher2.0 Tech Preview2からAWS上にKubernetesクラスタを作成してみましょう。

Tech Preview2のインストールはRancher2.0 Tech Preview2についての「Get Started with Rancher 2.0」を参考にしてください。

Rancher2.0 Tech Preview2でAWS上にKubernetesクラスタを作成

1.Rancher2.0 Tech Preview2 Serverにログイン後に、「Add Cluster」ボタンをクリックします。

image.png

2.「Create a RKE Cluster」の「Select」ボタンをクリックします。

image.png

3.nameに任意名を入力(今回はaws-k8s-clusterとします。)して、「Add a new cluster」をクリックします。

image.png

4.「Configure」をクリックします。

image.png

5.「Amazon EC2」を選択し、nameに任意名を入力(今回はaws-k8s-clusterとします。)し、Countは「3」、Regionは「ap-northeast-1」、Access keyとSecret keyはAWSのIMA Management Consoleでグループとユーザを作成し、そのユーザーのものを入力します。そして、「Next:Authenticate & select a network」ボタンをクリックします。

image.png

6.vpcを選択して、「Next:Select a Security Group」ボタンをクリックします。

image.png

7.「Next:Set Instance options」ボタンをクリックします。

image.png

8.「Create」ボタンをクリックします。

image.png

9.kubernetesの構成を作成します。最後に「Create」ボタンをクリックします。

image.png

10.しばらくするとkubernetesクラスタ構築が完了します。

screencapture-35-198-222-0-g-clusters-1517843931311.png

クラスタ名をクリックすると全体のリソース状況が可視化されます。

screencapture-35-198-222-0-c-cluster-8p8bq-1517844232326.png

11.上部メニュー「Nodes」を選択します。

AWS上に構築されたkubernetesクラスタの状況を確認できます。各クラスタ名をクリックするとリソース状況が可視化されます。

image.png

12.「KubeConfig File」ボタンをクリックします。

image.png

kubectlコマンドのconfigファイルをクリップボードにコピーできます。

image.png

kubectlコマンドを実行できるクライアントをローカルまたはサーバで構築します。今回はGCP上にGCEのインスタンス(Ubuntu 16.04 LTS)を1台用意します。

コマンド
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

$ chmod +x ./kubectl

$ sudo mv ./kubectl /usr/local/bin/kubectl

$ mkdir .kube

$ vim .kube/config
#クリップボードにコピーした内容をペーストして保存します。
:wq

$ kubectl get nodes
NAME               STATUS    ROLES         AGE       VERSION
aws-k8s-cluster1   Ready     etcd,master   26m       v1.8.5-rancher1
aws-k8s-cluster2   Ready     worker        23m       v1.8.5-rancher1
aws-k8s-cluster3   Ready     worker        25m       v1.8.5-rancher1

これで、kubectlコマンドでアプリケーションをデプロイすることが可能となります。

13.AWSのコンソールを確認します。

インスタンスが3台で来ていることが確認できます。

image.png

以上となりますが、AWS以外のAzure、DigitalOcean、Packet、vSphereも同様にRKEでkubernetesクラスタを構築できると思います。

参考資料

RKE(Rancher Kubernetes Engine)

続きを読む

AWS 認定ソリューションアーキテクト – アソシエイト を1ヵ月で合格するためにしたこと

AWSの認定資格「ソリューションアーキテクト – アソシエイト」に合格することができました。
1ヵ月の間にどのような対策を行ったかメモとして残したいと思います。

自分のスペックは、

  • インフラ業務3年
  • AWS実務経験無し

です。

勉強法

取っ掛かりは以下の2つを平行して行いました。

  • 実際に手を動かしてみる
  • AWSで使用する単語を理解する

何も分からない状態からのスタートでしたが、アカウントの登録から始めてAWSが公開している公式ガイドを参考に環境を構築することができました。

WordPress ウェブサイトを構築する

ガイドに従って操作して、分からない単語があれば調べます。
ガイドの表現で分かりにくい部分はSlideShareのスライドを参考にしました。
検索窓に「AWS」と入力して検索するとたくさんのドキュメントが見つかります。

環境構築の費用ですが、AWSの12か月無料利用枠を活用すれば殆ど費用は掛かりません。
検証する時だけリソースを起動し、終了時にはリソースを停止するようにして進めたところ、発生したコストは$1ぐらいでした。


その後は問題集サイトのAWS WEB問題集で学習しようで有料会員登録を行い、問題を解き続けました。
問題集には参考になる資料へのリンクが多く載せられており理解が進みます。

問題を通して何が分かっていないかを確認し、分からない箇所があれば繰り返し復習しました。

500問程度回答したところで模擬試験を受講、1000問程度回答したところで本番試験に臨みました。

結果

総合評点: 83%

トピックレベルスコアリング:
1.0  Designing highly available, cost-efficient, fault-tolerant, scalable systems: 81%
2.0  Implementation/Deployment: 66%
3.0  Data Security: 90%
4.0  Troubleshooting: 100%

WEB問題集で出題された問題と同じ内容の問題は1割、2割程度でした。
問題集の回答を丸暗記する方法では難しいと感じました。

まとめ

個人的には試験の難易度は簡単ではないと感じましたが、既に参考になるブログやドキュメントが数多くあるため、実務経験が無くとも試験対策は十分に可能でした。

このメモがこれから試験に臨む方の役に立てば幸いです。

続きを読む

boto3を使った一時的なAWS認証情報の取得

概要

IAMロールの切り替えを利用している場合の一時的なAWS認証情報の取得方法について説明します。boto3を使うと、AWS CLIのプロファイル設定をもとに認証情報を簡単に取得することができます。

IAMロールの切り替え

AWS CLIでIAMロールの切り替えを行う場合は、以下のようなプロファイル設定をします。

~/.aws/config
[profile prodaccess]
role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole
source_profile = default

設定内容の詳細については以下のページが参考になります。

IAM ロールの切り替え(AWS Command Line Interface) – AWS Identity and Access Management
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html

また、IAMロールの切り替え自体については以下のページが参考になります。

チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任 – AWS Identity and Access Management
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

boto3を使った一時的なAWS認証情報の取得

使用したバージョンは以下の通りです。
* Python 3.6.4
* boto3 1.5.21

boto3は明示的にIAMロールの切り替えを行わなくても、プロファイル設定を見て必要があれば自動的にIAMロールの切り替えを行ってくれます。そのため、以下のような簡単なPythonコードで一時的なAWS認証情報を取得できます。

credentials.py
import boto3

session = boto3.session.Session(profile_name='prodaccess')
credentials = session.get_credentials()

print('export AWS_ACCESS_KEY_ID={}'.format(credentials.access_key))
print('export AWS_SECRET_ACCESS_KEY={}'.format(credentials.secret_key))
print('export AWS_SESSION_TOKEN={}'.format(credentials.token))

このコードを実行すると以下のような出力が得られます。この出力をシェルで評価すると一時的なAWS認証情報として利用することができます。

$ python3 credentials.py
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SESSION_TOKEN=AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLECvSRyh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDyEXAMPLEKEY9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3UusKdEXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLENhykxiHenDHq6ikBQ==

ただし、この方法では認証情報の有効時間を指定できないため、デフォルトの1時間が適用されます。

認証情報の有効時間(DurationSeconds)については以下に記載があります。

AssumeRole – AWS Security Token Service
https://docs.aws.amazon.com/ja_jp/STS/latest/APIReference/API_AssumeRole.html

続きを読む

AWSセキュリティとコンプライアンス勉強まとめ

AWS責任共有モデル

  • お客様自身でクラウドをコントロール可能
    ネットワーク、サーバ、セキュリティなどなど
  • AWSがクラウドのセキュリティを担当。AWS基本サービス

AWS の責任はクラウドのセキュリティ(Security "of" the Cloud)
AWS は、AWS クラウドで提供されるすべてのサービスを実行するインフラストラクチャの保護に責任を負います。
このインフラストラクチャはハードウェア、ソフトウェア、ネットワーキング、AWS クラウドのサービスを実行する施設で構成されます。
データセンターの物理セキュリティ
ネットワークセキュリティ(DDoS攻撃対策、ポートスキャニング対策、)
論理的なセキュリティ(ホストOS、ゲストOS)
従業員・アカウントの管理
データセキュリティ
ストレージの廃棄プロセス

お客様の責任はクラウドにおけるセキュリティ(Security "in" the Cloud)
お客様の責任は、選択した AWS クラウドのサービスに応じて異なります。選択によって、セキュリティに関する責任の一環としてお客様が実行する構成作業の量が決定します。例えば、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Virtual Private Cloud (Amazon VPC)、Amazon S3 などのサービスは Infrastructure as a Service (IaaS) に分類されているため、必要なすべてのセキュリティ構成および管理のタスクをお客様が実行する必要があります。お客様が Amazon EC2 インスタンスをデプロイした場合、お客様は、ゲストオペレーティングシステムの管理 (更新やセキュリティパッチなど)、インスタンスにインストールしたアプリケーションソフトウェアまたはユーティリティの管理、AWS より各インスタンスに提供されるファイアウォール (セキュリティグループと呼ばれる) の構成に責任を負います。
IAM, KMS, CloudTrail, Trusted Advisor, VPC, セキュリティグループなどなど
サーバーOS、セキュリティ
Amazon Inspector(セキュリティ診断サービス)
ネットワークセキュリティ(VPCなど)
論理的アクセスコントロール(IAMなど)
Key Management Service
CloudHSM(ハードウェアセキュリティモジュール)
CloudTrail

参考URL:https://aws.amazon.com/jp/compliance/shared-responsibility-model/

Security by Design(SbD)
AWSアカウントの設計の規格化、セキュリティ制御の自動

CloudFormationで設計をテンプレート化

Trusted Advisor定期的な調査

参考URL:https://www.slideshare.net/AmazonWebServicesJapan/awswebinar-aws-59853341

続きを読む

[AWS][Terraform] Terraform で Amazon Inspector を導入する

TerraformAmazon Inspector を導入して、CloudWatch Events で定期実行させるための手順。
Terraform は v0.11.2 を使っています。

Inspector の導入

Inspector を導入するには、Assessment targets (評価ターゲット) と Assessment templates (評価テンプレート) を設定する必要があります。

Assessment targets の設定

Terraform で Assessment targets を設定するには、aws_inspector_resource_group, aws_inspector_assessment_target リソースを使用します。
こんな感じです。

inspector_target.tf
variable "project" { default = "my-big-project" }
variable "stage"   { default = "production" }

resource "aws_inspector_resource_group" "inspector" {
    tags {
        project   = "${var.project}"
        stage     = "${var.stage}"
        inspector = "true"
    }
}

resource "aws_inspector_assessment_target" "inspector" {
    name               = "my-inspector-target"
    resource_group_arn = "${aws_inspector_resource_group.inspector.arn}"
}

aws_inspector_resource_group では、対象となるインスタンスを特定するための条件を記述します。
上記の例だと、以下のタグが設定されているインスタンスを対象にします。

Name Value
project my-big-project
stage production
inspector true

aws_inspector_assessment_target では、aws_inspector_resource_group で定義した条件を元に Assessment targets を作成します。

Assessment templates の設定

Terraform で Assessment templates を設定するには、aws_inspector_assessment_template リソースを使用します。
こんな感じです。

inspector_template.tf
variable "inspector-rule" = {
    type = "list"
    default = [
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu"
    ]
}

resource "aws_inspector_assessment_template" "inspector" {
    name       = "my-inspector-template"
    target_arn = "${aws_inspector_assessment_target.inspector.arn}"
    duration   = 3600

    rules_package_arns = [ "${var.inspector-rule}" ]
}

output "assessment_template_arn" {
    value = "${aws_inspector_assessment_template.inspector.arn}"
}

rules_package_arns では、利用可能な Inspector rule package の ARN を設定します。
variable にしておくと、後で rule package を変更したい時に楽ですね。
こんな感じで、使用する rule package を変更できます。

terraform.tfvars
"inspector-rule" = [
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
    "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq"
]

使用できる rule package は、aws-cli で取得してください。

# パッケージ一覧の表示
$ aws --region ap-northeast-1 inspector list-rules-packages
{
    "rulesPackageArns": [
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-bBUQnxMq",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-gHP9oWNT",
        "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-knGBhqEu"
    ]
}
# 詳細を確認
$ aws --region ap-northeast-1 inspector describe-rules-packages 
  --rules-package-arns "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu"
{
    "rulesPackages": [
        {
            "description": "The CIS Security Benchmarks program provides well-defined, un-biased and consensus-based industry best practicesto help organizations assess and improve their security.nnThe rules in this package help establish a secure configuration posture for the following operating systems:nn  -   Amazon Linux version 2015.03 (CIS benchmark v1.1.0)n  n    ",
            "version": "1.0",
            "name": "CIS Operating System Security Configuration Benchmarks",
            "arn": "arn:aws:inspector:ap-northeast-1:406045910587:rulespackage/0-7WNjqgGu",
            "provider": "Amazon Web Services, Inc."
        }
    ],
    "failedItems": {}
}

参考URL: Terraform v0.8.5でAWS Inspectorに対応します

これで terraform apply すれば Assessment targets, templates が作成されます。

動作確認

実際に Inspector が実施されるか確認して見ましょう。

$ aws inspector start-assessment-run 
  --assessment-template-arn arn:aws:inspector:ap-northeast-1:************:target/0-xxxxxxxx/template/0-xxxxxxxx
{
    "assessmentRunArn": "arn:aws:inspector:ap-northeast-1:************:target/0-xxxxxxxx/template/0-xxxxxxxx/run/0-7WNjqgGu"
}

実行状況の確認は aws inspector describe-assessment-runs

$ aws inspector describe-assessment-runs 
  --assessment-run-arns arn:aws:inspector:ap-northeast-1:************:target/0-QOvPswHA/template/0-uCIUy636/run/0-n9nnWOem

CloudWatch Events Schedule による定期実行

当初は CloudWatch Events で定期実行するには Lambda から呼び出すようにしなければいけませんでした。
しかし、CloudWatch Event から直接 Inspector を実行できるようになったため、Lambda を使用しなくても aws_cloudwatch_event_targetaws_cloudwatch_event_rule だけで定期実行設定が可能です。

CloudWatch Events で使用する IAM ロールの作成

まずは、CloudWatch Events で使用する IAM ロールを作ります。

cloudwatch-events-iam-role.tf
esource "aws_iam_role" "run_inspector_role" {
    name               = "cloudwatch-events-run-inspector-role"
    assume_role_policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
POLICY
}

resource "aws_iam_policy" "run_inspector_policy" {
    name        = "cloudwatch-events-run-inspector-policy"
    description = ""
    policy      = <<POLICY
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "inspector:StartAssessmentRun"
            ],
            "Resource": "*"
        }
    ]
}
POLICY
}

resource "aws_iam_role_policy_attachment" "run_inspector_role" {
    role       = "${aws_iam_role.run_inspector_role.name}"
    policy_arn = "${aws_iam_policy.run_inspector_policy.arn}"
}

CloudWatch Events への登録

CloudWatch Events に登録するために aws_cloudwatch_event_target リソースと aws_cloudwatch_event_rule を作りましょう。

cloudwatch-events.tf
variable "schedule"    { default = "cron(00 19 ? * Sun *)" }

resource "aws_cloudwatch_event_target" "inspector" {
  target_id = "inspector"
  rule      = "${aws_cloudwatch_event_rule.inspector.name}"
  arn       = "${aws_inspector_assessment_template.inspector.arn}"
  role_arn  = "${aws_iam_role.run_inspector_role.arn}"
}

resource "aws_cloudwatch_event_rule" "inspector" {
  name        = "run-inspector-event-rule"
  description = "Run Inspector"
  schedule_expression = "${var.schedule}"
}

schedule_expression の cron() は UTC で設定する必要があるので注意してください。
記述方法は、以下を参考に
参考URL: Rate または Cron を使用したスケジュール式

EC2 への IAM Role の設定と、ユーザーデータによる Inspector エージェントのインストール

評価ターゲットとなる EC2 には、Inspector エージェントがインストールされていて、適切なインスタンスロールが設定されている必要があります。
導入するには、こんな感じ

インスタンスロール

inspectora エージェントを使用するために必要なポリシーをアタッチしたインスタンスロールの作成はこんな感じです。

ec2-instance-role.tf
resource "aws_iam_role" "instance_role" {
    name               = "my-ec2-role"
    path               = "/"
    assume_role_policy = <<POLICY
{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
POLICY
}

resource "aws_iam_instance_profile" "instance_role" {
    name = "my-ec2-role"
    role = "${aws_iam_role.instance_role.name}"
}

resource "aws_iam_policy" "inspector" {
    name        = "my-ec2-iam-policy-inspector"
    description = ""
    policy      = <<POLICY
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeCustomerGateways",
                "ec2:DescribeInstances",
                "ec2:DescribeTags",
                "ec2:DescribeInternetGateways",
                "ec2:DescribeNatGateways",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePrefixLists",
                "ec2:DescribeRegions",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcPeeringConnections",
                "ec2:DescribeVpcs",
                "ec2:DescribeVpn",
                "ec2:DescribeVpnGateways",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "elasticloadbalancing:DescribeLoadBalancerAttributes",
                "elasticloadbalancing:DescribeRules",
                "elasticloadbalancing:DescribeTags",
                "elasticloadbalancing:DescribeTargetGroups",
                "elasticloadbalancing:DescribeTargetHealth"
            ],
            "Resource": "*"
        }
    ]
}
POLICY
}

resource "aws_iam_role_policy_attachment" "inspector" {
    role       = "${aws_iam_role.instance_role.name}"
    policy_arn = "${aws_iam_policy.inspector.arn}"
}

ユーザーデータによる inspector エージェントのインストール

OS は Amazon Linux を想定してます。
ユーザーデータに書いておけば、インスタンス起動直後に inspector エージェントインストールできますね。
参考URL: Amazon Inspector エージェントをインストールする

ssh-key.pemssh-key.pem.pubssh-keygen で適当に作っておきましょう。

ec2.tf
## AMI
##
data "aws_ami" "amazonlinux" {
    most_recent = true
    owners      = ["amazon"]

    filter {
        name   = "architecture"
        values = ["x86_64"]
    }

    filter {
        name   = "root-device-type"
        values = ["ebs"]
    }

    filter {
        name   = "name"
        values = ["amzn-ami-hvm-*"]
    }

    filter {
        name   = "virtualization-type"
        values = ["hvm"]
    }

    filter {
        name   = "block-device-mapping.volume-type"
        values = ["gp2"]
    }
}

## SSH Key Pair
##
resource "aws_key_pair" "deployer" {
    key_name   = "ssh-key-name"
    public_key = "${file(ssh-key.pem.pub)}"
}

## EC2
##
resource "aws_instance" "ec2" {
    ami                         = "${data.aws_ami.amazonlinux.id}"
    instance_type               = "t2.micro"
    key_name                    = "${aws_key_pair.deployer.key_name}"
    iam_instance_profile        = "${aws_iam_instance_profile.instance_role.name}"

    user_data                   = <<USERDATA
#!/bin/bash
# install inspector agent
cd /tmp
/usr/bin/curl -O https://d1wk0tztpsntt1.cloudfront.net/linux/latest/install
/bin/bash install -u false
/bin/rm -f install
USERDATA

    tags {
        project   = "${var.project}"
        stage     = "${var.stage}"
        inspector = "true"
    }
}

現場からは以上です。

続きを読む

AWS MediaLiveを使って見た

こんにちは、動画チームのhagi@streampackです。

はじめに

東京リージョンにMediaLiveがきたので試して見ることに。
発表当時はノースバージニアを試したが今回は東京のをテスト。

構成

今回の構成はMediaLive->MediaPackageの構成で作ることにする。
実際配信する際はおそらくCDNを利用すると思われますがMediaLiveはCloudFrontのオリジンになれなし、MediaStoreは東京リージョンにない。

とはいえ今回はCDNの設定は省きます。

MediaPackage

MediaLiveでデスティネーションが2つ必要なのでまずはMediaPackageのチャンネルを二つ作成。

Channel作成

スクリーンショット 2018-01-30 11.53.17.png

  1. チャンネルを作成
  2. 必須は”ID” – 用途がわかりやすいIDが良い。ここではdemoAとしました。
  3. Descriptionはチャンネルの説明
  4. ”Input type”はまだHLSのみ

Endpoint 作成

endpointは配信するURL作成。
今回はデフォルト設定で行くのでIDだけを入力してあとは割愛

スクリーンショット 2018-01-30 11.58.23.png

Saveを押下するとendpointが作成されてURLが表示される。

demoA.png

MediaLiveでは”Input URL”、”Username”、”Password”が必要

MediaLiveではMediaPackageのデスティネーション(Input URL)が二つ必要なので上記手順を再度行う。

結果、異なるInput URLが2つできた

demoAB.png

MediaLive

スクリーンショット 2018-01-30 12.30.53.png

General Info

medialive_general.png

  1. ”Channel name” を入力 – チャンネルの用途がわかりやすい名前がおすすめ
  2. ”IAM role”の作成または既存のIAM roleの指定

Channel Input

“Create input”を押下
スクリーンショット 2018-01-30 13.17.57.png

Input details

  1. ”Input name”に入力の名前を入力
  2. ”Input type”でエンコーダーからの配信方式を入力 – 今回はPCからrtmpで配信を行う予定なのでrtmp(push)を選択

Input security group

rtmp送出先のセキュリティーグループを設定可能
今回は全てから受け付けるため、0.0.0.0/0で作成後選択

Input destinations

rtmpのendpointを作成

なぜかApplication nameだけでも登録はできるがApplication instanceが無いと受け付けない

For RTMP PUSH inputs, you must specify two destination application names and instances.

今回は下記を設定

application name: live
application instance : demoA, demoB

application instanceはストリーム名となります。

するとendpoint rtmp://XXX.XXX.XXX.XXX:1935/live/demoA と endpoint rtmp://XXX.XXX.XXX.XXX:1935/live/demoB が作成されます。

channel_input.png

Channel template

今回はライブ配信には既存のテンプレートをLive eventを利用

スクリーンショット 2018-01-30 15.58.18.png

するとOutputsが作成されます。

Outputs

スクリーンショット 2018-01-30 15.59.03.png

HD

Output groupsの HD(HLS)を押下

HLS group destination A

  1. “HLS group destination A”にMediaPackage demoA情報を入力

URL:Input URL
      Username:Username
      Password:”Create AWS Elemental MediaLive parameter”を選択後 “Name”には任意の名前を入力。Password valueはMediaPackageのパスワードを入力

  1. Create AWS Elemental MediaLive parameterを押下

demoA_out.png

HLS group destination B

上記同様”HLS group destination B”にMediaPackage demoB情報を入力

Create channelを押下

確認

以前書いたのですがrtmpの投げ方はこちら(でどうやってrtmpを投げるの?)をご確認ください。

まずはMediaLiveで作成したチャンネルをスタート!

送出先情報

送出先につきましてはどちらでも両方でも問題ありません。
実際demoAとdemoBは全く関係ありません。

非常に残念ですが
demoAの入力はdestination Aに出力され、demoBはdestination Bに出力されます。
特にfailoverが構成されているとか両系で流さないと行けないわけでは無いです。

ただ設定する際にdestinationが2つ必要なのです。

あまり意味が無いように思えますがDNSなりでダイナミックにストリームも変更できるかもしれません。
もしくはマニフェストを編集して両方含めるとかとか。。。
個人的に別々のストリームを流すのもいいかと思います。

demoA

URL(MediaLive Channel inputより):rtmp://XXX.XXX.XXX.XXX:1935/live/
ストリーム名:demoA

demoB

URL(MediaLive Channel inputより):rtmp://XXX.XXX.XXX.XXX:1935/live/
ストリーム名:demoB

視聴情報

HLSの生ストリームなのでSafariやEdgeで確認することができる。AndroidもChromeだと視聴可能

demoA

MediaPackageで作成したdemoAのEndpoint

https://XXXXXXXXXXXXXXXXX.mediapackage.ap-northeast-1.amazonaws.com/out/v1/XXXXXXXXXXXXXXXXXXXXXXXX/index.m3u8

demoB

MediaPackageで作成したdemoBのEndpoint

https://XXXXXXXXXXXXXXXXX.mediapackage.ap-northeast-1.amazonaws.com/out/v1/XXXXXXXXXXXXXXXXXXXXXXXX/index.m3u8

最後に

MediaLiveを使って見て非常に設定が簡単である印象を受けました。

ただ編集オプションが無いので一度作成したチャンネルを変更したければCloneするしか無いと思います。
またCloneした場合でも元で使っているinputが利用できなくなる。
そのためoutput設定を保存するか、チャンネルをdelete後すぐにCloneすれば設定は持っていけるが少々めんどくさい。
またdestinationが2つ必要なのはもしかしして起動したら2個分料金取られるんだろうなと個人的に思いました。

続きを読む

AWS IAM勉強まとめ

・Identity and Access Management
AWS操作をセキュアに行うための認証・認可・アクセスポリシーの仕組み

「IAM ユーザー」単位に発行できるアクセスキーは最大2個
3個目を発行しようとすると “Cannot exceed quota for AccessKeysPerUser: 2” とエラーになる

・ユーザ
5000ユーザまで作成可能

・グループ
100グループまで作成可能

・MFA(Multi-Factor Authentication)
多要素認証

・ルートアカウントは極力利用しない

Credential Report
認証情報のレポート

・パスワードローテーション
パスワードの有効期限設定可能

管理ポリシー
独立したポリシー。AWS管理ポリシーカスタマー管理ポリシーが存在
→再利用可能。変更管理の一元化。複数のIAMエンティティにアタッチあk脳

インラインポリシー
従来のIAMポリシー。1つのポリシーを共有できない

・デフォルトdeny

・ポリシーはユーザーベースとリソースベースで設定可能
特定のIPからのみ接続可能のような設定も可能

・CloudTrailでユーザのアクティビティのログ収集。S3上に保管

・最小限の特権。Service Ladr Accessed Data
未使用または最近使われてないユーザとサービスを特定。グループに分ける

・IAMロール
サービスやアプリケーションなどのエンティティに操作権限を付与
ユーザやグループに紐付かない
認証情報は自動的にローテーション
認証情報はSTSで作成
→EC2に認証情報がないため、安全
SDK, CLIに対応

・AWSアカウント: ドアキー
IAMユーザ: 従業員カード
Temporary Security Credential, IAM Role: ホテルキー

・クロスアカウントアクセス

・ID連携
LDAP認証したユーザにはS3権限を与えるなど。
ユーザにはTemporaryキーを与える
SAML2.0(Security Assertion Markup Language)と互換性

・SAML認証
ユーザ→Idpに認証情報リクエスト→認証情報受け取り→AWS STS(Security Token Service)に問い合わせ→一時的な認証情報受け取り→AWSサービスにアクセス

・SSOエンドポイントを利用
サインインURLをクライアントに返答
→クライアントはリダイレクトでコンソールにアクセス
コンソールが使用できる時間や時間帯を制御可能

・既存のIdpを利用
IdpとSTSで通信。ユーザはコンソールへリダイレクトできる

・ルートアカウントは使用しない
・個々のIAMユーザ作成
・ユーザへのアクセスはグループ
・最小限の特権
・強度の高いパスワードポリシー
・特権ユーザにはMFA
・認証情報を共有せず、ロールを使用
・監視も大事に

参考URL:
https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-aws-identity-and-access-management-aws-iam

続きを読む