AWS IP制限

例えばAmazon S3であればバケットポリシー、AWS WAFであればConditionsやRulesを設定してIPアドレスを制限できますが、今回はWebシステムにアクセスできるIPアドレスを制限することをテーマにご紹介させていただきたいと思います。

セキュリティグループによるIPアドレス制限
ネットワーク ACLによるIPアドレス制限
ロードバランサ(ALB)によるIPアドレス制限

AWSでIPアドレスを制限する3つの方法 2019

IAMユーザー Route53 特定のHostedZoneを変更する権限

terraform
resource "aws_iam_group" "route53_operator" {
  name = "route53-operator"
}

resource "aws_iam_policy" "route53_operator" {
  name        = "route53-operator"
  description = "route53-operator"
  policy      = data.aws_iam_policy_document.route53_operator.json
}

data "aws_iam_policy_document" "route53_operator" {
  statement {
    sid    = ""
    effect = "Allow"
    actions = [
      "route53:GetHostedZoneCount",
      "route53:ListHostedZones",
      "route53:ListHostedZonesByName",
      "route53:ListResourceRecordSets",
      "route53:ListTrafficPolicies",
    ]
    resources = ["*"]
  }

  statement {
    sid    = ""
    effect = "Allow"
    actions = [
      "route53:ChangeResourceRecordSets",
      "route53:GetHostedZone",
      "route53:ListResourceRecordSets",
      "route53:UpdateHostedZoneComment",
    ]
    resources = [
      "${aws_route53_zone.this.arn}"
    ]
  }
}

resource "aws_iam_group_policy_attachment" "route53_operator" {
  group      = aws_iam_group.route53_operator.name
  policy_arn = aws_iam_policy.route53_operator.arn
}

resource "aws_iam_user" "route53_operator" {
  name = "route53-operator"
}

resource "aws_iam_group_membership" "route53_operator" {
  name = "route53_operator"
  users = [
    aws_iam_user.route53_operator.name,
  ]
  group = aws_iam_group.route53_operator.name
}

terraform import 2

terraform import module

先に結論

terraform import module.[module name].aws_hogehoge [target]

のようにすればいい。
module 化した Terraform に AWS リソースを import する #AWS - Qiita 2022

import block

1.5.0 からimport blockが使える

In Terraform v1.5.0 and later, use an import block to import ECR Repositories using the name. For example:

import {
  to = aws_ecr_repository.service
  id = "test-service"
}

Using terraform import, import ECR Repositories using the name. For example:

% terraform import aws_ecr_repository.service test-service

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecr_repository#import

AWS Organizations 連絡先情報

【アップデート】AWS OrganizationsからAWSアカウントの連絡先情報が一元管理できるようになりました。 | SunnyCloud 2022

この機能を使うためには前提として Organizations のサービスメニューから AWS Acccount Management の信頼されたアクセスを有効化する必要があります。
こちらが有効化されていない場合は以下のように連絡先情報タブにアクセスが出来ません。
AWS Organizations コンソールから各アカウントの連絡先情報を参照・更新することが出来るようになりました | DevelopersIO 2022

CloudFormation IAMユーザ削除

CloudFormationのスタック削除→IAMユーザ削除で以下エラー

Cannot delete entity, must remove tokens from principal first.

MFAトークンを削除後に再度スタック削除でエラー解消した。

IAM Userの削除
適当にIAM Userを削除しようとすると
Cannot delete entity, must remove tokens from principal first.
と出ることがある。IAM Userの削除前にUserに紐づく以下を事前に削除しておかないといけないという話。

AWS IAM 関係メモ 2023