💡

Secrets Manager のアクセス制御

2023/03/07に公開

やりたいこと

Secrets Manager に登録されたシークレットに対して以下のアクセス制限を実施したい

  • 特定の VPC からのみアクセスをさせたい
  • 特定ロールのメンバーのみコンソールや CLI を使用してシークレットの操作/参照が出来る

実装方法

以下二つのポリシーを使用する

  • ID ベースのポリシー
  • リソースベースのポリシー

実際の設定内容

ID ベースのポリシー

以下ポリシーをシークレットにアクセスさせたいインスタンスや Lambda、ユーザに付与します

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:Put*",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "arn:aws:secretsmanager:ap-northeast-1:xxx:secret:<シークレット名>"
            ]
        }
    ]
}

リソースベースのポリシー

以下ポリシーをシークレットに対して設定します

{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Effect" : "Deny",
    "Principal" : "*",
    "Action" : [ "secretsmanager:GetSecretValue", "secretsmanager:Put*", "secretsmanager:Delete*", "secretsmanager:DescribeSecret" ],
    "Resource" : "*",
    "Condition" : {
      "StringNotEquals" : {
        "aws:SourceVpc" : "vpc-xxx"
      },
      "ArnNotEquals" : {
        "aws:PrincipalArn" : "arn:aws:iam::xxx:role/<ロール名>"
      }
    }
  }, {
    "Effect" : "Deny",
    "Principal" : "*",
    "Action" : [ "secretsmanager:GetSecretValue", "secretsmanager:Put*", "secretsmanager:Delete*", "secretsmanager:DescribeSecret" ],
    "Resource" : "*",
    "Condition" : {
      "NotIpAddress" : {
        "aws:VpcSourceIp" : "x.x.x.x/x"
      },
      "ArnNotEquals" : {
        "aws:PrincipalArn" : "arn:aws:iam::xxx:role/<ロール名>"
      }
    }
  } ]
}

参考

IAM やポリシーについては以下のチバユキさんや公式がわかりやすいというかブックマーク必須のドキュメントです
https://dev.classmethod.jp/articles/re-introduction-2022-aws-iam/
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
https://dev.classmethod.jp/articles/devio-2021-iam-evaluation-logic/

2023/03/09:追記
こちらもとってもわかりやすかったです

https://dev.classmethod.jp/articles/learn-aws-policy-documents-with-examples/

もっとセキュリティを強くするには

VPC エンドポイント上でエンドポイントポリシーを使用する!

https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/vpc-endpoints-access.html

Discussion