<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>アーサー・C・ダントー | 伊東屋TECHブログ</title>
	<atom:link href="https://tech-itoya.com/author/a-c-danto/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech-itoya.com</link>
	<description>千葉県・船橋市の総合園芸店が運営する技術ブログ</description>
	<lastBuildDate>Fri, 06 Dec 2024 14:49:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://tech-itoya.com/wp-content/uploads/2024/10/cropped-itoya-logo-32x32.png</url>
	<title>アーサー・C・ダントー | 伊東屋TECHブログ</title>
	<link>https://tech-itoya.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>各リージョンで有効化したGuardDutyの検出結果を管理者に通知する</title>
		<link>https://tech-itoya.com/%e5%90%84%e3%83%aa%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%a7%e6%9c%89%e5%8a%b9%e5%8c%96%e3%81%97%e3%81%9fguardduty%e3%81%ae%e6%a4%9c%e5%87%ba%e7%b5%90%e6%9e%9c%e3%82%92%e7%ae%a1%e7%90%86%e8%80%85/</link>
					<comments>https://tech-itoya.com/%e5%90%84%e3%83%aa%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%a7%e6%9c%89%e5%8a%b9%e5%8c%96%e3%81%97%e3%81%9fguardduty%e3%81%ae%e6%a4%9c%e5%87%ba%e7%b5%90%e6%9e%9c%e3%82%92%e7%ae%a1%e7%90%86%e8%80%85/#respond</comments>
		
		<dc:creator><![CDATA[アーサー・C・ダントー]]></dc:creator>
		<pubDate>Fri, 06 Dec 2024 14:33:46 +0000</pubDate>
				<category><![CDATA[TECH記事]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://tech-itoya.com/?p=241</guid>

					<description><![CDATA[こんにちは。ダントーです。 今回は、セキュリティ施策のために東京リージョン以外の各リージョンでGuardDurtyを有効化したけど検出結果をどうやって管理者に通知するかで悩んでいる方向けの記事です。 簡素ではありますが、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。ダントーです。</p>



<p>今回は、セキュリティ施策のために東京リージョン以外の各リージョンでGuardDurtyを有効化したけど検出結果をどうやって管理者に通知するかで悩んでいる方向けの記事です。</p>



<p>簡素ではありますが、いくつかある選択肢を比較考量していく中で自分の環境に最適な構成を選ぶ材料となれば幸いです。</p>



<p>では、いきましょう。</p>



<p></p>



<p><strong>想定検索ワード</strong>：<span class="marker-under">GuardDuty 検出結果 通知 東京リージョン以外</span></p>



<h2 class="wp-block-heading">TL;DR;</h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="311" src="https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-02-1024x311.png" alt="" class="wp-image-263" srcset="https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-02-1024x311.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-02-300x91.png 300w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-02-768x233.png 768w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-02.png 1335w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">1. 可能なオプションについて考える</h2>



<p>まずは各リージョンの検出結果を管理者に通知するにあたって、どのようなオプションが可能なのか考えていきます。</p>



<h3 class="wp-block-heading">① 各リージョンにEventBridgeルールとSNSトピックを作成する</h3>



<p>簡単な構成図を書くとこのようになります。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1002" height="584" src="https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-1.png" alt="" class="wp-image-244" srcset="https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-1.png 1002w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-1-300x175.png 300w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-1-768x448.png 768w" sizes="(max-width: 1002px) 100vw, 1002px" /></figure>



<p>かなり愚直な選択肢ではありますが、構成上の統一感という意味ではこの選択肢も悪くないのかもしれません。</p>



<p>しかし各リージョンにEventBridgeルールやSNSトピックを作る必要があり、またSNSトピックについては都度サブスクライブを行わなくてはいけない点はデメリットとなります。</p>



<p>加えて、検出結果をフィルタリング&amp;整形しようとすると各リージョンのEventBridgeルールに同一設定を入れなくてはいけない点もやや微妙と言えるでしょう。</p>



<p>まとめると&#8230;</p>



<p><strong><span class="marker-under"><span class="marker-under-blue">メリット</span></span></strong></p>



<ul class="wp-block-list">
<li>構成上の統一感あり</li>



<li>構築自体の難易度は低め(同一設定の繰り返しとなるためとっつきやすい)</li>
</ul>



<p><span class="marker-under"><strong><span class="marker-under-red">デメリット</span></strong></span></p>



<ul class="wp-block-list">
<li>SNSを各リージョンごとにサブスクライブしなくてはいけない</li>



<li>リソースの作成が冗長的になる(同一リソース・同一設定の繰り返しとなるため)</li>
</ul>



<h3 class="wp-block-heading">② 東京リージョンCustom event busで集約する</h3>



<p>先ほどの①のパターンから東京リージョン以外のSNSトピックを削除します。</p>



<p>つまり、全リージョンの検出結果を一度東京リージョンに集約し、東京リージョンのSNSトピックから管理者に通知を行います。</p>



<p>構成図としては以下のようになります。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="591" src="https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2-1024x591.png" alt="" class="wp-image-249" srcset="https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2-1024x591.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2-300x173.png 300w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2-768x443.png 768w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2-120x68.png 120w, https://tech-itoya.com/wp-content/uploads/2024/11/danto-20241123-2-2.png 1109w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>フローとしては、全リージョン(東京リージョンを含む)での検出結果を東京リージョンのカスタムイベントバスに送信し、カスタムイベントバスに紐づけたルールでファイルタリング&amp;整形を行います。</p>



<p>①と比較すると、東京リージョン以外ではSNSトピックが無くなり、東京リージョンではカスタムイベントバスとフィルタリングルールが増えています。</p>



<p>つまり各リージョンでサブスクライブする必要が無くなった一方で、東京リージョンでは検出結果を集約するカスタムイベントバスとフィルタリング&amp;整形用のルールを作成する必要が生じているということです。</p>



<p>まとめると&#8230;</p>



<p><strong><span class="marker-under-blue">メリット</span></strong></p>



<ul class="wp-block-list">
<li>東京リージョン以外でSNSトピックを作成する必要がない</li>



<li>フィルタリング&amp;整形用の同一設定を入れなくて済む</li>
</ul>



<p><strong><span class="marker-under-red">デメリット</span></strong></p>



<ul class="wp-block-list">
<li>構築難易度は低くはない(①と比較してですが)</li>
</ul>



<h3 class="wp-block-heading">③ AWS Security Hubのリージョン集約を有効化する</h3>



<p>3つ目の選択肢は、AWS Security Hubでのクロスリージョン集約機能を有効化し、各リージョンの検出結果をメインの東京リージョン(=ホームリージョン)に集めるというものです。</p>



<p>構成図は以下のようになります。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="589" src="https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01-1024x589.png" alt="" class="wp-image-262" srcset="https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01-1024x589.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01-300x173.png 300w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01-768x442.png 768w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01-120x68.png 120w, https://tech-itoya.com/wp-content/uploads/2024/12/danto-20241206-01.png 1171w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Security Hubを使うことで東京リージョン以外にEventBridgeのリソースを作る必要がない点が、これまでの構成とは異なっています。</p>



<p>この場合だと、各リージョンの検出結果を(東京リージョンの)SecurityHubコンソール上から一挙に確認できるという視認性の良さはメリットになるはずです。</p>



<p>一方で、全リージョンでSecurity Hubを有効化しなくてはならないという点はデメリットになるかもしれません。</p>



<p>(これについては、セキュリティ要件として全リージョンですでにSecurity Hubを有効化していた場合はデメリットにはならないでしょう。)</p>



<p>まとめると&#8230;</p>



<p><strong><span class="marker-under-blue">メリット</span></strong></p>



<ul class="wp-block-list">
<li>構築難易度は低い(設定を有効化するだけ)</li>



<li>検出結果の視認性が良い</li>
</ul>



<p><strong><span class="marker-under-red">デメリット</span></strong></p>



<ul class="wp-block-list">
<li>全リージョンでSecurity Hubを有効化する必要がある</li>
</ul>



<p></p>



<p></p>



<p>以上で、選択肢の比較考量は終わりです。</p>



<p>実装については、また別の機会に記事にしたいと思います。</p>



<p></p>



<h2 class="wp-block-heading">2. 参考記事</h2>



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/finding-aggregation.html">Security Hub でのクロスリージョン集約について &#8211; AWS Security Hub</a>
<ul class="wp-block-list">
<li>クロスリージョン集約に関するAWS公式ドキュメント</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-event-bus.html">Amazon のイベントバス EventBridge &#8211; Amazon EventBridge</a>
<ul class="wp-block-list">
<li>EventBridgeのイベントバスに関するAWS公式ドキュメント</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><a href="https://dev.classmethod.jp/articles/guarduty-finding-aggregated-by-eventbridge/">GuardDuty 全リージョン分の検出結果を EventBridge で集約してからメール通知する CloudFormation テンプレートの紹介 | DevelopersIO</a>
<ul class="wp-block-list">
<li>EventBridgeからSNSで管理者に通知する仕掛けを紹介しているクラメソ記事</li>
</ul>
</li>
</ul>
		<div class="wpulike wpulike-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="241"
					data-ulike-nonce="67dcf60fed"
					data-ulike-type="post"
					data-ulike-template="wpulike-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_241"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
					<wfw:commentRss>https://tech-itoya.com/%e5%90%84%e3%83%aa%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%a7%e6%9c%89%e5%8a%b9%e5%8c%96%e3%81%97%e3%81%9fguardduty%e3%81%ae%e6%a4%9c%e5%87%ba%e7%b5%90%e6%9e%9c%e3%82%92%e7%ae%a1%e7%90%86%e8%80%85/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CloudFormationスタックから外れたサブネットをスタック管理下に引き戻したい</title>
		<link>https://tech-itoya.com/cloudformation%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%81%8b%e3%82%89%e5%a4%96%e3%82%8c%e3%81%9f%e3%82%b5%e3%83%96%e3%83%8d%e3%83%83%e3%83%88%e3%82%92%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e7%ae%a1/</link>
					<comments>https://tech-itoya.com/cloudformation%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%81%8b%e3%82%89%e5%a4%96%e3%82%8c%e3%81%9f%e3%82%b5%e3%83%96%e3%83%8d%e3%83%83%e3%83%88%e3%82%92%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e7%ae%a1/#respond</comments>
		
		<dc:creator><![CDATA[アーサー・C・ダントー]]></dc:creator>
		<pubDate>Sun, 13 Oct 2024 07:54:09 +0000</pubDate>
				<category><![CDATA[TECH記事]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[CloudFormation]]></category>
		<category><![CDATA[IaC]]></category>
		<guid isPermaLink="false">https://tech-itoya.com/?p=134</guid>

					<description><![CDATA[こんにちは。ダントーです。 CloudFormationスタックで管理していたサブネットが、スタックの更新・削除により意図せずスタック管理下から外れてしまって焦っている方向けの記事です。 他リソースが依存しているサブネッ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。ダントーです。</p>



<p>CloudFormationスタックで管理していたサブネットが、スタックの更新・削除により意図せずスタック管理下から外れてしまって焦っている方向けの記事です。</p>



<p>他リソースが依存しているサブネットをスタックから削除しようとすると、<strong>スタックから消えないだけでなく<span class="marker-under">スタック管理下から外れる</span></strong>といった現象に出くわしたので、その際の対応を備忘録として残します。</p>



<p></p>



<p><strong>想定検索ワード</strong>：CloudFormation  スタック  サブネット  外れる</p>



<h2 class="wp-block-heading">TL; DR;</h2>



<ol class="wp-block-list">
<li>CloudFormationの既存スタックへのリソースインポート機能を使う
<ul class="wp-block-list">
<li>スタック管理下から外れたサブネットを既存スタックにインポートします</li>
</ul>
</li>



<li>本来デプロイするはずのテンプレートを使用して既存スタックを再度更新します
<ul class="wp-block-list">
<li>消失したリソースがある場合はこの手順も踏んだほうが良いです</li>
</ul>
</li>
</ol>



<p></p>



<p>では、いきましょう。</p>



<h2 class="wp-block-heading">構成図とCloudFormationテンプレート</h2>



<p>今回想定している構成です。</p>



<p>ポイントはサブネットの存在に依存するリソースが存在していること、つまりサブネット上にVPC Lambdaがデプロイされている点になります。</p>



<p>また、ネットワーク復旧確認用にVPC EndpointとS3を用意しています。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="943" height="471" src="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-1.png" alt="" class="wp-image-193" srcset="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-1.png 943w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-1-300x150.png 300w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-1-768x384.png 768w" sizes="(max-width: 943px) 100vw, 943px" /></figure>



<h2 class="wp-block-heading">本題</h2>



<p>まずは、今回使用するCloudFormationテンプレートを確認します。</p>



<p>テンプレートはNetwork.yamlとLambda.yamlの2種類です。</p>



<p>Network.yamlでは</p>



<ul class="wp-block-list">
<li>VPC</li>



<li>ルートテーブル</li>



<li>サブネット</li>



<li>VPCエンドポイント(Gateway)</li>



<li>パラメータストア(VPCID)　　　　　　← Lambda.yamlにパラメータを渡すために作成</li>



<li>パラメータストア(サブネットID)　　　← Lambda.yamlにパラメータを渡すために作成</li>
</ul>



<p>これらを作成しています。</p>



<p>また、Lambda.yamlでは、</p>



<ul class="wp-block-list">
<li>IAMロール</li>



<li>セキュリティグループ</li>



<li>Lambda関数</li>



<li>S3バケット　　　　　　　　　　　　　←ネットワーク疎通確認用</li>
</ul>



<p>これらを作成しています。</p>



<p>ネットワークの疎通が取れているかを確認するために、Lambda関数内ではS3バケットにファイルをはき出すロジックを入れています。</p>



<p>①正常時、②サブネットをスタックに引き戻したとき</p>



<p>これら2つのケースでネットワークに問題がないことを確認します。</p>



<p>詳細は以下のテンプレートを確認してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="Network.yaml" data-show-lang="0"><code>AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Description: Network

Parameters:
  Prefix:
    Description: Enter Prefix.
    Type: String
    Default: sample

Resources:
#---------------------------------------------------#
# VPC
#---------------------------------------------------#
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-vpc

#---------------------------------------------------#
# RouteTable
#---------------------------------------------------#
  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-private-rt

#---------------------------------------------------#
# Subnet1A and RouteTableAssociation
#---------------------------------------------------#
  PrivateSubnet1A:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.16.0/20
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref AWS::Region
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-private-subnet-1a

  PrivateSubnet1ARouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PrivateRouteTable
      SubnetId: !Ref PrivateSubnet1A

#---------------------------------------------------#
# S3 VPCEndpoint
#---------------------------------------------------#
  RecoveryS3VPCEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub com.amazonaws.${AWS::Region}.s3
      VpcEndpointType: Gateway
      VpcId: !Ref VPC
      RouteTableIds:
        - !Ref PrivateRouteTable

#---------------------------------------------------#
# Parameters Section
#---------------------------------------------------#
  ParamRecoveryVPCId:
    Type: AWS::SSM::Parameter
    Properties:
      Name: /Network/VPCId
      Type: String
      Value: !Ref VPC

  ParamPrivateSubnet1AId:
    Type: AWS::SSM::Parameter
    Properties:
      Name: /Network/PrivateSubnet1AId
      Type: String
      Value: !Ref PrivateSubnet1A</code></pre></div>



<p></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="Lambda.yaml"><code>AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Description: Lambda

Parameters:
  Prefix:
    Description: Enter Prefix.
    Type: String
    Default: sample

  ParamVPCId:
    Type: AWS::SSM::Parameter::Value&lt;String&gt;
    Default: /Network/VPCId

  ParamPrivate1ASubnetId:
    Type: AWS::SSM::Parameter::Value&lt;String&gt;
    Default: /Network/PrivateSubnet1AId

Resources:
#---------------------------------------------------#
# IAM Role for Lambda Function
#---------------------------------------------------#
  LambdaFunctionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${Prefix}-lambda-role
      AssumeRolePolicyDocument:
        Version: &quot;2012-10-17&quot;
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - &#39;sts:AssumeRole&#39;
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
        - arn:aws:iam::aws:policy/AmazonS3FullAccess

#---------------------------------------------------#
# SecurityGroup for Lambda Function
#---------------------------------------------------#
  LambdaSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: for lambda
      GroupName: !Sub ${Prefix}-lambda-sg
      VpcId: !Ref ParamVPCId

  LambdaSGEgressToANY:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
         IpProtocol: -1
         CidrIp: 0.0.0.0/0
         GroupId: !Ref LambdaSG

#---------------------------------------------------#
# Lambda Function
#---------------------------------------------------#
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: !Sub ${Prefix}-function
      Role: !GetAtt LambdaFunctionRole.Arn
      Runtime: python3.10
      Handler: index.lambda_handler
      Code:
        ZipFile: |
          import json
          import boto3
          from datetime import datetime
          
          def lambda_handler(event, context):
              s3 = boto3.client(&#39;s3&#39;)
              bucket_name = &#39;sample-check-network-status-bucket&#39;
              current_time = datetime.now().strftime(&#39;%Y%m%d_%H%M%S&#39;)
              file_name = f&#39;trial_{current_time}.txt&#39;
              file_content = &#39;Hello World!&#39;
              
              s3.put_object(Bucket=bucket_name, Key=file_name, Body=file_content)
              return {
                  &#39;statusCode&#39;: 200,
                  &#39;body&#39;: json.dumps(&#39;Hello from Lambda!&#39;)
              }
      VpcConfig:
        SecurityGroupIds:
          - !Ref LambdaSG
        SubnetIds:
          - !Ref ParamPrivate1ASubnetId
      Timeout: 10

#---------------------------------------------------#
# S3 Bucket for checking the network status
#---------------------------------------------------#
  AssetsBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${Prefix}-check-network-status-bucket
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      VersioningConfiguration:
        Status: Suspended</code></pre></div>



<h3 class="wp-block-heading">状況を再現(スタックを作成する)</h3>



<p>ここでは、CloudShellからスタック作成を実施します。</p>



<p>(破壊した環境にもよりますが、おそらく通常では開発環境等で復旧テスト→当該環境で復旧作業となると想定しています。その際に余計な環境差を出さないためにもCloudShellからの実行としています。)</p>



<p>2つのスタックには依存関係があるので、Network.yaml → Lambda.yamlの順でデプロイしていきます。</p>



<p>ファイルをCloudShellにアップロードした後、以下のコマンドを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># 1. ネットワークスタックを作成
aws cloudformation deploy \
    --template-file Network.yaml \
    --stack-name  sample-network-stack

# 2. Lambdaスタックを作成
aws cloudformation deploy \
    --template-file Lambda.yaml \
    --stack-name  sample-lambda-stack \
    --capabilities CAPABILITY_NAMED_IAM

# 3. ネットワークスタックの管理下にあるリソースを確認
aws cloudformation describe-stack-resources \
    --stack-name sample-network-stack \
    --query &quot;join(&#39;, &#39;, StackResources[*].LogicalResourceId)&quot; --output text \
    --output text</code></pre></div>



<p>3の実行結果は以下となります。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="19" src="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-02-1024x19.png" alt="" class="wp-image-204" style="width:1078px;height:auto" srcset="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-02-1024x19.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-02-300x6.png 300w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-02-768x14.png 768w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-02.png 1062w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>また、Lambda関数を実行してS3バケットにファイルが出力できることも確認しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># 1. S3バケット内のオブジェクト数を確認
#    → 「Total Objects: 0」と表示される
aws s3 ls s3://sample-check-network-status-bucket \
    --recursive \
    --summarize

# 2. Lambda関数を実行
aws lambda invoke \
    --function-name sample-function \
    outputfile.txt

# 3. S3バケット内のオブジェクト数を確認
#    → 「Total Objects: 1」と表示される
aws s3 ls s3://sample-check-network-status-bucket\
    --recursive \
    --summarize</code></pre></div>



<p>ここまででスタックの作成はOKです。</p>



<p></p>



<h3 class="wp-block-heading">状況を再現(スタック管理下からサブネットを外す)</h3>



<p>では、ここからはサブネットをスタック管理下から外していきます。</p>



<p>Network.yaml内の記述を修正したDestructive-Network.yamlを用意して、既存のスタックを上書きしましょう。</p>



<p>Destructive-Network.yamlで作成予定のリソースは以下です。</p>



<ul class="wp-block-list">
<li>VPC</li>



<li>ルートテーブル</li>
</ul>



<p>サブネットを削除しているのがポイントです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="Destructive-Network.yaml"><code>AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Description: Network

Parameters:
  Prefix:
    Description: Enter Prefix.
    Type: String
    Default: sample

Resources:
#---------------------------------------------------#
# VPC
#---------------------------------------------------#
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-vpc

#---------------------------------------------------#
# RouteTable
#---------------------------------------------------#
  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-private-rt</code></pre></div>



<p></p>



<p>ではこのテンプレートをCloudShellにアップロードして、デプロイしちゃいます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash" data-show-lang="1"><code>aws cloudformation deploy \
    --template-file Destructive-Network.yaml \
    --stack-name  sample-network-stack</code></pre></div>



<p></p>



<p>1時間程度経過した後にコンソール画面を確認すると、サブネットの依存関係の問題で数回DELETE_FAILEDとなり、最終的にエラー文は出力されていはいるもののUPDATE_COMPLETEステータスとなっています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># DELETE_FAILED時のエラー文
Resource handler returned message: &quot;The subnet &#39;subnet-0dxxxxxxxxxxxxx25&#39; has dependencies and cannot be deleted.

# UPDATE_COMPLETE時の文
Update successful. One or more resources could not be deleted.</code></pre></div>



<p></p>



<p>ここで、ネットワークスタック管理下にあったサブネットの状況を確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># 1. ネットワークスタックの管理下にあるリソースを確認
aws cloudformation describe-stack-resources \
    --stack-name sample-network-stack \
    --query &quot;join(&#39;, &#39;, StackResources[*].LogicalResourceId)&quot; --output text \
    --output text

# 2. Nameを指定して、既存のサブネットから対象のサブネットの情報を表示
aws ec2 describe-subnets \
    --query &quot;Subnets[?Tags[?Key==&#39;Name&#39; && Value==&#39;sample-private-subnet-1a&#39;]]&quot;</code></pre></div>



<p>1の実行結果は以下です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="298" height="14" src="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-03.png" alt="" class="wp-image-207"/></figure>



<p>サブネットはスタック管理下にはいないことが伺えます。</p>



<p>また一方で、2の結果からはサブネットは削除されず環境上に存在しており、たんにスタックから外れているだけだと推測できます。</p>



<p>この状況ですと、今後の運用でNetwork.yamlテンプレート内でサブネットのID等を利用したい場合には値をべた書きすることになります。仮にこのテンプレートを1環境だけで利用する場合はこれでも構いませんが、複数環境で利用している場合には!Ref等で値を渡せないのはかなり厳しいです。</p>



<p></p>



<p>そのため、再度サブネットをスタック管理下に引き戻し、元の状態へ戻す必要がでてくるはずです。</p>



<h3 class="wp-block-heading">本題：サブネットをスタック管理下に引き戻す</h3>



<p>サブネットをスタック管理下に引き戻すためには、既存スタック(sample-network-stack)に対象のサブネットをインポートします。</p>



<p>既存スタックへのインポート機能の詳細については、以下の公式ドキュメントを参照ください。</p>



<p><a href="https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import-existing-stack.html#resource-import-existing-stack-cli">スタックへの既存リソースのインポート &#8211; AWS CloudFormation (amazon.com)</a></p>



<p></p>



<p>では、順を追ってインポートを実行していきましょう。</p>



<h4 class="wp-block-heading">1. インポート時の設定ファイルを作成する</h4>



<p>インポートコマンド実行時に必要になる設定ファイルを組み立てていきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="Import.json"><code>[
    {
        &quot;ResourceType&quot;: &quot;AWS::EC2::Subnet&quot;,
        &quot;LogicalResourceId&quot;: &quot;PrivateSubnet1A&quot;,
        &quot;ResourceIdentifier&quot;: {
            &quot;SubnetId&quot;:&quot;subnet-0dxxxxxxxxxxxxx25&quot;
        }
    }
]</code></pre></div>



<p>各種キーについて簡単に説明します。</p>



<ul class="wp-block-list">
<li>ResourceType
<ul class="wp-block-list">
<li>インポート対象のリソースタイプを指定する</li>
</ul>
</li>



<li>LogicalResourceId
<ul class="wp-block-list">
<li>インポート時に読み込ませるCloudFormationテンプレート上で、インポート対象のリソースに割り当てる論理IDを指定する</li>



<li>この記事では最終的に元のNetwork.yamlで上書きするため、そこで使用していた論理IDを使っています</li>
</ul>
</li>



<li>ResourceIdentifier
<ul class="wp-block-list">
<li>インポート対象リソース識別子を指定する</li>
</ul>
</li>
</ul>



<p>また、それぞれのキーに何を指定すればよいか(ここではSubnetId)は、get-tempate-summeryコマンドで大まかに調査可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>aws cloudformation get-template-summary \
    --template-body file://./Network.yaml \
    --query &#39;ResourceIdentifierSummaries&#39;</code></pre></div>



<p></p>



<h4 class="wp-block-heading">2. インポート用のCloudFormationテンプレートを作成する</h4>



<p>ここでは、現在デプロイされているCloudFormationテンプレートにインポート対象とするサブネットを追記したものを作成します。</p>



<p>次の2点に注意してください。</p>



<ul class="wp-block-list">
<li>既存リソースの設定値は変更しない</li>



<li>インポート対象のリソースには、DeletionPolicyとUpdateReplacePolicyを追記する</li>
</ul>



<p>※その他の削除済みリソースは後ほど再作成します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="Import-Network.yaml" data-line="39-51"><code>AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Description: Network

Parameters:
  Prefix:
    Description: Enter Prefix.
    Type: String
    Default: sample

Resources:
#---------------------------------------------------#
# VPC
#---------------------------------------------------#
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-vpc

#---------------------------------------------------#
# RouteTable
#---------------------------------------------------#
  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-private-rt

#---------------------------------------------------#
# Subnet1A
#---------------------------------------------------#
  PrivateSubnet1A:
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.16.0/20
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref AWS::Region
      Tags:
        - Key: Name
          Value: !Sub ${Prefix}-private-subnet-1a</code></pre></div>



<p></p>



<h4 class="wp-block-heading">3. インポート実行</h4>



<p>インポートは次の3ステップで実行していきます。</p>



<ol class="wp-block-list">
<li>変更セットの作成 (CLIコマンド：create-change-set)</li>



<li>変更セットの確認 (CLIコマンド：describe-change-set)</li>



<li>変更セットの実行 (CLIコマンド：execute-change-set)</li>
</ol>



<p>Import.jsonとImport-Network.yamlをCloudShellにアップロードし、コマンドを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># 1. 変更セットの作成
aws cloudformation create-change-set \
    --stack-name sample-network-stack --change-set-name sample-network-change-set \
    --change-set-type IMPORT \
    --resources-to-import file://Import.json \
    --template-body file://Import-Network.yaml

# 2. 変更セットの確認
aws cloudformation describe-change-set \
    --stack-name sample-network-stack \
    --change-set-name sample-network-change-set

# 3. 変更セットの実行
aws cloudformation execute-change-set \
    --stack-name sample-network-stack \
    --change-set-name sample-network-change-set</code></pre></div>



<p></p>



<p>サブネットが再びスタック管理下となったことを確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># ネットワークスタックの管理下にあるリソースを確認
aws cloudformation describe-stack-resources \
    --stack-name sample-network-stack \
    --query &quot;join(&#39;, &#39;, StackResources[*].LogicalResourceId)&quot; --output text \
    --output text</code></pre></div>



<p>無事に成功しました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="344" height="17" src="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-04.png" alt="" class="wp-image-214" srcset="https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-04.png 344w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-04-300x15.png 300w, https://tech-itoya.com/wp-content/uploads/2024/10/danto-20241013-04-320x17.png 320w" sizes="(max-width: 344px) 100vw, 344px" /></figure>



<p></p>



<h4 class="wp-block-heading">4. 削除してしまったその他のリソースを再作成する</h4>



<p>ここまでくればあと一息です。</p>



<p>最初のスタックではVPCエンドポイントなども管理していましたが、Destructive-Network.yamlで上書きした際にこれらのリソースは削除されてしまいました。</p>



<p>ですので、最後の手順として元のNetwork.yamlでデプロイして元の状態に戻しましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code># 1. ネットワークスタックを作成
aws cloudformation deploy \
    --template-file Network.yaml \
    --stack-name  sample-network-stack

# 2. ネットワークスタックの管理下にあるリソースを確認
aws cloudformation describe-stack-resources \
    --stack-name sample-network-stack \
    --query &quot;join(&#39;, &#39;, StackResources[*].LogicalResourceId)&quot; --output text \
    --output text</code></pre></div>



<p></p>



<h4 class="wp-block-heading">5. 復旧を確認</h4>



<p>最後にLambda関数を実行して、ネットワークの疎通に問題がないことを確認して終わりとします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># 1. Lambda関数を実行
aws lambda invoke \
    --function-name sample-function \
    outputfile.txt

# 2. S3バケット内のオブジェクト数を確認
#    → 「Total Objects: 2」と表示される
aws s3 ls s3://sample-check-network-status-bucket\
    --recursive \
    --summarize</code></pre></div>



<h2 class="wp-block-heading">おまけ + 参考文献</h2>



<h3 class="wp-block-heading">おまけ</h3>



<p>VPC Lambdaを含むスタックを削除しようとすると、ENIが引っかかって削除に時間がかかることがあります。(私の環境では25分ほどかかりました。)</p>



<p>そんなときのTipsとして、先にCLI操作によってLambdaの設定からVPC設定を外してしまいましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash" data-show-lang="1"><code># 1. S3バケットを空にする
aws s3 rm s3://sample-check-network-status-bucket --recursive

# 2. Lambda関数からVPC設定を外す
aws lambda update-function-configuration \
    --function-name sample-function \
    --vpc-config SubnetIds=[],SecurityGroupIds=[]

# 3. Lambdaスタックを削除
aws cloudformation delete-stack \
    --stack-name sample-lambda-stack

# 4. ネットワークスタックを削除(※依存関係があるため、Lambdaスタックが削除されたことを確認してから実行)
aws cloudformation delete-stack \
    --stack-name sample-network-stack</code></pre></div>



<p>以上です。</p>



<h3 class="wp-block-heading">参考文献</h3>



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resource-import-existing-stack.html#resource-import-existing-stack-cli">スタックへの既存リソースのインポート &#8211; AWS CloudFormation (amazon.com)</a>
<ul class="wp-block-list">
<li>公式ドキュメント</li>
</ul>
</li>



<li><a href="https://qiita.com/a_b_/items/466ba74cc28efcb11285">CloudFormationのresource importを試してみた #AWS &#8211; Qiita</a>
<ul class="wp-block-list">
<li>スタックへのインポートについて紹介しているQiita記事</li>
</ul>
</li>
</ul>
		<div class="wpulike wpulike-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="134"
					data-ulike-nonce="dc557f2466"
					data-ulike-type="post"
					data-ulike-template="wpulike-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_134"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
					<wfw:commentRss>https://tech-itoya.com/cloudformation%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%81%8b%e3%82%89%e5%a4%96%e3%82%8c%e3%81%9f%e3%82%b5%e3%83%96%e3%83%8d%e3%83%83%e3%83%88%e3%82%92%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e7%ae%a1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Amazon QuickSightとMicrosoft Entra IDをSAML連携させた場合のSessionDurationの有効範囲について</title>
		<link>https://tech-itoya.com/amazon-quicksight%e3%81%a8microsoft-entra-id%e3%82%92saml%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%81%9f%e5%a0%b4%e5%90%88%e3%81%aesessionduration%e3%81%ae%e5%bd%b9%e5%89%b2/</link>
					<comments>https://tech-itoya.com/amazon-quicksight%e3%81%a8microsoft-entra-id%e3%82%92saml%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%81%9f%e5%a0%b4%e5%90%88%e3%81%aesessionduration%e3%81%ae%e5%bd%b9%e5%89%b2/#respond</comments>
		
		<dc:creator><![CDATA[アーサー・C・ダントー]]></dc:creator>
		<pubDate>Wed, 18 Sep 2024 16:07:25 +0000</pubDate>
				<category><![CDATA[TECH記事]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[QuickSight]]></category>
		<guid isPermaLink="false">https://tech-itoya.com/?p=30</guid>

					<description><![CDATA[こんにちは。Dantoです。 今回は、Amazon QuickSightとMicrosoft Entra IDをSAML連携した場合のSessionDuration値の役割について書いていきます。 TL; DR; 本題  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。Dantoです。</p>



<p>今回は、Amazon QuickSightとMicrosoft Entra IDをSAML連携した場合のSessionDuration値の役割について書いていきます。</p>



<p></p>



<h2 class="wp-block-heading">TL; DR;</h2>



<ul class="wp-block-list">
<li>SessionDurationの設定値はQuickSightのセッション継続時間とは無関係
<ul class="wp-block-list">
<li>QuickSightのセッション継続時間は独自管理となっており、12時間固定</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">本題</h2>



<h3 class="wp-block-heading">前提</h3>



<p>Amazon QuickSightとMicrosoft Entra IDをSAML連携させた場合、オプションでEntra ID側にSessionDuration値を設定することができます。</p>



<p>SessionDurationとは、読んで字のごとく「セッションを継続させる時間」を表す属性ですが、念のため公式ドキュメントの記述を引用しておきます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><span class="fz-12px"><span class="fz-14px">(Optional) You can use an&nbsp;<code>Attribute</code>&nbsp;element with the&nbsp;<code>Name</code>&nbsp;attribute set to&nbsp;<code>https://aws.amazon.com/SAML/Attributes/SessionDuration"</code>. This element contains one&nbsp;<code>AttributeValue</code>&nbsp;element that specifies how long the user can access the AWS Management Console before having to request new temporary credentials. The value is an integer representing the number of seconds for the session. The value can range from 900 seconds (15 minutes) to 43200 seconds (12 hours). If this attribute is not present, then the credential last for one hour (the default value of the&nbsp;<code>DurationSeconds</code>&nbsp;parameter of the&nbsp;<code>AssumeRoleWithSAML</code>&nbsp;API).</span></span></p>



<p><span class="fz-14px">(オプション) Name 属性を https://aws.amazon.com/SAML/Attributes/SessionDuration&#8221; に設定した Attribute 要素を使用できます。この要素には AttributeValue 要素が 1 つ含まれ、ユーザーが新しい一時的な認証情報を要求するまでに AWS Management Console にアクセスできる時間を指定します。値は、セッションの秒数を表す整数です。値の範囲は 900 秒（15 分）から 43200 秒（12 時間）です。この属性が存在しない場合は、クレデンシャルは 1 時間持続します (AssumeRoleWithSAML API の DurationSeconds パラメータのデフォルト値)。</span></p>
</blockquote>



<p></p>



<p>ドキュメントからは３つの情報を読み取ることができそうです。</p>



<ul class="wp-block-list">
<li>https://aws.amazon.com/SAML/Attributes/SessionDurationの値として<strong>整数値を設定</strong>できる</li>



<li>SessionDurationでは<strong>AWSマネージメントコンソールにアクセスできる時間を指定</strong>する</li>



<li><strong>設定値の範囲は900(15分)から43200(12時間)</strong>
<ul class="wp-block-list">
<li>デフォルトは3600(1時間)</li>
</ul>
</li>
</ul>



<p></p>



<p>ひとまず、SessionDurationに設定した値はAWSマネージメントコンソールにアクセス可能な時間と関係していることは理解しました。</p>



<p></p>



<p>また、ここではIDプロバイダにIAMロールを割り当てる際に、許可されるアクセスとして「プログラムと AWS マネジメントコンソールへのアクセスを許可する」を選択しています。</p>



<p></p>



<h3 class="wp-block-heading">疑問</h3>



<p><strong>SessionDurationの値は、QuickSightコンソールにアクセスできるセッションの継続時間とは関係ないのか…？</strong></p>



<p>(SessionDurationを900秒に設定したらQuickSightのセッション継続時間も900秒になるのか…？)</p>



<p></p>



<p>(↓↓↓QuickSightコンソール)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="515" src="https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-1-1024x515.png" alt="" class="wp-image-127" srcset="https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-1-1024x515.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-1-300x151.png 300w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-1-768x386.png 768w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-1.png 1120w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">結論</h3>



<p><strong>SessionDurationの設定値とQuickSight側のセッション継続時間は無関係</strong></p>



<p>あくまで、SessionDurationはAWSマネージメントコンソールにアクセス可能なセッションとのみ関係しているそうです。</p>



<p><strong>また、QuickSight側のセッション継続時間は独自管理であり、12時間固定で変更はできません。</strong></p>



<p></p>



<p>なので、SessionDurationを設定値を900とした場合のセッション継続時間は</p>



<ul class="wp-block-list">
<li><strong>AWSマネージメントコンソール : 15分</strong></li>



<li><strong>QuickSightコンソール : 12時間</strong></li>
</ul>



<p>となります。</p>



<p></p>



<h2 class="wp-block-heading">おまけ</h2>



<p>厄介なことに、IDフェデレーションによってQuickSightにサインインするユーザは、AWSコンソールにもサインインできてしまいます。</p>



<p>※AWSマネージメントコンソールへのサインインを防ぐ方法はありません。</p>



<p></p>



<p>ただし、引き受けさせるIAMロールの権限を絞っておけば、基本的には何もできない状態にはできます。</p>



<p></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Sid&quot;: &quot;quicksight&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;quicksight:DescribeDashboard&quot;,
                &quot;quicksight:ListDashboards&quot;
            ],
            &quot;Resource&quot;: &quot;arn:aws:quicksight::123456789012:*&quot;
        }
    ]
}</code></pre></div>



<p></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="477" src="https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-2-1024x477.png" alt="" class="wp-image-128" srcset="https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-2-1024x477.png 1024w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-2-300x140.png 300w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-2-768x358.png 768w, https://tech-itoya.com/wp-content/uploads/2024/09/danto-20240919-2.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>AWSマネージメントコンソールへのアクセスを許容し難い場合は、せめてもの対策として</p>



<ul class="wp-block-list">
<li>IDプロバイダに割り当てるIAMロールの権限を最小限にする</li>



<li>SessionDurationの値を最小限にする</li>
</ul>



<p>この辺は講じてもよいかもしれません。</p>



<p></p>



<p>以上です。</p>



<h2 class="wp-block-heading">参考記事</h2>



<ul class="wp-block-list">
<li><a href="https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html">認証レスポンス用の SAML アサーションを設定する &#8211; AWS Identity and Access Management (amazon.com)</a>
<ul class="wp-block-list">
<li>公式ドキュメント</li>
</ul>
</li>



<li><a href="https://dev.classmethod.jp/articles/tsnote-quicksight-login-01/">QuickSightへのアクセス時に「セッションで問題が発生しました。新しいセッションを開始するには、管理者から指定されたリンクに戻ってください。」とメッセージが表示される場合の対処方法 | DevelopersIO (classmethod.jp)</a>
<ul class="wp-block-list">
<li>QuickSightのセッションについてのクラスメソッドさん記事</li>
</ul>
</li>
</ul>



<p></p>
		<div class="wpulike wpulike-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="30"
					data-ulike-nonce="cfc44dcf4e"
					data-ulike-type="post"
					data-ulike-template="wpulike-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_30"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
					<wfw:commentRss>https://tech-itoya.com/amazon-quicksight%e3%81%a8microsoft-entra-id%e3%82%92saml%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%81%9f%e5%a0%b4%e5%90%88%e3%81%aesessionduration%e3%81%ae%e5%bd%b9%e5%89%b2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
